diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ebf22c..4be2186 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ +# v3.0.0 +## 04/11/2019 + +1. [](#new) + * Added new `template:` to choose twig template option for email form processing + * Moved `buildMessage()` and `parseAddressValue()` to Email object and made public + * Refactored the `EmailUtils::sendEmail()` to take an array of params or the old param list + * Switched to SwiftMailer v.6.1.3 (requires PHP7/Grav 1.6) + * SwiftMailer 6.x compatibility fixes + * Updated various translations + * Added support for Email Queue with Scheduler support + * Code cleanup, composer update + * Added a new `clear-queue-failures` CLI command to flush out failed sends +1. [](#improved) + * Added backlink for scheduler task + * Added support for `environment` option to `flushqueue` CLI command + * Fixed mailtrap hostname in README.md + * Disable autocomplete on SMTP `user` and `password` fields + # v2.7.2 ## 01/25/2019 @@ -8,7 +27,7 @@ * Updated RU language [#100](https://github.com/getgrav/grav-plugin-email/pull/100) * Updated to SwiftMailer v5.4.12 1. [](#bugfix) - * Fixed `mailtrap` hostname + * Fixed `mailtrap` hostname # v2.7.1 ## 12/05/2017 @@ -19,7 +38,7 @@ * Added examples of setting up Email plugin with various SMTP providers * Updated RU language [#60](https://github.com/getgrav/grav-plugin-email/pull/60) * Updated to SwiftMailer v5.4.8 - + # v2.7.0 ## 10/26/2017 diff --git a/README.md b/README.md index e9f3213..1214be3 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,11 @@ from: from_name: to: to_name: +queue: + enabled: true + flush_frequency: '* * * * *' + flush_msg_limit: 10 + flush_time_limit: 100 mailer: engine: sendmail smtp: @@ -179,6 +184,18 @@ Solid SMTP options that even provide a FREE tier for low email volumes include: If you are still unsure why should be using one in the first place, check out this article: https://zapier.com/learn/email-marketing/best-transactional-email-sending-services/ +## Email Queue + +For performance reasons, it's often desirable to queue emails and send them in batches, rather than forcing Grav to wait while an email is sent. This is because email servers are sometimes slow and you might not want to wait for the whole email-sending process before continuing with Grav processing. + +To address this, you can enable the **Email Queue** and this will ensure all email's in Grav are actually sent to the queue, and not sent directly. In order for the emails to be actually sent, you need to flush the queue. By default this is handled by the **Grav Scheduler**, so you need to ensure you have that enabled and setup correctly or **your emails will not be sent!!!**. + +You can also manually flush the queue by using the provided CLI command: + +``` +$ bin/plugin email flush-queue +``` + ## Testing with CLI Command You can test your email configuration with the following CLI Command: diff --git a/blueprints.yaml b/blueprints.yaml index c12e408..b3b8084 100644 --- a/blueprints.yaml +++ b/blueprints.yaml @@ -1,5 +1,6 @@ name: Email -version: 2.7.2 +version: 3.0.0 +testing: false description: Enables the emailing system for Grav icon: envelope author: @@ -12,7 +13,7 @@ bugs: https://github.com/getgrav/grav-plugin-email/issues license: MIT dependencies: - - { name: grav, version: '>=1.1.9' } + - { name: grav, version: '>=1.6.0' } form: validation: loose @@ -52,6 +53,11 @@ form: label: PLUGIN_EMAIL.CHARSET placeholder: "Defaults to UTF-8" + email_Defaults: + type: section + title: PLUGIN_EMAIL.EMAIL_DEFAULTS + underline: true + from: type: email size: medium @@ -128,6 +134,11 @@ form: label: PLUGIN_EMAIL.EMAIL_BODY placeholder: PLUGIN_EMAIL.EMAIL_BODY_PLACEHOLDER + smtp_config: + type: section + title: PLUGIN_EMAIL.SMTP_CONFIGURATION + underline: true + mailer.smtp.server: type: text size: medium @@ -156,26 +167,76 @@ form: mailer.smtp.user: type: text size: medium + autocomplete: nope label: PLUGIN_EMAIL.SMTP_LOGIN_NAME mailer.smtp.password: type: password size: medium + autocomplete: nope label: PLUGIN_EMAIL.SMTP_PASSWORD + sendmail_config: + type: section + title: Sendmail Configuration + underline: true + mailer.sendmail.bin: type: text size: medium label: PLUGIN_EMAIL.PATH_TO_SENDMAIL placeholder: "/usr/sbin/sendmail" + queue_section: + type: section + title: PLUGIN_EMAIL.QUEUE_TITLE + text: PLUGIN_EMAIL.QUEUE_DESC + markdown: true + underline: true + + queue.enabled: + type: toggle + label: PLUGIN_EMAIL.QUEUE_ENABLED + highlight: 0 + default: 0 + options: + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED + validate: + type: bool + + queue.flush_frequency: + type: cron + label: PLUGIN_EMAIL.QUEUE_FLUSH_FREQUENCY + size: medium + help: PLUGIN_EMAIL.QUEUE_FLUSH_FREQUENCY_HELP + default: '* * * * *' + placeholder: '* * * * *' + + queue.flush_msg_limit: + type: number + label: PLUGIN_EMAIL.QUEUE_FLUSH_MSG_LIMIT + size: x-small + append: Messages + + queue.flush_time_limit: + type: number + label: PLUGIN_EMAIL.QUEUE_FLUSH_TIME_LIMIT + size: x-small + append: Seconds + + advanced_section: + type: section + title: PLUGIN_EMAIL.ADVANCED + underline: true + debug: type: toggle label: PLUGIN_EMAIL.DEBUG highlight: 1 default: 0 options: - true: PLUGIN_ADMIN.ENABLED - false: PLUGIN_ADMIN.DISABLED + 1: PLUGIN_ADMIN.ENABLED + 0: PLUGIN_ADMIN.DISABLED validate: type: bool diff --git a/classes/Email.php b/classes/Email.php index 1af8b33..9ecc53c 100644 --- a/classes/Email.php +++ b/classes/Email.php @@ -3,6 +3,9 @@ use Grav\Common\Config\Config; use Grav\Common\Grav; +use Grav\Common\Language\Language; +use Grav\Common\Twig\Twig; +use Grav\Framework\Form\Interfaces\FormInterface; use \Monolog\Logger; use \Monolog\Handler\StreamHandler; @@ -18,14 +21,16 @@ class Email */ protected $logger; + protected $queue_path; + /** * Returns true if emails have been enabled in the system. * * @return bool */ - public function enabled() + public static function enabled() { - return Grav::instance()['config']->get('plugins.email.mailer.engine') != 'none'; + return Grav::instance()['config']->get('plugins.email.mailer.engine') !== 'none'; } /** @@ -33,7 +38,7 @@ public function enabled() * * @return bool */ - public function debug() + public static function debug() { return Grav::instance()['config']->get('plugins.email.debug') == 'true'; } @@ -118,6 +123,218 @@ public function send($message) return $result; } + /** + * Build e-mail message. + * + * @param array $params + * @param array $vars + * @return \Swift_Message + */ + public function buildMessage(array $params, array $vars = []) + { + /** @var Twig $twig */ + $twig = Grav::instance()['twig']; + + /** @var Config $config */ + $config = Grav::instance()['config']; + + /** @var Language $language */ + $language = Grav::instance()['language']; + + // Extend parameters with defaults. + $params += [ + 'bcc' => $config->get('plugins.email.bcc', []), + 'body' => $config->get('plugins.email.body', '{% include "forms/data.html.twig" %}'), + 'cc' => $config->get('plugins.email.cc', []), + 'cc_name' => $config->get('plugins.email.cc_name'), + 'charset' => $config->get('plugins.email.charset', 'utf-8'), + 'from' => $config->get('plugins.email.from'), + 'from_name' => $config->get('plugins.email.from_name'), + 'content_type' => $config->get('plugins.email.content_type', 'text/html'), + 'reply_to' => $config->get('plugins.email.reply_to', []), + 'reply_to_name' => $config->get('plugins.email.reply_to_name'), + 'subject' => !empty($vars['form']) && $vars['form'] instanceof FormInterface ? $vars['form']->page()->title() : null, + 'to' => $config->get('plugins.email.to'), + 'to_name' => $config->get('plugins.email.to_name'), + 'process_markdown' => false, + 'template' => false + ]; + + // Create message object. + $message = $this->message(); + + if (!$params['to']) { + throw new \RuntimeException($language->translate('PLUGIN_EMAIL.PLEASE_CONFIGURE_A_TO_ADDRESS')); + } + if (!$params['from']) { + throw new \RuntimeException($language->translate('PLUGIN_EMAIL.PLEASE_CONFIGURE_A_FROM_ADDRESS')); + } + + // Process parameters. + foreach ($params as $key => $value) { + switch ($key) { + case 'body': + if (is_string($value)) { + $body = $twig->processString($value, $vars); + + if ($params['process_markdown']) { + $parsedown = new \Parsedown(); + $body = $parsedown->text($body); + } + + if ($params['template']) { + $body = $twig->processTemplate($params['template'], ['content' => $body]); + } + + $content_type = !empty($params['content_type']) ? $twig->processString($params['content_type'], $vars) : null; + $charset = !empty($params['charset']) ? $twig->processString($params['charset'], $vars) : null; + + $message->setBody($body, $content_type, $charset); + } + elseif (is_array($value)) { + foreach ($value as $body_part) { + $body_part += [ + 'charset' => $params['charset'], + 'content_type' => $params['content_type'], + ]; + + $body = !empty($body_part['body']) ? $twig->processString($body_part['body'], $vars) : null; + + if ($params['process_markdown']) { + $parsedown = new \Parsedown(); + $body = $parsedown->text($body); + } + + $content_type = !empty($body_part['content_type']) ? $twig->processString($body_part['content_type'], $vars) : null; + $charset = !empty($body_part['charset']) ? $twig->processString($body_part['charset'], $vars) : null; + + if (!$message->getBody()) { + $message->setBody($body, $content_type, $charset); + } + else { + $message->addPart($body, $content_type, $charset); + } + } + } + break; + + case 'subject': + $message->setSubject($twig->processString($language->translate($value), $vars)); + break; + + case 'to': + if (is_string($value) && !empty($params['to_name'])) { + $value = [ + 'mail' => $twig->processString($value, $vars), + 'name' => $twig->processString($params['to_name'], $vars), + ]; + } + + foreach ($this->parseAddressValue($value, $vars) as $address) { + $message->addTo($address->mail, $address->name); + } + break; + + case 'cc': + if (is_string($value) && !empty($params['cc_name'])) { + $value = [ + 'mail' => $twig->processString($value, $vars), + 'name' => $twig->processString($params['cc_name'], $vars), + ]; + } + + foreach ($this->parseAddressValue($value, $vars) as $address) { + $message->addCc($address->mail, $address->name); + } + break; + + case 'bcc': + foreach ($this->parseAddressValue($value, $vars) as $address) { + $message->addBcc($address->mail, $address->name); + } + break; + + case 'from': + if (is_string($value) && !empty($params['from_name'])) { + $value = [ + 'mail' => $twig->processString($value, $vars), + 'name' => $twig->processString($params['from_name'], $vars), + ]; + } + + foreach ($this->parseAddressValue($value, $vars) as $address) { + $message->addFrom($address->mail, $address->name); + } + break; + + case 'reply_to': + if (is_string($value) && !empty($params['reply_to_name'])) { + $value = [ + 'mail' => $twig->processString($value, $vars), + 'name' => $twig->processString($params['reply_to_name'], $vars), + ]; + } + + foreach ($this->parseAddressValue($value, $vars) as $address) { + $message->addReplyTo($address->mail, $address->name); + } + break; + + } + } + + return $message; + } + + /** + * Return parsed e-mail address value. + * + * @param string|string[] $value + * @param array $vars + * @return array + */ + public function parseAddressValue($value, array $vars = []) + { + $parsed = []; + + /** @var Twig $twig */ + $twig = Grav::instance()['twig']; + + // Single e-mail address string + if (is_string($value)) { + $parsed[] = (object) [ + 'mail' => $twig->processString($value, $vars), + 'name' => null, + ]; + } + + else { + // Cast value as array + $value = (array) $value; + + // Single e-mail address array + if (!empty($value['mail'])) { + $parsed[] = (object) [ + 'mail' => $twig->processString($value['mail'], $vars), + 'name' => !empty($value['name']) ? $twig->processString($value['name'], $vars) : NULL, + ]; + } + + // Multiple addresses (either as strings or arrays) + elseif (!(empty($value['mail']) && !empty($value['name']))) { + foreach ($value as $y => $itemx) { + $addresses = $this->parseAddressValue($itemx, $vars); + + if (($address = reset($addresses))) { + $parsed[] = $address; + } + } + } + } + + return $parsed; + } + /** * Return debugging logs if enabled * @@ -144,40 +361,12 @@ protected function getMailer() if (!$this->mailer) { /** @var Config $config */ $config = Grav::instance()['config']; - $mailer = $config->get('plugins.email.mailer.engine'); + $queue_enabled = $config->get('plugins.email.queue.enabled'); - // Create the Transport and initialize it. - switch ($mailer) { - case 'smtp': - $transport = \Swift_SmtpTransport::newInstance(); - - $options = $config->get('plugins.email.mailer.smtp'); - if (!empty($options['server'])) { - $transport->setHost($options['server']); - } - if (!empty($options['port'])) { - $transport->setPort($options['port']); - } - if (!empty($options['encryption']) && $options['encryption'] != 'none') { - $transport->setEncryption($options['encryption']); - } - if (!empty($options['user'])) { - $transport->setUsername($options['user']); - } - if (!empty($options['password'])) { - $transport->setPassword($options['password']); - } - break; - case 'sendmail': - default: - $options = $config->get('plugins.email.mailer.sendmail'); - $bin = !empty($options['bin']) ? $options['bin'] : '/usr/sbin/sendmail'; - $transport = \Swift_SendmailTransport::newInstance($bin); - break; - } + $transport = $queue_enabled === true ? $this->getQueue() : $this->getTransport(); // Create the Mailer using your created Transport - $this->mailer = \Swift_Mailer::newInstance($transport); + $this->mailer = new \Swift_Mailer($transport); // Register the logger if we're debugging. if ($this->debug()) { @@ -188,4 +377,167 @@ protected function getMailer() return $this->mailer; } + + protected static function getQueuePath() + { + $queue_path = Grav::instance()['locator']->findResource('user://data', true) . '/email-queue'; + + if (!file_exists($queue_path)) { + mkdir($queue_path); + } + + return $queue_path; + } + + protected static function getQueue() + { + $queue_path = static::getQueuePath(); + + $spool = new \Swift_FileSpool($queue_path); + $transport = new \Swift_SpoolTransport($spool); + + return $transport; + } + + public static function flushQueue() + { + $grav = Grav::instance(); + + $grav['debugger']->enabled(false); + + $config = $grav['config']->get('plugins.email.queue'); + + $queue = static::getQueue(); + $spool = $queue->getSpool(); + $spool->setMessageLimit($config['flush_msg_limit']); + $spool->setTimeLimit($config['flush_time_limit']); + + try { + $failures = []; + $result = $spool->flushQueue(static::getTransport(), $failures); + return $result . ' messages flushed from queue...'; + } catch (\Exception $e) { + $grav['log']->error($e->getMessage()); + return $e->getMessage(); + } + + } + + public static function clearQueueFailures() + { + $grav = Grav::instance(); + $grav['debugger']->enabled(false); + + $preferences = \Swift_Preferences::getInstance(); + $preferences->setTempDir(sys_get_temp_dir()); + + /** @var \Swift_Transport $transport */ + $transport = static::getTransport(); + if (!$transport->isStarted()) { + $transport->start(); + } + + $queue_path = static::getQueuePath(); + + foreach (new \GlobIterator($queue_path . '/*.sending') as $file) { + $final_message = $file->getPathname(); + + /** @var \Swift_Message $message */ + $message = unserialize(file_get_contents($final_message)); + + echo(sprintf( + 'Retrying "%s" to "%s"', + $message->getSubject(), + implode(', ', array_keys($message->getTo())) + ) . "\n"); + + try { + $clean = static::cloneMessage($message); + $transport->send($clean); + echo("sent!\n"); + + // DOn't want to trip up any errors from sending too fast + sleep(1); + } catch (\Swift_TransportException $e) { + echo("ERROR: Send failed - deleting spooled message\n"); + } + + // Remove the file + unlink($final_message); + } + } + + /** + * Clean copy a message + * + * @param \Swift_Message $message + */ + public static function cloneMessage($message) + { + $clean = new \Swift_Message(); + + $clean->setBoundary($message->getBoundary()); + $clean->setBcc($message->getBcc()); + $clean->setBody($message->getBody()); + $clean->setCharset($message->getCharset()); + $clean->setChildren($message->getChildren()); + $clean->setContentType($message->getContentType()); + $clean->setCc($message->getCc()); + $clean->setDate($message->getDate()); + $clean->setDescription($message->getDescription()); + $clean->setEncoder($message->getEncoder()); + $clean->setFormat($message->getFormat()); + $clean->setFrom($message->getFrom()); + $clean->setId($message->getId()); + $clean->setMaxLineLength($message->getMaxLineLength()); + $clean->setPriority($message->getPriority()); + $clean->setReplyTo($message->getReplyTo()); + $clean->setReturnPath($message->getReturnPath()); + $clean->setSender($message->getSender()); + $clean->setSubject($message->getSubject()); + $clean->setTo($message->getTo()); + + return $clean; + + } + + protected static function getTransport() + { + /** @var Config $config */ + $config = Grav::instance()['config']; + + $engine = $config->get('plugins.email.mailer.engine'); + + // Create the Transport and initialize it. + switch ($engine) { + case 'smtp': + $transport = new \Swift_SmtpTransport(); + + $options = $config->get('plugins.email.mailer.smtp'); + if (!empty($options['server'])) { + $transport->setHost($options['server']); + } + if (!empty($options['port'])) { + $transport->setPort($options['port']); + } + if (!empty($options['encryption']) && $options['encryption'] !== 'none') { + $transport->setEncryption($options['encryption']); + } + if (!empty($options['user'])) { + $transport->setUsername($options['user']); + } + if (!empty($options['password'])) { + $transport->setPassword($options['password']); + } + break; + case 'sendmail': + default: + $options = $config->get('plugins.email.mailer.sendmail'); + $bin = !empty($options['bin']) ? $options['bin'] : '/usr/sbin/sendmail'; + $transport = new \Swift_SendmailTransport($bin); + break; + } + + return $transport; + } } diff --git a/classes/Utils.php b/classes/Utils.php index dbb573d..69b85b4 100644 --- a/classes/Utils.php +++ b/classes/Utils.php @@ -3,6 +3,8 @@ namespace Grav\Plugin\Email; use Grav\Common\Grav; +use Grav\Common\Twig\Twig; +use Grav\Common\Utils as GravUtils; /** * Class Utils @@ -13,49 +15,34 @@ class Utils /** * Quick utility method to send an HTML email. * - * @param $subject - * @param string $content - * @param string $to - * @param null $from - * @param string $mimetype + * @param array $params * * @return bool True if the action was performed. */ - public static function sendEmail($subject, $content, $to = null, $from = null, $mimetype = 'text/html') + public static function sendEmail(...$params) { - $grav = Grav::instance(); - - if (!$to) { - $to = $grav['config']->get('plugins.email.to'); - } - - if (!$from) { - $from = $grav['config']->get('plugins.email.from'); + if (is_array($params[0])) { + $params = array_shift($params); + } else { + $keys = ['subject', 'body', 'to', 'from', 'content_type']; + $params = GravUtils::arrayCombine($keys, $params); } + + //Initialize twig if not yet initialized + /** @var Twig $twig */ + $twig = Grav::instance()['twig']->init(); - if (!isset($grav['Email']) || empty($from)) { - throw new \RuntimeException($grav['language']->translate('PLUGIN_EMAIL.PLEASE_CONFIGURE_A_FROM_ADDRESS')); - } + /** @var Email $email */ + $email = Grav::instance()['Email']; - if (empty($to) || empty($subject) || empty($content)) { + if (empty($params['to']) || empty($params['subject']) || empty($params['body'])) { return false; } - //Initialize twig if not yet initialized - $grav['twig']->init(); - - $body = $grav['twig']->processTemplate('email/base.html.twig', ['content' => $content]); - - $message = $grav['Email']->message($subject, $body, $mimetype) - ->setFrom($from) - ->setTo($to); + $params['body'] = $twig->processTemplate('email/base.html.twig', ['content' => $params['body']]); - $sent = $grav['Email']->send($message); + $message = $email->buildMessage($params); - if ($sent < 1) { - return false; - } else { - return true; - } + return $email->send($message); } } diff --git a/cli/ClearQueueFailuresCommand.php b/cli/ClearQueueFailuresCommand.php new file mode 100644 index 0000000..13fe9f2 --- /dev/null +++ b/cli/ClearQueueFailuresCommand.php @@ -0,0 +1,60 @@ +setName('clear-queue-failures') + ->setAliases(['clearqueue']) + ->addOption( + 'env', + 'e', + InputOption::VALUE_OPTIONAL, + 'The environment to trigger a specific configuration. For example: localhost, mysite.dev, www.mysite.com' + ) + ->setDescription('Clears any queue failures that have accumulated') + ->setHelp('The clear-queue-failures command clears any queue failures that have accumulated'); + } + + /** + * @return int|null|void + */ + protected function serve() + { + $grav = Grav::instance(); + + $this->output->writeln(''); + $this->output->writeln('Current Configuration:'); + $this->output->writeln(''); + + dump($grav['config']->get('plugins.email')); + + $this->output->writeln(''); + + require_once __DIR__ . '/../vendor/autoload.php'; + + $output = Email::clearQueueFailures(); + + $this->output->writeln('' . $output . ''); + + } +} diff --git a/cli/FlushQueueCommand.php b/cli/FlushQueueCommand.php new file mode 100644 index 0000000..166ec8a --- /dev/null +++ b/cli/FlushQueueCommand.php @@ -0,0 +1,60 @@ +setName('flush-queue') + ->setAliases(['flushqueue']) + ->addOption( + 'env', + 'e', + InputOption::VALUE_OPTIONAL, + 'The environment to trigger a specific configuration. For example: localhost, mysite.dev, www.mysite.com' + ) + ->setDescription('Flushes the email queue of any pending emails') + ->setHelp('The flush-queue command flushes the email queue of any pending emails'); + } + + /** + * @return int|null|void + */ + protected function serve() + { + $grav = Grav::instance(); + + $this->output->writeln(''); + $this->output->writeln('Current Configuration:'); + $this->output->writeln(''); + + dump($grav['config']->get('plugins.email')); + + $this->output->writeln(''); + + require_once __DIR__ . '/../vendor/autoload.php'; + + $output = Email::flushQueue(); + + $this->output->writeln('' . $output . ''); + + } +} diff --git a/cli/TestEmailCommand.php b/cli/TestEmailCommand.php index f1047d7..f18e9ed 100644 --- a/cli/TestEmailCommand.php +++ b/cli/TestEmailCommand.php @@ -73,7 +73,7 @@ protected function serve() $grav['Email'] = new Email(); - $email_to = $this->input->getOption('to') ?: $grav['config']->get('plugins.email.to'); + $to = $this->input->getOption('to') ?: $grav['config']->get('plugins.email.to'); $subject = $this->input->getOption('subject'); $body = $this->input->getOption('body'); @@ -86,7 +86,9 @@ protected function serve() $body = $grav['language']->translate(['PLUGIN_EMAIL.TEST_EMAIL_BODY', $configuration]); } - $sent = EmailUtils::sendEmail($subject, $body, $email_to); + // This is the old way.... + // $sent = EmailUtils::sendEmail($subject, $body, $email_to); + $sent = EmailUtils::sendEmail(['subject'=>$subject, 'body'=>$body, 'to'=>$to]); if ($sent) { $this->output->writeln("Message sent successfully!"); diff --git a/composer.json b/composer.json index 182c714..5699706 100644 --- a/composer.json +++ b/composer.json @@ -1,10 +1,33 @@ { + "name": "getgrav/grav-plugin-email", + "type": "grav-plugin", + "description": "Email plugin for Grav CMS", + "keywords": ["email", "plugin", "sender"], + "homepage": "https://github.com/getgrav/grav-plugin-email", + "license": "MIT", + "authors": [ + { + "name": "Team Grav", + "email": "devs@getgrav.org", + "homepage": "https://getgrav.org", + "role": "Developer" + } + ], + "support": { + "issues": "https://github.com/getgrav/grav-plugin-email/issues", + "irc": "https://chat.getgrav.org", + "forum": "https://getgrav.org/forum", + "docs": "https://github.com/getgrav/grav-plugin-email/blob/master/README.md" + }, "require": { - "swiftmailer/swiftmailer": "~5.4" + "php": ">=7.1.3", + "swiftmailer/swiftmailer": "~6.0" }, "autoload": { "psr-4": { - "Grav\\Plugin\\Email\\": "classes/" - } + "Grav\\Plugin\\Email\\": "classes/", + "Grav\\Plugin\\Console\\": "cli/" + }, + "classmap": ["email.php"] } } diff --git a/composer.lock b/composer.lock index be98313..54c2bad 100644 --- a/composer.lock +++ b/composer.lock @@ -4,33 +4,152 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "2244976b3750b669fab6abb506e9c591", + "content-hash": "a841aff1de7e0364fe3e92ecd7b2fb56", "packages": [ + { + "name": "doctrine/lexer", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ], + "time": "2014-09-09T13:34:57+00:00" + }, + { + "name": "egulias/email-validator", + "version": "2.1.7", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "709f21f92707308cdf8f9bcfa1af4cb26586521e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/709f21f92707308cdf8f9bcfa1af4cb26586521e", + "reference": "709f21f92707308cdf8f9bcfa1af4cb26586521e", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">= 5.5" + }, + "require-dev": { + "dominicsayers/isemail": "dev-master", + "phpunit/phpunit": "^4.8.35||^5.7||^6.0", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "EmailValidator" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "time": "2018-12-04T22:38:24+00:00" + }, { "name": "swiftmailer/swiftmailer", - "version": "v5.4.12", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950" + "reference": "6fa3232ff9d3f8237c0fae4b7ff05e1baa4cd707" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/6fa3232ff9d3f8237c0fae4b7ff05e1baa4cd707", + "reference": "6fa3232ff9d3f8237c0fae4b7ff05e1baa4cd707", "shasum": "" }, "require": { - "php": ">=5.3.3" + "egulias/email-validator": "~2.0", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" }, "require-dev": { "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "~3.2" + "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses", + "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "6.2-dev" } }, "autoload": { @@ -58,7 +177,242 @@ "mail", "mailer" ], - "time": "2018-07-31T09:26:32+00:00" + "time": "2019-03-10T07:52:41+00:00" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "97001cfc283484c9691769f51cdf25259037eba2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/97001cfc283484c9691769f51cdf25259037eba2", + "reference": "97001cfc283484c9691769f51cdf25259037eba2", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "time": "2018-09-21T06:26:08+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "89de1d44f2c059b266f22c9cc9124ddc4cd0987a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/89de1d44f2c059b266f22c9cc9124ddc4cd0987a", + "reference": "89de1d44f2c059b266f22c9cc9124ddc4cd0987a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.9" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "time": "2018-09-30T16:36:12+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "time": "2018-09-21T13:07:52+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.10.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "9050816e2ca34a8e916c3a0ae8b9c2fccf68b631" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9050816e2ca34a8e916c3a0ae8b9c2fccf68b631", + "reference": "9050816e2ca34a8e916c3a0ae8b9c2fccf68b631", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2018-09-21T13:07:52+00:00" } ], "packages-dev": [], @@ -67,6 +421,8 @@ "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, - "platform": [], + "platform": { + "php": ">=7.1.3" + }, "platform-dev": [] } diff --git a/email.php b/email.php index 6e2f1d3..b14545e 100644 --- a/email.php +++ b/email.php @@ -3,10 +3,8 @@ use Grav\Common\Grav; use Grav\Common\Plugin; -use Grav\Common\Twig\Twig; use Grav\Plugin\Email\Email; use RocketTheme\Toolbox\Event\Event; -use Swift_RfcComplianceException; class EmailPlugin extends Plugin { @@ -21,9 +19,10 @@ class EmailPlugin extends Plugin public static function getSubscribedEvents() { return [ - 'onPluginsInitialized' => ['onPluginsInitialized', 0], - 'onFormProcessed' => ['onFormProcessed', 0], - 'onTwigTemplatePaths' => ['onTwigTemplatePaths', 0] + 'onPluginsInitialized' => ['onPluginsInitialized', 0], + 'onFormProcessed' => ['onFormProcessed', 0], + 'onTwigTemplatePaths' => ['onTwigTemplatePaths', 0], + 'onSchedulerInitialized' => ['onSchedulerInitialized', 0], ]; } @@ -76,7 +75,7 @@ public function onFormProcessed(Event $event) $grav->fireEvent('onEmailSend', new Event(['params' => &$params, 'vars' => &$vars])); // Build message - $message = $this->buildMessage($params, $vars); + $message = $this->email->buildMessage($params, $vars); if (isset($params['attachments'])) { $filesToAttach = (array)$params['attachments']; @@ -102,222 +101,22 @@ public function onFormProcessed(Event $event) } /** - * Build e-mail message. - * - * @param array $params - * @param array $vars - * @return \Swift_Message + * Add index job to Grav Scheduler + * Requires Grav 1.6.0 - Scheduler */ - protected function buildMessage(array $params, array $vars = array()) + public function onSchedulerInitialized(Event $e) { - /** @var Twig $twig */ - $twig = $this->grav['twig']; - - // Extend parameters with defaults. - $params += array( - 'bcc' => $this->config->get('plugins.email.bcc', array()), - 'body' => $this->config->get('plugins.email.body', '{% include "forms/data.html.twig" %}'), - 'cc' => $this->config->get('plugins.email.cc', array()), - 'cc_name' => $this->config->get('plugins.email.cc_name'), - 'charset' => $this->config->get('plugins.email.charset', 'utf-8'), - 'from' => $this->config->get('plugins.email.from'), - 'from_name' => $this->config->get('plugins.email.from_name'), - 'content_type' => $this->config->get('plugins.email.content_type', 'text/html'), - 'reply_to' => $this->config->get('plugins.email.reply_to', array()), - 'reply_to_name' => $this->config->get('plugins.email.reply_to_name'), - 'subject' => !empty($vars['form']) && $vars['form'] instanceof Form ? $vars['form']->page()->title() : null, - 'to' => $this->config->get('plugins.email.to'), - 'to_name' => $this->config->get('plugins.email.to_name'), - 'process_markdown' => false, - ); - - // Create message object. - $message = $this->email->message(); - - if (!$params['to']) { - throw new \RuntimeException($this->grav['language']->translate('PLUGIN_EMAIL.PLEASE_CONFIGURE_A_TO_ADDRESS')); - } - if (!$params['from']) { - throw new \RuntimeException($this->grav['language']->translate('PLUGIN_EMAIL.PLEASE_CONFIGURE_A_FROM_ADDRESS')); - } - - // Process parameters. - foreach ($params as $key => $value) { - switch ($key) { - case 'bcc': - foreach ($this->parseAddressValue($value, $vars) as $address) { - try { - $message->addBcc($address->mail, $address->name); - } catch (Swift_RfcComplianceException $e) { - continue; - } - } - break; - - case 'body': - if (is_string($value)) { - $body = $twig->processString($value, $vars); - - if ($params['process_markdown']) { - $parsedown = new \Parsedown(); - $body = $parsedown->text($body); - } - - $content_type = !empty($params['content_type']) ? $twig->processString($params['content_type'], $vars) : null; - $charset = !empty($params['charset']) ? $twig->processString($params['charset'], $vars) : null; - - $message->setBody($body, $content_type, $charset); - } - elseif (is_array($value)) { - foreach ($value as $body_part) { - $body_part += array( - 'charset' => $params['charset'], - 'content_type' => $params['content_type'], - ); - - $body = !empty($body_part['body']) ? $twig->processString($body_part['body'], $vars) : null; - - if ($params['process_markdown']) { - $parsedown = new \Parsedown(); - $body = $parsedown->text($body); - } - - $content_type = !empty($body_part['content_type']) ? $twig->processString($body_part['content_type'], $vars) : null; - $charset = !empty($body_part['charset']) ? $twig->processString($body_part['charset'], $vars) : null; - - if (!$message->getBody()) { - $message->setBody($body, $content_type, $charset); - } - else { - $message->addPart($body, $content_type, $charset); - } - } - } - break; - - case 'cc': - if (is_string($value) && !empty($params['cc_name'])) { - $value = array( - 'mail' => $twig->processString($value, $vars), - 'name' => $twig->processString($params['cc_name'], $vars), - ); - } - - foreach ($this->parseAddressValue($value, $vars) as $address) { - try { - $message->addCc($address->mail, $address->name); - } catch (Swift_RfcComplianceException $e) { - continue; - } - } - break; - - case 'from': - if (is_string($value) && !empty($params['from_name'])) { - $value = array( - 'mail' => $twig->processString($value, $vars), - 'name' => $twig->processString($params['from_name'], $vars), - ); - } - - foreach ($this->parseAddressValue($value, $vars) as $address) { - try { - $message->addFrom($address->mail, $address->name); - } catch (Swift_RfcComplianceException $e) { - continue; - } - } - break; - - case 'reply_to': - if (is_string($value) && !empty($params['reply_to_name'])) { - $value = array( - 'mail' => $twig->processString($value, $vars), - 'name' => $twig->processString($params['reply_to_name'], $vars), - ); - } - - foreach ($this->parseAddressValue($value, $vars) as $address) { - try { - $message->addReplyTo($address->mail, $address->name); - } catch (Swift_RfcComplianceException $e) { - continue; - } - } - break; - - case 'subject': - $message->setSubject($twig->processString($this->grav['language']->translate($value), $vars)); - break; - - case 'to': - if (is_string($value) && !empty($params['to_name'])) { - $value = array( - 'mail' => $twig->processString($value, $vars), - 'name' => $twig->processString($params['to_name'], $vars), - ); - } - - foreach ($this->parseAddressValue($value, $vars) as $address) { - try { - $message->addTo($address->mail, $address->name); - } catch (Swift_RfcComplianceException $e) { - continue; - } - } - break; - } + if ($this->config->get('plugins.email.queue.enabled')) { + + /** @var Scheduler $scheduler */ + $scheduler = $e['scheduler']; + $at = $this->config->get('plugins.email.queue.flush_frequency'); + $logs = 'logs/email-queue.out'; + $job = $scheduler->addFunction('Grav\Plugin\Email\Email::flushQueue', [], 'email-flushqueue'); + $job->at($at); + $job->output($logs); + $job->backlink('/plugins/email'); } - - return $message; } - /** - * Return parsed e-mail address value. - * - * @param $value - * @param array $vars - * @return array - */ - protected function parseAddressValue($value, array $vars = array()) - { - $parsed = array(); - - /** @var Twig $twig */ - $twig = $this->grav['twig']; - - // Single e-mail address string - if (is_string($value)) { - $parsed[] = (object) array( - 'mail' => $twig->processString($value, $vars), - 'name' => null, - ); - } - - else { - // Cast value as array - $value = (array) $value; - - // Single e-mail address array - if (!empty($value['mail'])) { - $parsed[] = (object) array( - 'mail' => $twig->processString($value['mail'], $vars), - 'name' => !empty($value['name']) ? $twig->processString($value['name'], $vars) : NULL, - ); - } - - // Multiple addresses (either as strings or arrays) - elseif (!(empty($value['mail']) && !empty($value['name']))) { - foreach ($value as $y => $itemx) { - $addresses = $this->parseAddressValue($itemx, $vars); - - if (($address = reset($addresses))) { - $parsed[] = $address; - } - } - } - } - - return $parsed; - } } diff --git a/email.yaml b/email.yaml index 78b9394..7cf6fca 100644 --- a/email.yaml +++ b/email.yaml @@ -3,6 +3,11 @@ from: from_name: to: to_name: +queue: + enabled: false + flush_frequency: '* * * * *' + flush_msg_limit: 10 + flush_time_limit: 100 mailer: engine: sendmail smtp: diff --git a/languages.yaml b/languages.yaml index 0097685..74d4d8f 100644 --- a/languages.yaml +++ b/languages.yaml @@ -3,25 +3,25 @@ en: MAIL_ENGINE: "Mail Engine" CONTENT_TYPE: "Content type" CHARSET: "Charset" - EMAIL_FORM: "Email from" + EMAIL_FORM: "From address" EMAIL_FORM_PLACEHOLDER: "Default email from address" - EMAIL_FROM_NAME: "Email from name" + EMAIL_FROM_NAME: "From name" EMAIL_FROM_NAME_PLACEHOLDER: "Default email from name" - EMAIL_TO: "Email to" + EMAIL_TO: "To address" EMAIL_TO_PLACEHOLDER: "Default email to address" - EMAIL_TO_NAME: "Email to name" + EMAIL_TO_NAME: "To name" EMAIL_TO_NAME_PLACEHOLDER: "Default email to name" - EMAIL_CC: "Email CC" + EMAIL_CC: "CC address" EMAIL_CC_PLACEHOLDER: "Default email CC address" - EMAIL_CC_NAME: "Email CC name" + EMAIL_CC_NAME: "CC name" EMAIL_CC_NAME_PLACEHOLDER: "Default email CC name" - EMAIL_BCC: "Email BCC" + EMAIL_BCC: "BCC address" EMAIL_BCC_PLACEHOLDER: "Default email BCC address" - EMAIL_REPLY_TO: "Email reply-to" + EMAIL_REPLY_TO: "Reply-to address" EMAIL_REPLY_TO_PLACEHOLDER: "Default email reply-to address" - EMAIL_REPLY_TO_NAME: "Email reply-to name" + EMAIL_REPLY_TO_NAME: "Reply-to name" EMAIL_REPLY_TO_NAME_PLACEHOLDER: "Default email reply-to name" - EMAIL_BODY: "Email body" + EMAIL_BODY: "Body" EMAIL_BODY_PLACEHOLDER: "Defaults to a table of all form fields" SMTP_SERVER: "SMTP server" SMTP_SERVER_PLACEHOLDER: "e.g. smtp.google.com" @@ -36,7 +36,19 @@ en: PLEASE_CONFIGURE_A_TO_ADDRESS: "Please configure a 'to' address in the Email Plugin settings, or in the form" PLEASE_CONFIGURE_A_FROM_ADDRESS: "Please configure a 'from' address in the Email Plugin settings, or in the form" TEST_EMAIL_BODY: "

Testing Email

This test email has been sent based on the following configuration:

%1$s

" + EMAIL_DEFAULTS: "Email Defaults" + SMTP_CONFIGURATION: "SMTP Configuration" + ADVANCED: "Advanced" EMAIL_FOOTER: "GetGrav.org" + QUEUE_TITLE: "Email Queue" + QUEUE_DESC: "When you enable the email queue, email is not sent immediately, rather the email is sent to the queue, and then the Grav scheduler will flush the queue and actually send the email based on the configured frequency. This ensures Grav is not waiting around for email connections to complete." + QUEUE_ENABLED: "Enabled" + QUEUE_FLUSH_FREQUENCY: "Flush Frequency" + QUEUE_FLUSH_FREQUENCY_HELP: "Use 'cron' format" + QUEUE_FLUSH_MSG_LIMIT: "Messages per flush" + QUEUE_FLUSH_TIME_LIMIT: "Flush time limit" + + da: PLUGIN_EMAIL: diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php index 95f7e09..dc02dfb 100644 --- a/vendor/composer/ClassLoader.php +++ b/vendor/composer/ClassLoader.php @@ -377,7 +377,7 @@ private function findFileWithExtension($class, $ext) $subPath = $class; while (false !== $lastPos = strrpos($subPath, '\\')) { $subPath = substr($subPath, 0, $lastPos); - $search = $subPath . '\\'; + $search = $subPath.'\\'; if (isset($this->prefixDirsPsr4[$search])) { $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); foreach ($this->prefixDirsPsr4[$search] as $dir) { diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php index 7a91153..b0ca50d 100644 --- a/vendor/composer/autoload_classmap.php +++ b/vendor/composer/autoload_classmap.php @@ -6,4 +6,5 @@ $baseDir = dirname($vendorDir); return array( + 'Grav\\Plugin\\EmailPlugin' => $baseDir . '/email.php', ); diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index dba3e18..de081a8 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -6,5 +6,9 @@ $baseDir = dirname($vendorDir); return array( + '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', + '25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php', + 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php', + 'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php', '2c102faa651ef8ea5874edb585946bce' => $vendorDir . '/swiftmailer/swiftmailer/lib/swift_required.php', ); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php index b7fc012..4a6f5de 100644 --- a/vendor/composer/autoload_namespaces.php +++ b/vendor/composer/autoload_namespaces.php @@ -6,4 +6,5 @@ $baseDir = dirname($vendorDir); return array( + 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib'), ); diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index c6585f5..a57e1d7 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -6,5 +6,11 @@ $baseDir = dirname($vendorDir); return array( + 'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'), + 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), + 'Symfony\\Polyfill\\Intl\\Idn\\' => array($vendorDir . '/symfony/polyfill-intl-idn'), + 'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'), 'Grav\\Plugin\\Email\\' => array($baseDir . '/classes'), + 'Grav\\Plugin\\Console\\' => array($baseDir . '/cli'), + 'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/EmailValidator'), ); diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index 6fe87ab..a61cec6 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -7,21 +7,75 @@ class ComposerStaticInitdec5d78def1384d1f20996ded9d7efbf { public static $files = array ( + '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', + '25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php', + 'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php', + 'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php', '2c102faa651ef8ea5874edb585946bce' => __DIR__ . '/..' . '/swiftmailer/swiftmailer/lib/swift_required.php', ); public static $prefixLengthsPsr4 = array ( + 'S' => + array ( + 'Symfony\\Polyfill\\Php72\\' => 23, + 'Symfony\\Polyfill\\Mbstring\\' => 26, + 'Symfony\\Polyfill\\Intl\\Idn\\' => 26, + 'Symfony\\Polyfill\\Iconv\\' => 23, + ), 'G' => array ( 'Grav\\Plugin\\Email\\' => 18, + 'Grav\\Plugin\\Console\\' => 20, + ), + 'E' => + array ( + 'Egulias\\EmailValidator\\' => 23, ), ); public static $prefixDirsPsr4 = array ( + 'Symfony\\Polyfill\\Php72\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-php72', + ), + 'Symfony\\Polyfill\\Mbstring\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', + ), + 'Symfony\\Polyfill\\Intl\\Idn\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-idn', + ), + 'Symfony\\Polyfill\\Iconv\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/polyfill-iconv', + ), 'Grav\\Plugin\\Email\\' => array ( 0 => __DIR__ . '/../..' . '/classes', ), + 'Grav\\Plugin\\Console\\' => + array ( + 0 => __DIR__ . '/../..' . '/cli', + ), + 'Egulias\\EmailValidator\\' => + array ( + 0 => __DIR__ . '/..' . '/egulias/email-validator/EmailValidator', + ), + ); + + public static $prefixesPsr0 = array ( + 'D' => + array ( + 'Doctrine\\Common\\Lexer\\' => + array ( + 0 => __DIR__ . '/..' . '/doctrine/lexer/lib', + ), + ), + ); + + public static $classMap = array ( + 'Grav\\Plugin\\EmailPlugin' => __DIR__ . '/../..' . '/email.php', ); public static function getInitializer(ClassLoader $loader) @@ -29,6 +83,8 @@ public static function getInitializer(ClassLoader $loader) return \Closure::bind(function () use ($loader) { $loader->prefixLengthsPsr4 = ComposerStaticInitdec5d78def1384d1f20996ded9d7efbf::$prefixLengthsPsr4; $loader->prefixDirsPsr4 = ComposerStaticInitdec5d78def1384d1f20996ded9d7efbf::$prefixDirsPsr4; + $loader->prefixesPsr0 = ComposerStaticInitdec5d78def1384d1f20996ded9d7efbf::$prefixesPsr0; + $loader->classMap = ComposerStaticInitdec5d78def1384d1f20996ded9d7efbf::$classMap; }, null, ClassLoader::class); } diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index c4cde7d..67ebd75 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1,31 +1,154 @@ [ + { + "name": "doctrine/lexer", + "version": "v1.0.1", + "version_normalized": "1.0.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/83893c552fd2045dd78aef794c31e694c37c0b8c", + "reference": "83893c552fd2045dd78aef794c31e694c37c0b8c", + "shasum": "" + }, + "require": { + "php": ">=5.3.2" + }, + "time": "2014-09-09T13:34:57+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-0": { + "Doctrine\\Common\\Lexer\\": "lib/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "http://www.doctrine-project.org", + "keywords": [ + "lexer", + "parser" + ] + }, + { + "name": "egulias/email-validator", + "version": "2.1.7", + "version_normalized": "2.1.7.0", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "709f21f92707308cdf8f9bcfa1af4cb26586521e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/709f21f92707308cdf8f9bcfa1af4cb26586521e", + "reference": "709f21f92707308cdf8f9bcfa1af4cb26586521e", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^1.0.1", + "php": ">= 5.5" + }, + "require-dev": { + "dominicsayers/isemail": "dev-master", + "phpunit/phpunit": "^4.8.35||^5.7||^6.0", + "satooshi/php-coveralls": "^1.0.1" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "time": "2018-12-04T22:38:24+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "EmailValidator" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ] + }, { "name": "swiftmailer/swiftmailer", - "version": "v5.4.12", - "version_normalized": "5.4.12.0", + "version": "v6.2.0", + "version_normalized": "6.2.0.0", "source": { "type": "git", "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950" + "reference": "6fa3232ff9d3f8237c0fae4b7ff05e1baa4cd707" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/181b89f18a90f8925ef805f950d47a7190e9b950", - "reference": "181b89f18a90f8925ef805f950d47a7190e9b950", + "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/6fa3232ff9d3f8237c0fae4b7ff05e1baa4cd707", + "reference": "6fa3232ff9d3f8237c0fae4b7ff05e1baa4cd707", "shasum": "" }, "require": { - "php": ">=5.3.3" + "egulias/email-validator": "~2.0", + "php": ">=7.0.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" }, "require-dev": { "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "~3.2" + "symfony/phpunit-bridge": "^3.4.19|^4.1.8" }, - "time": "2018-07-31T09:26:32+00:00", + "suggest": { + "ext-intl": "Needed to support internationalized email addresses", + "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" + }, + "time": "2019-03-10T07:52:41+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "6.2-dev" } }, "installation-source": "dist", @@ -54,5 +177,248 @@ "mail", "mailer" ] + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.10.0", + "version_normalized": "1.10.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "97001cfc283484c9691769f51cdf25259037eba2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/97001cfc283484c9691769f51cdf25259037eba2", + "reference": "97001cfc283484c9691769f51cdf25259037eba2", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "time": "2018-09-21T06:26:08+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ] + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.10.0", + "version_normalized": "1.10.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "89de1d44f2c059b266f22c9cc9124ddc4cd0987a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/89de1d44f2c059b266f22c9cc9124ddc4cd0987a", + "reference": "89de1d44f2c059b266f22c9cc9124ddc4cd0987a", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.9" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "time": "2018-09-30T16:36:12+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + }, + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ] + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.10.0", + "version_normalized": "1.10.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/c79c051f5b3a46be09205c73b80b346e4153e494", + "reference": "c79c051f5b3a46be09205c73b80b346e4153e494", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "time": "2018-09-21T13:07:52+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ] + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.10.0", + "version_normalized": "1.10.0.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "9050816e2ca34a8e916c3a0ae8b9c2fccf68b631" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9050816e2ca34a8e916c3a0ae8b9c2fccf68b631", + "reference": "9050816e2ca34a8e916c3a0ae8b9c2fccf68b631", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "time": "2018-09-21T13:07:52+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ] } ] diff --git a/vendor/doctrine/lexer/LICENSE b/vendor/doctrine/lexer/LICENSE new file mode 100644 index 0000000..5e781fc --- /dev/null +++ b/vendor/doctrine/lexer/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2006-2013 Doctrine Project + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/doctrine/lexer/README.md b/vendor/doctrine/lexer/README.md new file mode 100644 index 0000000..66f4430 --- /dev/null +++ b/vendor/doctrine/lexer/README.md @@ -0,0 +1,5 @@ +# Doctrine Lexer + +Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers. + +This lexer is used in Doctrine Annotations and in Doctrine ORM (DQL). diff --git a/vendor/doctrine/lexer/composer.json b/vendor/doctrine/lexer/composer.json new file mode 100644 index 0000000..8cd694c --- /dev/null +++ b/vendor/doctrine/lexer/composer.json @@ -0,0 +1,24 @@ +{ + "name": "doctrine/lexer", + "type": "library", + "description": "Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers.", + "keywords": ["lexer", "parser"], + "homepage": "http://www.doctrine-project.org", + "license": "MIT", + "authors": [ + {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"}, + {"name": "Roman Borschel", "email": "roman@code-factory.org"}, + {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"} + ], + "require": { + "php": ">=5.3.2" + }, + "autoload": { + "psr-0": { "Doctrine\\Common\\Lexer\\": "lib/" } + }, + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + } +} diff --git a/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php b/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php new file mode 100644 index 0000000..399a552 --- /dev/null +++ b/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php @@ -0,0 +1,327 @@ +. + */ + +namespace Doctrine\Common\Lexer; + +/** + * Base class for writing simple lexers, i.e. for creating small DSLs. + * + * @since 2.0 + * @author Guilherme Blanco + * @author Jonathan Wage + * @author Roman Borschel + */ +abstract class AbstractLexer +{ + /** + * Lexer original input string. + * + * @var string + */ + private $input; + + /** + * Array of scanned tokens. + * + * Each token is an associative array containing three items: + * - 'value' : the string value of the token in the input string + * - 'type' : the type of the token (identifier, numeric, string, input + * parameter, none) + * - 'position' : the position of the token in the input string + * + * @var array + */ + private $tokens = array(); + + /** + * Current lexer position in input string. + * + * @var integer + */ + private $position = 0; + + /** + * Current peek of current lexer position. + * + * @var integer + */ + private $peek = 0; + + /** + * The next token in the input. + * + * @var array + */ + public $lookahead; + + /** + * The last matched/seen token. + * + * @var array + */ + public $token; + + /** + * Sets the input data to be tokenized. + * + * The Lexer is immediately reset and the new input tokenized. + * Any unprocessed tokens from any previous input are lost. + * + * @param string $input The input to be tokenized. + * + * @return void + */ + public function setInput($input) + { + $this->input = $input; + $this->tokens = array(); + + $this->reset(); + $this->scan($input); + } + + /** + * Resets the lexer. + * + * @return void + */ + public function reset() + { + $this->lookahead = null; + $this->token = null; + $this->peek = 0; + $this->position = 0; + } + + /** + * Resets the peek pointer to 0. + * + * @return void + */ + public function resetPeek() + { + $this->peek = 0; + } + + /** + * Resets the lexer position on the input to the given position. + * + * @param integer $position Position to place the lexical scanner. + * + * @return void + */ + public function resetPosition($position = 0) + { + $this->position = $position; + } + + /** + * Retrieve the original lexer's input until a given position. + * + * @param integer $position + * + * @return string + */ + public function getInputUntilPosition($position) + { + return substr($this->input, 0, $position); + } + + /** + * Checks whether a given token matches the current lookahead. + * + * @param integer|string $token + * + * @return boolean + */ + public function isNextToken($token) + { + return null !== $this->lookahead && $this->lookahead['type'] === $token; + } + + /** + * Checks whether any of the given tokens matches the current lookahead. + * + * @param array $tokens + * + * @return boolean + */ + public function isNextTokenAny(array $tokens) + { + return null !== $this->lookahead && in_array($this->lookahead['type'], $tokens, true); + } + + /** + * Moves to the next token in the input string. + * + * @return boolean + */ + public function moveNext() + { + $this->peek = 0; + $this->token = $this->lookahead; + $this->lookahead = (isset($this->tokens[$this->position])) + ? $this->tokens[$this->position++] : null; + + return $this->lookahead !== null; + } + + /** + * Tells the lexer to skip input tokens until it sees a token with the given value. + * + * @param string $type The token type to skip until. + * + * @return void + */ + public function skipUntil($type) + { + while ($this->lookahead !== null && $this->lookahead['type'] !== $type) { + $this->moveNext(); + } + } + + /** + * Checks if given value is identical to the given token. + * + * @param mixed $value + * @param integer $token + * + * @return boolean + */ + public function isA($value, $token) + { + return $this->getType($value) === $token; + } + + /** + * Moves the lookahead token forward. + * + * @return array|null The next token or NULL if there are no more tokens ahead. + */ + public function peek() + { + if (isset($this->tokens[$this->position + $this->peek])) { + return $this->tokens[$this->position + $this->peek++]; + } else { + return null; + } + } + + /** + * Peeks at the next token, returns it and immediately resets the peek. + * + * @return array|null The next token or NULL if there are no more tokens ahead. + */ + public function glimpse() + { + $peek = $this->peek(); + $this->peek = 0; + return $peek; + } + + /** + * Scans the input string for tokens. + * + * @param string $input A query string. + * + * @return void + */ + protected function scan($input) + { + static $regex; + + if ( ! isset($regex)) { + $regex = sprintf( + '/(%s)|%s/%s', + implode(')|(', $this->getCatchablePatterns()), + implode('|', $this->getNonCatchablePatterns()), + $this->getModifiers() + ); + } + + $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; + $matches = preg_split($regex, $input, -1, $flags); + + foreach ($matches as $match) { + // Must remain before 'value' assignment since it can change content + $type = $this->getType($match[0]); + + $this->tokens[] = array( + 'value' => $match[0], + 'type' => $type, + 'position' => $match[1], + ); + } + } + + /** + * Gets the literal for a given token. + * + * @param integer $token + * + * @return string + */ + public function getLiteral($token) + { + $className = get_class($this); + $reflClass = new \ReflectionClass($className); + $constants = $reflClass->getConstants(); + + foreach ($constants as $name => $value) { + if ($value === $token) { + return $className . '::' . $name; + } + } + + return $token; + } + + /** + * Regex modifiers + * + * @return string + */ + protected function getModifiers() + { + return 'i'; + } + + /** + * Lexical catchable patterns. + * + * @return array + */ + abstract protected function getCatchablePatterns(); + + /** + * Lexical non-catchable patterns. + * + * @return array + */ + abstract protected function getNonCatchablePatterns(); + + /** + * Retrieve token type. Also processes the token value if necessary. + * + * @param string $value + * + * @return integer + */ + abstract protected function getType(&$value); +} diff --git a/vendor/egulias/email-validator/EmailValidator/EmailLexer.php b/vendor/egulias/email-validator/EmailValidator/EmailLexer.php new file mode 100644 index 0000000..882c968 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/EmailLexer.php @@ -0,0 +1,221 @@ + self::S_OPENPARENTHESIS, + ')' => self::S_CLOSEPARENTHESIS, + '<' => self::S_LOWERTHAN, + '>' => self::S_GREATERTHAN, + '[' => self::S_OPENBRACKET, + ']' => self::S_CLOSEBRACKET, + ':' => self::S_COLON, + ';' => self::S_SEMICOLON, + '@' => self::S_AT, + '\\' => self::S_BACKSLASH, + '/' => self::S_SLASH, + ',' => self::S_COMMA, + '.' => self::S_DOT, + '"' => self::S_DQUOTE, + '-' => self::S_HYPHEN, + '::' => self::S_DOUBLECOLON, + ' ' => self::S_SP, + "\t" => self::S_HTAB, + "\r" => self::S_CR, + "\n" => self::S_LF, + "\r\n" => self::CRLF, + 'IPv6' => self::S_IPV6TAG, + '{' => self::S_OPENQBRACKET, + '}' => self::S_CLOSEQBRACKET, + '' => self::S_EMPTY, + '\0' => self::C_NUL, + ); + + protected $hasInvalidTokens = false; + + protected $previous; + + public function reset() + { + $this->hasInvalidTokens = false; + parent::reset(); + } + + public function hasInvalidTokens() + { + return $this->hasInvalidTokens; + } + + /** + * @param $type + * @throws \UnexpectedValueException + * @return boolean + */ + public function find($type) + { + $search = clone $this; + $search->skipUntil($type); + + if (!$search->lookahead) { + throw new \UnexpectedValueException($type . ' not found'); + } + return true; + } + + /** + * getPrevious + * + * @return array token + */ + public function getPrevious() + { + return $this->previous; + } + + /** + * moveNext + * + * @return boolean + */ + public function moveNext() + { + $this->previous = $this->token; + + return parent::moveNext(); + } + + /** + * Lexical catchable patterns. + * + * @return string[] + */ + protected function getCatchablePatterns() + { + return array( + '[a-zA-Z_]+[46]?', //ASCII and domain literal + '[^\x00-\x7F]', //UTF-8 + '[0-9]+', + '\r\n', + '::', + '\s+?', + '.', + ); + } + + /** + * Lexical non-catchable patterns. + * + * @return string[] + */ + protected function getNonCatchablePatterns() + { + return array('[\xA0-\xff]+'); + } + + /** + * Retrieve token type. Also processes the token value if necessary. + * + * @param string $value + * @throws \InvalidArgumentException + * @return integer + */ + protected function getType(&$value) + { + if ($this->isNullType($value)) { + return self::C_NUL; + } + + if ($this->isValid($value)) { + return $this->charValue[$value]; + } + + if ($this->isUTF8Invalid($value)) { + $this->hasInvalidTokens = true; + return self::INVALID; + } + + return self::GENERIC; + } + + protected function isValid($value) + { + if (isset($this->charValue[$value])) { + return true; + } + + return false; + } + + /** + * @param $value + * @return bool + */ + protected function isNullType($value) + { + if ($value === "\0") { + return true; + } + + return false; + } + + /** + * @param $value + * @return bool + */ + protected function isUTF8Invalid($value) + { + if (preg_match('/\p{Cc}+/u', $value)) { + return true; + } + + return false; + } + + protected function getModifiers() + { + return 'iu'; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/EmailParser.php b/vendor/egulias/email-validator/EmailValidator/EmailParser.php new file mode 100644 index 0000000..d0627d8 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/EmailParser.php @@ -0,0 +1,104 @@ + + */ +class EmailParser +{ + const EMAIL_MAX_LENGTH = 254; + + protected $warnings; + protected $domainPart = ''; + protected $localPart = ''; + protected $lexer; + protected $localPartParser; + protected $domainPartParser; + + public function __construct(EmailLexer $lexer) + { + $this->lexer = $lexer; + $this->localPartParser = new LocalPart($this->lexer); + $this->domainPartParser = new DomainPart($this->lexer); + $this->warnings = new \SplObjectStorage(); + } + + /** + * @param $str + * @return array + */ + public function parse($str) + { + $this->lexer->setInput($str); + + if (!$this->hasAtToken()) { + throw new NoLocalPart(); + } + + + $this->localPartParser->parse($str); + $this->domainPartParser->parse($str); + + $this->setParts($str); + + if ($this->lexer->hasInvalidTokens()) { + throw new ExpectingATEXT(); + } + + return array('local' => $this->localPart, 'domain' => $this->domainPart); + } + + public function getWarnings() + { + $localPartWarnings = $this->localPartParser->getWarnings(); + $domainPartWarnings = $this->domainPartParser->getWarnings(); + $this->warnings = array_merge($localPartWarnings, $domainPartWarnings); + + $this->addLongEmailWarning($this->localPart, $this->domainPart); + + return $this->warnings; + } + + public function getParsedDomainPart() + { + return $this->domainPart; + } + + protected function setParts($email) + { + $parts = explode('@', $email); + $this->domainPart = $this->domainPartParser->getDomainPart(); + $this->localPart = $parts[0]; + } + + protected function hasAtToken() + { + $this->lexer->moveNext(); + $this->lexer->moveNext(); + if ($this->lexer->token['type'] === EmailLexer::S_AT) { + return false; + } + + return true; + } + + /** + * @param string $localPart + * @param string $parsedDomainPart + */ + protected function addLongEmailWarning($localPart, $parsedDomainPart) + { + if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAIL_MAX_LENGTH) { + $this->warnings[EmailTooLong::CODE] = new EmailTooLong(); + } + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/EmailValidator.php b/vendor/egulias/email-validator/EmailValidator/EmailValidator.php new file mode 100644 index 0000000..44b4b93 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/EmailValidator.php @@ -0,0 +1,67 @@ +lexer = new EmailLexer(); + } + + /** + * @param $email + * @param EmailValidation $emailValidation + * @return bool + */ + public function isValid($email, EmailValidation $emailValidation) + { + $isValid = $emailValidation->isValid($email, $this->lexer); + $this->warnings = $emailValidation->getWarnings(); + $this->error = $emailValidation->getError(); + + return $isValid; + } + + /** + * @return boolean + */ + public function hasWarnings() + { + return !empty($this->warnings); + } + + /** + * @return array + */ + public function getWarnings() + { + return $this->warnings; + } + + /** + * @return InvalidEmail + */ + public function getError() + { + return $this->error; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Exception/AtextAfterCFWS.php b/vendor/egulias/email-validator/EmailValidator/Exception/AtextAfterCFWS.php new file mode 100644 index 0000000..97f41a2 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Exception/AtextAfterCFWS.php @@ -0,0 +1,9 @@ +lexer->moveNext(); + + if ($this->lexer->token['type'] === EmailLexer::S_DOT) { + throw new DotAtStart(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_EMPTY) { + throw new NoDomainPart(); + } + if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN) { + throw new DomainHyphened(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { + $this->warnings[DeprecatedComment::CODE] = new DeprecatedComment(); + $this->parseDomainComments(); + } + + $domain = $this->doParseDomainPart(); + + $prev = $this->lexer->getPrevious(); + $length = strlen($domain); + + if ($prev['type'] === EmailLexer::S_DOT) { + throw new DotAtEnd(); + } + if ($prev['type'] === EmailLexer::S_HYPHEN) { + throw new DomainHyphened(); + } + if ($length > self::DOMAIN_MAX_LENGTH) { + $this->warnings[DomainTooLong::CODE] = new DomainTooLong(); + } + if ($prev['type'] === EmailLexer::S_CR) { + throw new CRLFAtTheEnd(); + } + $this->domainPart = $domain; + } + + public function getDomainPart() + { + return $this->domainPart; + } + + public function checkIPV6Tag($addressLiteral, $maxGroups = 8) + { + $prev = $this->lexer->getPrevious(); + if ($prev['type'] === EmailLexer::S_COLON) { + $this->warnings[IPV6ColonEnd::CODE] = new IPV6ColonEnd(); + } + + $IPv6 = substr($addressLiteral, 5); + //Daniel Marschall's new IPv6 testing strategy + $matchesIP = explode(':', $IPv6); + $groupCount = count($matchesIP); + $colons = strpos($IPv6, '::'); + + if (count(preg_grep('/^[0-9A-Fa-f]{0,4}$/', $matchesIP, PREG_GREP_INVERT)) !== 0) { + $this->warnings[IPV6BadChar::CODE] = new IPV6BadChar(); + } + + if ($colons === false) { + // We need exactly the right number of groups + if ($groupCount !== $maxGroups) { + $this->warnings[IPV6GroupCount::CODE] = new IPV6GroupCount(); + } + return; + } + + if ($colons !== strrpos($IPv6, '::')) { + $this->warnings[IPV6DoubleColon::CODE] = new IPV6DoubleColon(); + return; + } + + if ($colons === 0 || $colons === (strlen($IPv6) - 2)) { + // RFC 4291 allows :: at the start or end of an address + //with 7 other groups in addition + ++$maxGroups; + } + + if ($groupCount > $maxGroups) { + $this->warnings[IPV6MaxGroups::CODE] = new IPV6MaxGroups(); + } elseif ($groupCount === $maxGroups) { + $this->warnings[IPV6Deprecated::CODE] = new IPV6Deprecated(); + } + } + + protected function doParseDomainPart() + { + $domain = ''; + $openedParenthesis = 0; + do { + $prev = $this->lexer->getPrevious(); + + $this->checkNotAllowedChars($this->lexer->token); + + if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { + $this->parseComments(); + $openedParenthesis += $this->getOpenedParenthesis(); + $this->lexer->moveNext(); + $tmpPrev = $this->lexer->getPrevious(); + if ($tmpPrev['type'] === EmailLexer::S_CLOSEPARENTHESIS) { + $openedParenthesis--; + } + } + if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { + if ($openedParenthesis === 0) { + throw new UnopenedComment(); + } else { + $openedParenthesis--; + } + } + + $this->checkConsecutiveDots(); + $this->checkDomainPartExceptions($prev); + + if ($this->hasBrackets()) { + $this->parseDomainLiteral(); + } + + $this->checkLabelLength($prev); + + if ($this->isFWS()) { + $this->parseFWS(); + } + + $domain .= $this->lexer->token['value']; + $this->lexer->moveNext(); + } while ($this->lexer->token); + + return $domain; + } + + private function checkNotAllowedChars($token) + { + $notAllowed = [EmailLexer::S_BACKSLASH => true, EmailLexer::S_SLASH=> true]; + if (isset($notAllowed[$token['type']])) { + throw new CharNotAllowed(); + } + } + + protected function parseDomainLiteral() + { + if ($this->lexer->isNextToken(EmailLexer::S_COLON)) { + $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart(); + } + if ($this->lexer->isNextToken(EmailLexer::S_IPV6TAG)) { + $lexer = clone $this->lexer; + $lexer->moveNext(); + if ($lexer->isNextToken(EmailLexer::S_DOUBLECOLON)) { + $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart(); + } + } + + return $this->doParseDomainLiteral(); + } + + protected function doParseDomainLiteral() + { + $IPv6TAG = false; + $addressLiteral = ''; + do { + if ($this->lexer->token['type'] === EmailLexer::C_NUL) { + throw new ExpectingDTEXT(); + } + + if ($this->lexer->token['type'] === EmailLexer::INVALID || + $this->lexer->token['type'] === EmailLexer::C_DEL || + $this->lexer->token['type'] === EmailLexer::S_LF + ) { + $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT(); + } + + if ($this->lexer->isNextTokenAny(array(EmailLexer::S_OPENQBRACKET, EmailLexer::S_OPENBRACKET))) { + throw new ExpectingDTEXT(); + } + + if ($this->lexer->isNextTokenAny( + array(EmailLexer::S_HTAB, EmailLexer::S_SP, $this->lexer->token['type'] === EmailLexer::CRLF) + )) { + $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); + $this->parseFWS(); + } + + if ($this->lexer->isNextToken(EmailLexer::S_CR)) { + throw new CRNoLF(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH) { + $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT(); + $addressLiteral .= $this->lexer->token['value']; + $this->lexer->moveNext(); + $this->validateQuotedPair(); + } + if ($this->lexer->token['type'] === EmailLexer::S_IPV6TAG) { + $IPv6TAG = true; + } + if ($this->lexer->token['type'] === EmailLexer::S_CLOSEQBRACKET) { + break; + } + + $addressLiteral .= $this->lexer->token['value']; + + } while ($this->lexer->moveNext()); + + $addressLiteral = str_replace('[', '', $addressLiteral); + $addressLiteral = $this->checkIPV4Tag($addressLiteral); + + if (false === $addressLiteral) { + return $addressLiteral; + } + + if (!$IPv6TAG) { + $this->warnings[DomainLiteral::CODE] = new DomainLiteral(); + return $addressLiteral; + } + + $this->warnings[AddressLiteral::CODE] = new AddressLiteral(); + + $this->checkIPV6Tag($addressLiteral); + + return $addressLiteral; + } + + protected function checkIPV4Tag($addressLiteral) + { + $matchesIP = array(); + + // Extract IPv4 part from the end of the address-literal (if there is one) + if (preg_match( + '/\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/', + $addressLiteral, + $matchesIP + ) > 0 + ) { + $index = strrpos($addressLiteral, $matchesIP[0]); + if ($index === 0) { + $this->warnings[AddressLiteral::CODE] = new AddressLiteral(); + return false; + } + // Convert IPv4 part to IPv6 format for further testing + $addressLiteral = substr($addressLiteral, 0, $index) . '0:0'; + } + + return $addressLiteral; + } + + protected function checkDomainPartExceptions($prev) + { + $invalidDomainTokens = array( + EmailLexer::S_DQUOTE => true, + EmailLexer::S_SEMICOLON => true, + EmailLexer::S_GREATERTHAN => true, + EmailLexer::S_LOWERTHAN => true, + ); + + if (isset($invalidDomainTokens[$this->lexer->token['type']])) { + throw new ExpectingATEXT(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_COMMA) { + throw new CommaInDomain(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_AT) { + throw new ConsecutiveAt(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_OPENQBRACKET && $prev['type'] !== EmailLexer::S_AT) { + throw new ExpectingATEXT(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_HYPHEN && $this->lexer->isNextToken(EmailLexer::S_DOT)) { + throw new DomainHyphened(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH + && $this->lexer->isNextToken(EmailLexer::GENERIC)) { + throw new ExpectingATEXT(); + } + } + + protected function hasBrackets() + { + if ($this->lexer->token['type'] !== EmailLexer::S_OPENBRACKET) { + return false; + } + + try { + $this->lexer->find(EmailLexer::S_CLOSEBRACKET); + } catch (\RuntimeException $e) { + throw new ExpectingDomainLiteralClose(); + } + + return true; + } + + protected function checkLabelLength($prev) + { + if ($this->lexer->token['type'] === EmailLexer::S_DOT && + $prev['type'] === EmailLexer::GENERIC && + strlen($prev['value']) > 63 + ) { + $this->warnings[LabelTooLong::CODE] = new LabelTooLong(); + } + } + + protected function parseDomainComments() + { + $this->isUnclosedComment(); + while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { + $this->warnEscaping(); + $this->lexer->moveNext(); + } + + $this->lexer->moveNext(); + if ($this->lexer->isNextToken(EmailLexer::S_DOT)) { + throw new ExpectingATEXT(); + } + } + + protected function addTLDWarnings() + { + if ($this->warnings[DomainLiteral::CODE]) { + $this->warnings[TLD::CODE] = new TLD(); + } + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php b/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php new file mode 100644 index 0000000..8ab16ab --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Parser/LocalPart.php @@ -0,0 +1,138 @@ +lexer->token['type'] !== EmailLexer::S_AT && $this->lexer->token) { + if ($this->lexer->token['type'] === EmailLexer::S_DOT && !$this->lexer->getPrevious()) { + throw new DotAtStart(); + } + + $closingQuote = $this->checkDQUOTE($closingQuote); + if ($closingQuote && $parseDQuote) { + $parseDQuote = $this->parseDoubleQuote(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_OPENPARENTHESIS) { + $this->parseComments(); + $openedParenthesis += $this->getOpenedParenthesis(); + } + if ($this->lexer->token['type'] === EmailLexer::S_CLOSEPARENTHESIS) { + if ($openedParenthesis === 0) { + throw new UnopenedComment(); + } else { + $openedParenthesis--; + } + } + + $this->checkConsecutiveDots(); + + if ($this->lexer->token['type'] === EmailLexer::S_DOT && + $this->lexer->isNextToken(EmailLexer::S_AT) + ) { + throw new DotAtEnd(); + } + + $this->warnEscaping(); + $this->isInvalidToken($this->lexer->token, $closingQuote); + + if ($this->isFWS()) { + $this->parseFWS(); + } + + $this->lexer->moveNext(); + } + + $prev = $this->lexer->getPrevious(); + if (strlen($prev['value']) > LocalTooLong::LOCAL_PART_LENGTH) { + $this->warnings[LocalTooLong::CODE] = new LocalTooLong(); + } + } + + protected function parseDoubleQuote() + { + $parseAgain = true; + $special = array( + EmailLexer::S_CR => true, + EmailLexer::S_HTAB => true, + EmailLexer::S_LF => true + ); + + $invalid = array( + EmailLexer::C_NUL => true, + EmailLexer::S_HTAB => true, + EmailLexer::S_CR => true, + EmailLexer::S_LF => true + ); + $setSpecialsWarning = true; + + $this->lexer->moveNext(); + + while ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE && $this->lexer->token) { + $parseAgain = false; + if (isset($special[$this->lexer->token['type']]) && $setSpecialsWarning) { + $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); + $setSpecialsWarning = false; + } + if ($this->lexer->token['type'] === EmailLexer::S_BACKSLASH && $this->lexer->isNextToken(EmailLexer::S_DQUOTE)) { + $this->lexer->moveNext(); + } + + $this->lexer->moveNext(); + + if (!$this->escaped() && isset($invalid[$this->lexer->token['type']])) { + throw new ExpectingATEXT(); + } + } + + $prev = $this->lexer->getPrevious(); + + if ($prev['type'] === EmailLexer::S_BACKSLASH) { + if (!$this->checkDQUOTE(false)) { + throw new UnclosedQuotedString(); + } + } + + if (!$this->lexer->isNextToken(EmailLexer::S_AT) && $prev['type'] !== EmailLexer::S_BACKSLASH) { + throw new ExpectingAT(); + } + + return $parseAgain; + } + + protected function isInvalidToken($token, $closingQuote) + { + $forbidden = array( + EmailLexer::S_COMMA, + EmailLexer::S_CLOSEBRACKET, + EmailLexer::S_OPENBRACKET, + EmailLexer::S_GREATERTHAN, + EmailLexer::S_LOWERTHAN, + EmailLexer::S_COLON, + EmailLexer::S_SEMICOLON, + EmailLexer::INVALID + ); + + if (in_array($token['type'], $forbidden) && !$closingQuote) { + throw new ExpectingATEXT(); + } + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php b/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php new file mode 100644 index 0000000..e5042e1 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Parser/Parser.php @@ -0,0 +1,215 @@ +lexer = $lexer; + } + + public function getWarnings() + { + return $this->warnings; + } + + abstract public function parse($str); + + /** @return int */ + public function getOpenedParenthesis() + { + return $this->openedParenthesis; + } + + /** + * validateQuotedPair + */ + protected function validateQuotedPair() + { + if (!($this->lexer->token['type'] === EmailLexer::INVALID + || $this->lexer->token['type'] === EmailLexer::C_DEL)) { + throw new ExpectedQPair(); + } + + $this->warnings[QuotedPart::CODE] = + new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); + } + + protected function parseComments() + { + $this->openedParenthesis = 1; + $this->isUnclosedComment(); + $this->warnings[Comment::CODE] = new Comment(); + while (!$this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) { + if ($this->lexer->isNextToken(EmailLexer::S_OPENPARENTHESIS)) { + $this->openedParenthesis++; + } + $this->warnEscaping(); + $this->lexer->moveNext(); + } + + $this->lexer->moveNext(); + if ($this->lexer->isNextTokenAny(array(EmailLexer::GENERIC, EmailLexer::S_EMPTY))) { + throw new ExpectingATEXT(); + } + + if ($this->lexer->isNextToken(EmailLexer::S_AT)) { + $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); + } + } + + protected function isUnclosedComment() + { + try { + $this->lexer->find(EmailLexer::S_CLOSEPARENTHESIS); + return true; + } catch (\RuntimeException $e) { + throw new UnclosedComment(); + } + } + + protected function parseFWS() + { + $previous = $this->lexer->getPrevious(); + + $this->checkCRLFInFWS(); + + if ($this->lexer->token['type'] === EmailLexer::S_CR) { + throw new CRNoLF(); + } + + if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] !== EmailLexer::S_AT) { + throw new AtextAfterCFWS(); + } + + if ($this->lexer->token['type'] === EmailLexer::S_LF || $this->lexer->token['type'] === EmailLexer::C_NUL) { + throw new ExpectingCTEXT(); + } + + if ($this->lexer->isNextToken(EmailLexer::S_AT) || $previous['type'] === EmailLexer::S_AT) { + $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt(); + } else { + $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS(); + } + } + + protected function checkConsecutiveDots() + { + if ($this->lexer->token['type'] === EmailLexer::S_DOT && $this->lexer->isNextToken(EmailLexer::S_DOT)) { + throw new ConsecutiveDot(); + } + } + + protected function isFWS() + { + if ($this->escaped()) { + return false; + } + + if ($this->lexer->token['type'] === EmailLexer::S_SP || + $this->lexer->token['type'] === EmailLexer::S_HTAB || + $this->lexer->token['type'] === EmailLexer::S_CR || + $this->lexer->token['type'] === EmailLexer::S_LF || + $this->lexer->token['type'] === EmailLexer::CRLF + ) { + return true; + } + + return false; + } + + protected function escaped() + { + $previous = $this->lexer->getPrevious(); + + if ($previous['type'] === EmailLexer::S_BACKSLASH + && + $this->lexer->token['type'] !== EmailLexer::GENERIC + ) { + return true; + } + + return false; + } + + protected function warnEscaping() + { + if ($this->lexer->token['type'] !== EmailLexer::S_BACKSLASH) { + return false; + } + + if ($this->lexer->isNextToken(EmailLexer::GENERIC)) { + throw new ExpectingATEXT(); + } + + if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB, EmailLexer::C_DEL))) { + return false; + } + + $this->warnings[QuotedPart::CODE] = + new QuotedPart($this->lexer->getPrevious()['type'], $this->lexer->token['type']); + return true; + + } + + protected function checkDQUOTE($hasClosingQuote) + { + if ($this->lexer->token['type'] !== EmailLexer::S_DQUOTE) { + return $hasClosingQuote; + } + if ($hasClosingQuote) { + return $hasClosingQuote; + } + $previous = $this->lexer->getPrevious(); + if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous['type'] === EmailLexer::GENERIC) { + throw new ExpectingATEXT(); + } + + try { + $this->lexer->find(EmailLexer::S_DQUOTE); + $hasClosingQuote = true; + } catch (\Exception $e) { + throw new UnclosedQuotedString(); + } + $this->warnings[QuotedString::CODE] = new QuotedString($previous['value'], $this->lexer->token['value']); + + return $hasClosingQuote; + } + + protected function checkCRLFInFWS() + { + if ($this->lexer->token['type'] !== EmailLexer::CRLF) { + return; + } + + if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { + throw new CRLFX2(); + } + + if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) { + throw new CRLFAtTheEnd(); + } + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php b/vendor/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php new file mode 100644 index 0000000..e5c3e5d --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Validation/DNSCheckValidation.php @@ -0,0 +1,72 @@ +checkDNS($host); + } + + public function getError() + { + return $this->error; + } + + public function getWarnings() + { + return $this->warnings; + } + + protected function checkDNS($host) + { + $variant = INTL_IDNA_VARIANT_2003; + if ( defined('INTL_IDNA_VARIANT_UTS46') ) { + $variant = INTL_IDNA_VARIANT_UTS46; + } + $host = rtrim(idn_to_ascii($host, IDNA_DEFAULT, $variant), '.') . '.'; + + $Aresult = true; + $MXresult = checkdnsrr($host, 'MX'); + + if (!$MXresult) { + $this->warnings[NoDNSMXRecord::CODE] = new NoDNSMXRecord(); + $Aresult = checkdnsrr($host, 'A') || checkdnsrr($host, 'AAAA'); + if (!$Aresult) { + $this->error = new NoDNSRecord(); + } + } + return $MXresult || $Aresult; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/EmailValidation.php b/vendor/egulias/email-validator/EmailValidator/Validation/EmailValidation.php new file mode 100644 index 0000000..d5a015b --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Validation/EmailValidation.php @@ -0,0 +1,34 @@ +errors = $errors; + parent::__construct(); + } + + public function getErrors() + { + return $this->errors; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php b/vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php new file mode 100644 index 0000000..ce161ac --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Validation/MultipleValidationWithAnd.php @@ -0,0 +1,111 @@ +validations = $validations; + $this->mode = $mode; + } + + /** + * {@inheritdoc} + */ + public function isValid($email, EmailLexer $emailLexer) + { + $result = true; + $errors = []; + foreach ($this->validations as $validation) { + $emailLexer->reset(); + $validationResult = $validation->isValid($email, $emailLexer); + $result = $result && $validationResult; + $this->warnings = array_merge($this->warnings, $validation->getWarnings()); + $errors = $this->addNewError($validation->getError(), $errors); + + if ($this->shouldStop($result)) { + break; + } + } + + if (!empty($errors)) { + $this->error = new MultipleErrors($errors); + } + + return $result; + } + + private function addNewError($possibleError, array $errors) + { + if (null !== $possibleError) { + $errors[] = $possibleError; + } + + return $errors; + } + + private function shouldStop($result) + { + return !$result && $this->mode === self::STOP_ON_ERROR; + } + + /** + * {@inheritdoc} + */ + public function getError() + { + return $this->error; + } + + /** + * {@inheritdoc} + */ + public function getWarnings() + { + return $this->warnings; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php b/vendor/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php new file mode 100644 index 0000000..e4bf0cc --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Validation/NoRFCWarningsValidation.php @@ -0,0 +1,41 @@ +getWarnings())) { + return true; + } + + $this->error = new RFCWarnings(); + + return false; + } + + /** + * {@inheritdoc} + */ + public function getError() + { + return $this->error ?: parent::getError(); + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/RFCValidation.php b/vendor/egulias/email-validator/EmailValidator/Validation/RFCValidation.php new file mode 100644 index 0000000..c4ffe35 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Validation/RFCValidation.php @@ -0,0 +1,49 @@ +parser = new EmailParser($emailLexer); + try { + $this->parser->parse((string)$email); + } catch (InvalidEmail $invalid) { + $this->error = $invalid; + return false; + } + + $this->warnings = $this->parser->getWarnings(); + return true; + } + + public function getError() + { + return $this->error; + } + + public function getWarnings() + { + return $this->warnings; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php b/vendor/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php new file mode 100644 index 0000000..4721f0d --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Validation/SpoofCheckValidation.php @@ -0,0 +1,45 @@ +setChecks(Spoofchecker::SINGLE_SCRIPT); + + if ($checker->isSuspicious($email)) { + $this->error = new SpoofEmail(); + } + + return $this->error === null; + } + + public function getError() + { + return $this->error; + } + + public function getWarnings() + { + return []; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/AddressLiteral.php b/vendor/egulias/email-validator/EmailValidator/Warning/AddressLiteral.php new file mode 100644 index 0000000..77e70f7 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/AddressLiteral.php @@ -0,0 +1,14 @@ +message = 'Address literal in domain part'; + $this->rfcNumber = 5321; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/CFWSNearAt.php b/vendor/egulias/email-validator/EmailValidator/Warning/CFWSNearAt.php new file mode 100644 index 0000000..be43bbe --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/CFWSNearAt.php @@ -0,0 +1,13 @@ +message = "Deprecated folding white space near @"; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/CFWSWithFWS.php b/vendor/egulias/email-validator/EmailValidator/Warning/CFWSWithFWS.php new file mode 100644 index 0000000..dea3450 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/CFWSWithFWS.php @@ -0,0 +1,13 @@ +message = 'Folding whites space followed by folding white space'; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/Comment.php b/vendor/egulias/email-validator/EmailValidator/Warning/Comment.php new file mode 100644 index 0000000..704c290 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/Comment.php @@ -0,0 +1,13 @@ +message = "Comments found in this email"; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/DeprecatedComment.php b/vendor/egulias/email-validator/EmailValidator/Warning/DeprecatedComment.php new file mode 100644 index 0000000..ad43bd7 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/DeprecatedComment.php @@ -0,0 +1,13 @@ +message = 'Deprecated comments'; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/DomainLiteral.php b/vendor/egulias/email-validator/EmailValidator/Warning/DomainLiteral.php new file mode 100644 index 0000000..6f36b5e --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/DomainLiteral.php @@ -0,0 +1,14 @@ +message = 'Domain Literal'; + $this->rfcNumber = 5322; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/DomainTooLong.php b/vendor/egulias/email-validator/EmailValidator/Warning/DomainTooLong.php new file mode 100644 index 0000000..61ff17a --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/DomainTooLong.php @@ -0,0 +1,14 @@ +message = 'Domain is too long, exceeds 255 chars'; + $this->rfcNumber = 5322; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/EmailTooLong.php b/vendor/egulias/email-validator/EmailValidator/Warning/EmailTooLong.php new file mode 100644 index 0000000..497309d --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/EmailTooLong.php @@ -0,0 +1,15 @@ +message = 'Email is too long, exceeds ' . EmailParser::EMAIL_MAX_LENGTH; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/IPV6BadChar.php b/vendor/egulias/email-validator/EmailValidator/Warning/IPV6BadChar.php new file mode 100644 index 0000000..ba2fcc0 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/IPV6BadChar.php @@ -0,0 +1,14 @@ +message = 'Bad char in IPV6 domain literal'; + $this->rfcNumber = 5322; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonEnd.php b/vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonEnd.php new file mode 100644 index 0000000..41afa78 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonEnd.php @@ -0,0 +1,14 @@ +message = ':: found at the end of the domain literal'; + $this->rfcNumber = 5322; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonStart.php b/vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonStart.php new file mode 100644 index 0000000..1bf754e --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/IPV6ColonStart.php @@ -0,0 +1,14 @@ +message = ':: found at the start of the domain literal'; + $this->rfcNumber = 5322; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/IPV6Deprecated.php b/vendor/egulias/email-validator/EmailValidator/Warning/IPV6Deprecated.php new file mode 100644 index 0000000..d752caa --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/IPV6Deprecated.php @@ -0,0 +1,14 @@ +message = 'Deprecated form of IPV6'; + $this->rfcNumber = 5321; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/IPV6DoubleColon.php b/vendor/egulias/email-validator/EmailValidator/Warning/IPV6DoubleColon.php new file mode 100644 index 0000000..4f82394 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/IPV6DoubleColon.php @@ -0,0 +1,14 @@ +message = 'Double colon found after IPV6 tag'; + $this->rfcNumber = 5322; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/IPV6GroupCount.php b/vendor/egulias/email-validator/EmailValidator/Warning/IPV6GroupCount.php new file mode 100644 index 0000000..a59d317 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/IPV6GroupCount.php @@ -0,0 +1,14 @@ +message = 'Group count is not IPV6 valid'; + $this->rfcNumber = 5322; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/IPV6MaxGroups.php b/vendor/egulias/email-validator/EmailValidator/Warning/IPV6MaxGroups.php new file mode 100644 index 0000000..936274c --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/IPV6MaxGroups.php @@ -0,0 +1,14 @@ +message = 'Reached the maximum number of IPV6 groups allowed'; + $this->rfcNumber = 5321; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/LabelTooLong.php b/vendor/egulias/email-validator/EmailValidator/Warning/LabelTooLong.php new file mode 100644 index 0000000..daf07f4 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/LabelTooLong.php @@ -0,0 +1,14 @@ +message = 'Label too long'; + $this->rfcNumber = 5322; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/LocalTooLong.php b/vendor/egulias/email-validator/EmailValidator/Warning/LocalTooLong.php new file mode 100644 index 0000000..0d08d8b --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/LocalTooLong.php @@ -0,0 +1,15 @@ +message = 'Local part is too long, exceeds 64 chars (octets)'; + $this->rfcNumber = 5322; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/NoDNSMXRecord.php b/vendor/egulias/email-validator/EmailValidator/Warning/NoDNSMXRecord.php new file mode 100644 index 0000000..b3c21a1 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/NoDNSMXRecord.php @@ -0,0 +1,14 @@ +message = 'No MX DSN record was found for this email'; + $this->rfcNumber = 5321; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/ObsoleteDTEXT.php b/vendor/egulias/email-validator/EmailValidator/Warning/ObsoleteDTEXT.php new file mode 100644 index 0000000..10f19e3 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/ObsoleteDTEXT.php @@ -0,0 +1,14 @@ +rfcNumber = 5322; + $this->message = 'Obsolete DTEXT in domain literal'; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/QuotedPart.php b/vendor/egulias/email-validator/EmailValidator/Warning/QuotedPart.php new file mode 100644 index 0000000..7be9e6a --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/QuotedPart.php @@ -0,0 +1,13 @@ +message = "Deprecated Quoted String found between $prevToken and $postToken"; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/QuotedString.php b/vendor/egulias/email-validator/EmailValidator/Warning/QuotedString.php new file mode 100644 index 0000000..e9d56e1 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/QuotedString.php @@ -0,0 +1,13 @@ +message = "Quoted String found between $prevToken and $postToken"; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/TLD.php b/vendor/egulias/email-validator/EmailValidator/Warning/TLD.php new file mode 100644 index 0000000..2338b9f --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/TLD.php @@ -0,0 +1,13 @@ +message = "RFC5321, TLD"; + } +} diff --git a/vendor/egulias/email-validator/EmailValidator/Warning/Warning.php b/vendor/egulias/email-validator/EmailValidator/Warning/Warning.php new file mode 100644 index 0000000..ec6a365 --- /dev/null +++ b/vendor/egulias/email-validator/EmailValidator/Warning/Warning.php @@ -0,0 +1,30 @@ +message; + } + + public function code() + { + return self::CODE; + } + + public function RFCNumber() + { + return $this->rfcNumber; + } + + public function __toString() + { + return $this->message() . " rfc: " . $this->rfcNumber . "interal code: " . static::CODE; + } +} diff --git a/vendor/egulias/email-validator/LICENSE b/vendor/egulias/email-validator/LICENSE new file mode 100644 index 0000000..c34d2c1 --- /dev/null +++ b/vendor/egulias/email-validator/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2013-2016 Eduardo Gulias Davis + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/egulias/email-validator/README.md b/vendor/egulias/email-validator/README.md new file mode 100644 index 0000000..008669c --- /dev/null +++ b/vendor/egulias/email-validator/README.md @@ -0,0 +1,82 @@ +# EmailValidator +[![Build Status](https://travis-ci.org/egulias/EmailValidator.png?branch=master)](https://travis-ci.org/egulias/EmailValidator) [![Coverage Status](https://coveralls.io/repos/egulias/EmailValidator/badge.png?branch=master)](https://coveralls.io/r/egulias/EmailValidator?branch=master) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/egulias/EmailValidator/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/egulias/EmailValidator/?branch=master) [![SensioLabsInsight](https://insight.sensiolabs.com/projects/22ba6692-9c02-42e5-a65d-1c5696bfffc6/small.png)](https://insight.sensiolabs.com/projects/22ba6692-9c02-42e5-a65d-1c5696bfffc6) +============================= +## Suported RFCs ## +This library aims to support: + +RFC 5321, 5322, 6530, 6531, 6532. + +## Requirements ## + + * [Composer](https://getcomposer.org) is required for installation + * [Spoofchecking](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/SpoofCheckValidation.php) and [DNSCheckValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/DNSCheckValidation.php) validation requires that your PHP system has the [PHP Internationalization Libraries](https://php.net/manual/en/book.intl.php) (also known as PHP Intl) + +## Installation ## + +Run the command below to install via Composer + +```shell +composer require egulias/email-validator "~2.1" +``` + +## Getting Started ## +`EmailValidator`requires you to decide which (or combination of them) validation/s strategy/ies you'd like to follow for each [validation](#available-validations). + +A basic example with the RFC validation +```php +isValid("example@example.com", new RFCValidation()); //true +``` + + +### Available validations ### + +1. [RFCValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/RFCValidation.php) +2. [NoRFCWarningsValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/NoRFCWarningsValidation.php) +3. [DNSCheckValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/DNSCheckValidation.php) +4. [SpoofCheckValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/SpoofCheckValidation.php) +5. [MultipleValidationWithAnd](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/MultipleValidationWithAnd.php) +6. [Your own validation](#how-to-extend) + +`MultipleValidationWithAnd` + +It is a validation that operates over other validations performing a logical and (&&) over the result of each validation. + +```php +isValid("example@example.com", $multipleValidations); //true +``` + +### How to extend ### + +It's easy! You just need to implement [EmailValidation](https://github.com/egulias/EmailValidator/blob/master/EmailValidator/Validation/EmailValidation.php) and you can use your own validation. + + +## Other Contributors ## +(You can find current contributors [here](https://github.com/egulias/EmailValidator/graphs/contributors)) + +As this is a port from another library and work, here are other people related to the previous one: + +* Ricard Clau [@ricardclau](https://github.com/ricardclau): Performance against PHP built-in filter_var +* Josepf Bielawski [@stloyd](https://github.com/stloyd): For its first re-work of Dominic's lib +* Dominic Sayers [@dominicsayers](https://github.com/dominicsayers): The original isemail function + +## License ## +Released under the MIT License attached with this code. + diff --git a/vendor/egulias/email-validator/composer.json b/vendor/egulias/email-validator/composer.json new file mode 100644 index 0000000..5423e9f --- /dev/null +++ b/vendor/egulias/email-validator/composer.json @@ -0,0 +1,44 @@ +{ + "name": "egulias/email-validator", + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "type": "Library", + "keywords": ["email", "validation", "validator", "emailvalidation", "emailvalidator"], + "license": "MIT", + "authors": [ + {"name": "Eduardo Gulias Davis"} + ], + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "repositories": [ + { + "type": "git", + "url": "https://github.com/dominicsayers/isemail" + } + ], + "require": { + "php": ">= 5.5", + "doctrine/lexer": "^1.0.1" + }, + "require-dev" : { + "satooshi/php-coveralls": "^1.0.1", + "phpunit/phpunit": "^4.8.35||^5.7||^6.0", + "dominicsayers/isemail": "dev-master" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "EmailValidator" + } + }, + "autoload-dev": { + "psr-4": { + "Egulias\\Tests\\": "test" + } + } +} diff --git a/vendor/egulias/email-validator/phpunit.xml.dist b/vendor/egulias/email-validator/phpunit.xml.dist new file mode 100644 index 0000000..b0812f9 --- /dev/null +++ b/vendor/egulias/email-validator/phpunit.xml.dist @@ -0,0 +1,26 @@ + + + + + + ./Tests/EmailValidator + ./vendor/ + + + + + + ./vendor + + + diff --git a/vendor/swiftmailer/swiftmailer/.gitattributes b/vendor/swiftmailer/swiftmailer/.gitattributes index 33b8efd..09c3fba 100644 --- a/vendor/swiftmailer/swiftmailer/.gitattributes +++ b/vendor/swiftmailer/swiftmailer/.gitattributes @@ -6,4 +6,4 @@ *.txt -crlf # ignore /notes in the git-generated distributed .zip archive -/notes export-ignore +/doc/notes export-ignore diff --git a/vendor/swiftmailer/swiftmailer/.php_cs.dist b/vendor/swiftmailer/swiftmailer/.php_cs.dist index f18d65d..2c04e04 100644 --- a/vendor/swiftmailer/swiftmailer/.php_cs.dist +++ b/vendor/swiftmailer/swiftmailer/.php_cs.dist @@ -1,15 +1,16 @@ setRules(array( + ->setRules([ '@Symfony' => true, '@Symfony:risky' => true, - 'array_syntax' => array('syntax' => 'long'), + 'array_syntax' => ['syntax' => 'short'], 'no_unreachable_default_argument_value' => false, - 'braces' => array('allow_single_line_closure' => true), + 'braces' => ['allow_single_line_closure' => true], 'heredoc_to_nowdoc' => false, 'phpdoc_annotation_without_dot' => false, - )) + 'ternary_to_null_coalescing' => true, + ]) ->setRiskyAllowed(true) ->setFinder(PhpCsFixer\Finder::create()->in(__DIR__)) ; diff --git a/vendor/swiftmailer/swiftmailer/.travis.yml b/vendor/swiftmailer/swiftmailer/.travis.yml index fc24d05..610585a 100644 --- a/vendor/swiftmailer/swiftmailer/.travis.yml +++ b/vendor/swiftmailer/swiftmailer/.travis.yml @@ -11,19 +11,14 @@ before_script: - gem install mailcatcher - mailcatcher --smtp-port 4456 -script: ./vendor/bin/simple-phpunit +script: SYMFONY_PHPUNIT_VERSION=6.1 ./vendor/bin/simple-phpunit matrix: include: - - php: 5.3 - - php: 5.4 - - php: 5.5 - - php: 5.6 - php: 7.0 - php: 7.1 - - php: hhvm - allow_failures: - - php: hhvm + - php: 7.2 + - php: 7.3 fast_finish: true cache: diff --git a/vendor/swiftmailer/swiftmailer/CHANGES b/vendor/swiftmailer/swiftmailer/CHANGES index 3532ec2..95a6df6 100644 --- a/vendor/swiftmailer/swiftmailer/CHANGES +++ b/vendor/swiftmailer/swiftmailer/CHANGES @@ -1,21 +1,72 @@ Changelog ========= -5.4.12 (2018-07-31) -------------------- +6.2.0 (2019-03-10) +------------------ + + * added support for symfony/polyfill-intl-dn + * deprecated Swift_CharacterStream_ArrayCharacterStream and Swift_CharacterStream_NgCharacterStream in favor of Swift_CharacterStream_CharacterStream - * fixed typo +6.1.3 (2018-09-11) +------------------ -5.4.11 (2018-07-31) -------------------- + * added auto-start to the SMTP transport when sending a message + * tweaked error message when the response from an SMTP server is empty + * fixed missing property in Swift_Mime_IdGenerator + * exposed original body content type with Swift_Mime_SimpleMimeEntity::getBodyContentType() + * fixed typo in variable name in Swift_AddressEncoder_IdnAddressEncoder + * fixed return type in MessageLogger + * fixed missing property addressEncoder in SimpleHeaderFactory class + +6.1.2 (2018-07-13) +------------------ - * fixed startTLS support for PHP 5.6- + * handled recipient errors when pipelining -5.4.10 (2018-07-27) -------------------- +6.1.1 (2018-07-04) +------------------ + + * removed hard dependency on an IDN encoder + +6.1.0 (2018-07-02) +------------------ + * added address encoder exceptions during send + * added support for bubbling up authenticator error messages + * added support for non-ASCII email addresses + * introduced new dependencies: transport.smtphandlers and transport.authhandlers + * deprecated Swift_Signers_OpenDKIMSigner; use Swift_Signers_DKIMSigner instead + * added support for SMTP pipelining + * added Swift_Transport_Esmtp_EightBitMimeHandler * fixed startTLS only allowed tls1.0, now allowed: tls1.0, tls1.1, tls1.2 +6.0.2 (2017-09-30) +------------------ + + * fixed DecoratorPlugin + * removed usage of getmypid() + +6.0.1 (2017-05-20) +------------------ + + * fixed BC break that can be avoided easily + +6.0.0 (2017-05-19) +------------------ + + * added Swift_Transport::ping() + * removed Swift_Mime_HeaderFactory, Swift_Mime_HeaderSet, Swift_Mime_Message, Swift_Mime_MimeEntity, + and Swift_Mime_ParameterizedHeader interfaces + * removed Swift_MailTransport and Swift_Transport_MailTransport + * removed Swift_Encoding + * removed the Swift_Transport_MailInvoker interface and Swift_Transport_SimpleMailInvoker class + * removed the Swift_SignedMessage class + * removed newInstance() methods everywhere + * methods operating on Date header now use DateTimeImmutable object instead of Unix timestamp; + Swift_Mime_Headers_DateHeader::getTimestamp()/setTimestamp() renamed to getDateTime()/setDateTime() + * bumped minimum version to PHP 7.0 + * removed Swift_Validate and replaced by egulias/email-validator + 5.4.9 (2018-01-23) ------------------ diff --git a/vendor/swiftmailer/swiftmailer/LICENSE b/vendor/swiftmailer/swiftmailer/LICENSE index 485f1d6..bb9c80f 100644 --- a/vendor/swiftmailer/swiftmailer/LICENSE +++ b/vendor/swiftmailer/swiftmailer/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2013-2016 Fabien Potencier +Copyright (c) 2013-2018 Fabien Potencier Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/vendor/swiftmailer/swiftmailer/README b/vendor/swiftmailer/swiftmailer/README index 52c0757..a41b660 100644 --- a/vendor/swiftmailer/swiftmailer/README +++ b/vendor/swiftmailer/swiftmailer/README @@ -1,7 +1,7 @@ Swift Mailer ------------ -Swift Mailer is a component based mailing solution for PHP 5. +Swift Mailer is a component based mailing solution for PHP 7. It is released under the MIT license. Homepage: https://swiftmailer.symfony.com/ diff --git a/vendor/swiftmailer/swiftmailer/VERSION b/vendor/swiftmailer/swiftmailer/VERSION deleted file mode 100644 index 82a2d1d..0000000 --- a/vendor/swiftmailer/swiftmailer/VERSION +++ /dev/null @@ -1 +0,0 @@ -Swift-5.4.12 diff --git a/vendor/swiftmailer/swiftmailer/composer.json b/vendor/swiftmailer/swiftmailer/composer.json index 44a1050..a996e21 100644 --- a/vendor/swiftmailer/swiftmailer/composer.json +++ b/vendor/swiftmailer/swiftmailer/composer.json @@ -15,23 +15,29 @@ } ], "require": { - "php": ">=5.3.3" + "php": ">=7.0.0", + "egulias/email-validator": "~2.0", + "symfony/polyfill-iconv": "^1.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-intl-idn": "^1.10" }, "require-dev": { "mockery/mockery": "~0.9.1", - "symfony/phpunit-bridge": "~3.2" + "symfony/phpunit-bridge": "^3.4.19|^4.1.8" + }, + "suggest": { + "ext-intl": "Needed to support internationalized email addresses", + "true/punycode": "Needed to support internationalized email addresses, if ext-intl is not installed" }, "autoload": { "files": ["lib/swift_required.php"] }, "autoload-dev": { - "psr-0": { - "Swift_": "tests/unit" - } + "psr-0": { "Swift_": "tests/unit" } }, "extra": { "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "6.2-dev" } } } diff --git a/vendor/swiftmailer/swiftmailer/doc/headers.rst b/vendor/swiftmailer/swiftmailer/doc/headers.rst index 2c11c18..8b8bece 100644 --- a/vendor/swiftmailer/swiftmailer/doc/headers.rst +++ b/vendor/swiftmailer/swiftmailer/doc/headers.rst @@ -8,15 +8,15 @@ this. Header Basics ------------- -All MIME entities in Swift Mailer -- including the message itself -- -store their headers in a single object called a HeaderSet. This HeaderSet is +All MIME entities in Swift Mailer -- including the message itself -- store +their headers in a single object called a HeaderSet. This HeaderSet is retrieved with the ``getHeaders()`` method. As mentioned in the previous chapter, everything that forms a part of a message in Swift Mailer is a MIME entity that is represented by an instance of -``Swift_Mime_MimeEntity``. This includes -- most notably -- the message object -itself, attachments, MIME parts and embedded images. Each of these MIME entities -consists of a body and a set of headers that describe the body. +``Swift_Mime_SimpleMimeEntity``. This includes -- most notably -- the message +object itself, attachments, MIME parts and embedded images. Each of these MIME +entities consists of a body and a set of headers that describe the body. For all of the "standard" headers in these MIME entities, such as the ``Content-Type``, there are named methods for working with them, such as @@ -25,11 +25,9 @@ moderately complex area of the library. Each header has a slightly different required structure that it must meet in order to comply with the standards that govern email (and that are checked by spam blockers etc). -You fetch the HeaderSet from a MIME entity like so: +You fetch the HeaderSet from a MIME entity like so:: -.. code-block:: php - - $message = Swift_Message::newInstance(); + $message = new Swift_Message(); // Fetch the HeaderSet from a Message object $headers = $message->getHeaders(); @@ -44,10 +42,8 @@ Depending upon the MIME entity the HeaderSet came from, the contents of the HeaderSet will be different, since an attachment for example has a different set of headers to those in a message. -You can find out what the HeaderSet contains with a quick loop, dumping out -the names of the headers: - -.. code-block:: php +You can find out what the HeaderSet contains with a quick loop, dumping out the +names of the headers:: foreach ($headers->getAll() as $header) { printf("%s
\n", $header->getFieldName()); @@ -65,9 +61,7 @@ the names of the headers: */ You can also dump out the rendered HeaderSet by calling its ``toString()`` -method: - -.. code-block:: php +method:: echo $headers->toString(); @@ -85,18 +79,15 @@ method: Where the complexity comes in is when you want to modify an existing header. This complexity comes from the fact that each header can be of a slightly different type (such as a Date header, or a header that contains email -addresses, or a header that has key-value parameters on it!). Each header in the -HeaderSet is an instance of ``Swift_Mime_Header``. They all have common +addresses, or a header that has key-value parameters on it!). Each header in +the HeaderSet is an instance of ``Swift_Mime_Header``. They all have common functionality, but knowing exactly what type of header you're working with will allow you a little more control. You can determine the type of header by comparing the return value of its ``getFieldType()`` method with the constants ``TYPE_TEXT``, ``TYPE_PARAMETERIZED``, ``TYPE_DATE``, ``TYPE_MAILBOX``, ``TYPE_ID`` and -``TYPE_PATH`` which are defined in ``Swift_Mime_Header``. - - -.. code-block:: php +``TYPE_PATH`` which are defined in ``Swift_Mime_Header``:: foreach ($headers->getAll() as $header) { switch ($header->getFieldType()) { @@ -131,8 +122,8 @@ Headers can be removed from the set, modified within the set, or added to the set. The following sections show you how to work with the HeaderSet and explain the -details of each implementation of ``Swift_Mime_Header`` that may -exist within the HeaderSet. +details of each implementation of ``Swift_Mime_Header`` that may exist within +the HeaderSet. Header Types ------------ @@ -151,44 +142,33 @@ header in a message. There's nothing particularly interesting about a text header, though it is probably the one you'd opt to use if you need to add a custom header to a -message. It represents text just like you'd think it does. If the text -contains characters that are not permitted in a message header (such as new -lines, or non-ascii characters) then the header takes care of encoding the -text so that it can be used. +message. It represents text just like you'd think it does. If the text contains +characters that are not permitted in a message header (such as new lines, or +non-ascii characters) then the header takes care of encoding the text so that +it can be used. No header -- including text headers -- in Swift Mailer is vulnerable to -header-injection attacks. Swift Mailer breaks any attempt at header injection by -encoding the dangerous data into a non-dangerous form. +header-injection attacks. Swift Mailer breaks any attempt at header injection +by encoding the dangerous data into a non-dangerous form. It's easy to add a new text header to a HeaderSet. You do this by calling the -HeaderSet's ``addTextHeader()`` method. - -.. code-block:: php - - $message = Swift_Message::newInstance(); +HeaderSet's ``addTextHeader()`` method:: + $message = new Swift_Message(); $headers = $message->getHeaders(); - $headers->addTextHeader('Your-Header-Name', 'the header value'); Changing the value of an existing text header is done by calling it's -``setValue()`` method. - -.. code-block:: php +``setValue()`` method:: $subject = $message->getHeaders()->get('Subject'); - $subject->setValue('new subject'); When output via ``toString()``, a text header produces something like the -following: - -.. code-block:: php +following:: $subject = $message->getHeaders()->get('Subject'); - $subject->setValue('amazing subject line'); - echo $subject->toString(); /* @@ -198,15 +178,11 @@ following: */ If the header contains any characters that are outside of the US-ASCII range -however, they will be encoded. This is nothing to be concerned about since -mail clients will decode them back. - -.. code-block:: php +however, they will be encoded. This is nothing to be concerned about since mail +clients will decode them back:: $subject = $message->getHeaders()->get('Subject'); - $subject->setValue('contains – dash'); - echo $subject->toString(); /* @@ -229,46 +205,37 @@ from text headers are available in addition to the methods described here. Adding a parameterized header to a HeaderSet is done by using the ``addParameterizedHeader()`` method which takes a text value like -``addTextHeader()`` but it also accepts an associative array of -key-value parameters. - -.. code-block:: php - - $message = Swift_Message::newInstance(); +``addTextHeader()`` but it also accepts an associative array of key-value +parameters:: + $message = new Swift_Message(); $headers = $message->getHeaders(); - $headers->addParameterizedHeader( 'Header-Name', 'header value', - array('foo' => 'bar') + ['foo' => 'bar'] ); To change the text value of the header, call it's ``setValue()`` method just as you do with text headers. To change the parameters in the header, call the header's ``setParameters()`` -method or the ``setParameter()`` method (note the pluralization). - -.. code-block:: php +method or the ``setParameter()`` method (note the pluralization):: $type = $message->getHeaders()->get('Content-Type'); // setParameters() takes an associative array - $type->setParameters(array( + $type->setParameters([ 'name' => 'file.txt', 'charset' => 'iso-8859-1' - )); + ]); // setParameter() takes two args for $key and $value $type->setParameter('charset', 'iso-8859-1'); When output via ``toString()``, a parameterized header produces something like -the following: - -.. code-block:: php +the following:: $type = $message->getHeaders()->get('Content-Type'); - $type->setValue('text/html'); $type->setParameter('charset', 'utf-8'); @@ -284,17 +251,12 @@ If the header contains any characters that are outside of the US-ASCII range however, they will be encoded, just like they are for text headers. This is nothing to be concerned about since mail clients will decode them back. Likewise, if the parameters contain any non-ascii characters they will be -encoded so that they can be transmitted safely. - -.. code-block:: php - - $attachment = Swift_Attachment::newInstance(); +encoded so that they can be transmitted safely:: + $attachment = new Swift_Attachment(); $disp = $attachment->getHeaders()->get('Content-Disposition'); - $disp->setValue('attachment'); $disp->setParameter('filename', 'report–may.pdf'); - echo $disp->toString(); /* @@ -310,41 +272,30 @@ Date headers contains an RFC 2822 formatted date (i.e. what PHP's ``date('r')`` returns). They are used anywhere a date or time is needed to be presented as a message header. -The data on which a date header is modeled is simply a UNIX timestamp such as -that returned by ``time()`` or ``strtotime()``. The timestamp is used to create -a correctly structured RFC 2822 formatted date such as -``Tue, 17 Feb 2009 22:26:31 +1100``. +The data on which a date header is modeled as a DateTimeImmutable object. The +object is used to create a correctly structured RFC 2822 formatted date with +timezone such as ``Tue, 17 Feb 2009 22:26:31 +1100``. The obvious place this header type is used is in the ``Date:`` header of the message itself. -It's easy to add a new date header to a HeaderSet. You do this by calling -the HeaderSet's ``addDateHeader()`` method. - -.. code-block:: php - - $message = Swift_Message::newInstance(); +It's easy to add a new date header to a HeaderSet. You do this by calling the +HeaderSet's ``addDateHeader()`` method:: + $message = new Swift_Message(); $headers = $message->getHeaders(); - - $headers->addDateHeader('Your-Header-Name', strtotime('3 days ago')); + $headers->addDateHeader('Your-Header', new DateTimeImmutable('3 days ago')); Changing the value of an existing date header is done by calling it's -``setTimestamp()`` method. - -.. code-block:: php +``setDateTime()`` method:: $date = $message->getHeaders()->get('Date'); - - $date->setTimestamp(time()); + $date->setDateTime(new DateTimeImmutable()); When output via ``toString()``, a date header produces something like the -following: - -.. code-block:: php +following:: $date = $message->getHeaders()->get('Date'); - echo $date->toString(); /* @@ -356,9 +307,9 @@ following: Mailbox (e-mail address) Headers ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Mailbox headers contain one or more email addresses, possibly with -personalized names attached to them. The data on which they are modeled is -represented by an associative array of email addresses and names. +Mailbox headers contain one or more email addresses, possibly with personalized +names attached to them. The data on which they are modeled is represented by an +associative array of email addresses and names. Mailbox headers are probably the most complex header type to understand in Swift Mailer because they accept their input as an array which can take various @@ -369,48 +320,38 @@ exception of ``Return-Path:`` which has a stricter syntax -- use this header type. That is, ``To:``, ``From:`` etc. You add a new mailbox header to a HeaderSet by calling the HeaderSet's -``addMailboxHeader()`` method. - -.. code-block:: php - - $message = Swift_Message::newInstance(); +``addMailboxHeader()`` method:: + $message = new Swift_Message(); $headers = $message->getHeaders(); - - $headers->addMailboxHeader('Your-Header-Name', array( - 'person1@example.org' => 'Person Name One', - 'person2@example.org', - 'person3@example.org', - 'person4@example.org' => 'Another named person' - )); + $headers->addMailboxHeader('Your-Header-Name', [ + 'person1@example.org' => 'Person Name One', + 'person2@example.org', + 'person3@example.org', + 'person4@example.org' => 'Another named person' + ]); Changing the value of an existing mailbox header is done by calling it's -``setNameAddresses()`` method. - -.. code-block:: php +``setNameAddresses()`` method:: $to = $message->getHeaders()->get('To'); - - $to->setNameAddresses(array( + $to->setNameAddresses([ 'joe@example.org' => 'Joe Bloggs', 'john@example.org' => 'John Doe', 'no-name@example.org' - )); + ]); If you don't wish to concern yourself with the complicated accepted input formats accepted by ``setNameAddresses()`` as described in the previous chapter and you only want to set one or more addresses (not names) then you can just -use the ``setAddresses()`` method instead. - -.. code-block:: php +use the ``setAddresses()`` method instead:: $to = $message->getHeaders()->get('To'); - - $to->setAddresses(array( + $to->setAddresses([ 'joe@example.org', 'john@example.org', 'no-name@example.org' - )); + ]); .. note:: @@ -418,26 +359,20 @@ use the ``setAddresses()`` method instead. If all you want to do is set a single address in the header, you can use a string as the input parameter to ``setAddresses()`` and/or -``setNameAddresses()``. - -.. code-block:: php +``setNameAddresses()``:: $to = $message->getHeaders()->get('To'); - $to->setAddresses('joe-bloggs@example.org'); When output via ``toString()``, a mailbox header produces something like the -following: - -.. code-block:: php +following:: $to = $message->getHeaders()->get('To'); - - $to->setNameAddresses(array( + $to->setNameAddresses([ 'person1@example.org' => 'Name of Person', 'person2@example.org', 'person3@example.org' => 'Another Person' - )); + ]); echo $to->toString(); @@ -448,6 +383,19 @@ following: */ +Internationalized domains are automatically converted to IDN encoding:: + + $to = $message->getHeaders()->get('To'); + $to->setAddresses('joe@ëxämple.org'); + + echo $to->toString(); + + /* + + To: joe@xn--xmple-gra1c.org + + */ + ID Headers ~~~~~~~~~~ @@ -455,41 +403,33 @@ ID headers contain identifiers for the entity (or the message). The most notable ID header is the Message-ID header on the message itself. An ID that exists inside an ID header looks more-or-less less like an email -address. For example, ``<1234955437.499becad62ec2@example.org>``. -The part to the left of the @ sign is usually unique, based on the current time -and some random factor. The part on the right is usually a domain name. +address. For example, ``<1234955437.499becad62ec2@example.org>``. The part to +the left of the @ sign is usually unique, based on the current time and some +random factor. The part on the right is usually a domain name. Any ID passed to the header's ``setId()`` method absolutely MUST conform to this structure, otherwise you'll get an Exception thrown at you by Swift Mailer -(a ``Swift_RfcComplianceException``). This is to ensure that the generated +(a ``Swift_RfcComplianceException``). This is to ensure that the generated email complies with relevant RFC documents and therefore is less likely to be blocked as spam. -It's easy to add a new ID header to a HeaderSet. You do this by calling -the HeaderSet's ``addIdHeader()`` method. - -.. code-block:: php - - $message = Swift_Message::newInstance(); +It's easy to add a new ID header to a HeaderSet. You do this by calling the +HeaderSet's ``addIdHeader()`` method:: + $message = new Swift_Message(); $headers = $message->getHeaders(); - $headers->addIdHeader('Your-Header-Name', '123456.unqiue@example.org'); -Changing the value of an existing ID header is done by calling its -``setId()`` method:: +Changing the value of an existing ID header is done by calling its ``setId()`` +method:: $msgId = $message->getHeaders()->get('Message-ID'); - $msgId->setId(time() . '.' . uniqid('thing') . '@example.org'); When output via ``toString()``, an ID header produces something like the -following: - -.. code-block:: php +following:: $msgId = $message->getHeaders()->get('Message-ID'); - echo $msgId->toString(); /* @@ -502,38 +442,27 @@ Path Headers ~~~~~~~~~~~~ Path headers are like very-restricted mailbox headers. They contain a single -email address with no associated name. The Return-Path header of a message is -a path header. +email address with no associated name. The Return-Path header of a message is a +path header. You add a new path header to a HeaderSet by calling the HeaderSet's -``addPathHeader()`` method. - -.. code-block:: php - - $message = Swift_Message::newInstance(); +``addPathHeader()`` method:: + $message = new Swift_Message(); $headers = $message->getHeaders(); - $headers->addPathHeader('Your-Header-Name', 'person@example.org'); Changing the value of an existing path header is done by calling its -``setAddress()`` method. - -.. code-block:: php +``setAddress()`` method:: $return = $message->getHeaders()->get('Return-Path'); - $return->setAddress('my-address@example.org'); When output via ``toString()``, a path header produces something like the -following: - -.. code-block:: php +following:: $return = $message->getHeaders()->get('Return-Path'); - $return->setAddress('person@example.org'); - echo $return->toString(); /* @@ -554,19 +483,10 @@ Adding new Headers New headers can be added to the HeaderSet by using one of the provided ``add..Header()`` methods. -To add a header to a MIME entity (such as the message): - -Get the HeaderSet from the entity by via its ``getHeaders()`` method. - -* Add the header to the HeaderSet by calling one of the ``add..Header()`` - methods. - -The added header will appear in the message when it is sent. - -.. code-block:: php +The added header will appear in the message when it is sent:: // Adding a custom header to a message - $message = Swift_Message::newInstance(); + $message = new Swift_Message(); $headers = $message->getHeaders(); $headers->addTextHeader('X-Mine', 'something here'); @@ -578,14 +498,21 @@ Retrieving Headers ~~~~~~~~~~~~~~~~~~ Headers are retrieved through the HeaderSet's ``get()`` and ``getAll()`` -methods. +methods:: + + $headers = $message->getHeaders(); + + // Get the To: header + $toHeader = $headers->get('To'); -To get a header, or several headers from a MIME entity: + // Get all headers named "X-Foo" + $fooHeaders = $headers->getAll('X-Foo'); -* Get the HeaderSet from the entity by via its ``getHeaders()`` method. + // Get the second header named "X-Foo" + $foo = $headers->get('X-Foo', 1); -* Get the header(s) from the HeaderSet by calling either ``get()`` or - ``getAll()``. + // Get all headers that are present + $all = $headers->getAll(); When using ``get()`` a single header is returned that matches the name (case insensitive) that is passed to it. When using ``getAll()`` with a header name, @@ -606,34 +533,23 @@ arguments returns an array of all headers present in the entity. sure what type of header it is then you may need to check the type by calling its ``getFieldType()`` method. - .. code-block:: php - - $headers = $message->getHeaders(); - - // Get the To: header - $toHeader = $headers->get('To'); - - // Get all headers named "X-Foo" - $fooHeaders = $headers->getAll('X-Foo'); - - // Get the second header named "X-Foo" - $foo = $headers->get('X-Foo', 1); - - // Get all headers that are present - $all = $headers->getAll(); - Check if a Header Exists ~~~~~~~~~~~~~~~~~~~~~~~~ You can check if a named header is present in a HeaderSet by calling its -``has()`` method. +``has()`` method:: -To check if a header exists: + $headers = $message->getHeaders(); -* Get the HeaderSet from the entity by via its ``getHeaders()`` method. + // Check if the To: header exists + if ($headers->has('To')) { + echo 'To: exists'; + } -* Call the HeaderSet's ``has()`` method specifying the header you're looking - for. + // Check if an X-Foo header exists twice (i.e. check for the 2nd one) + if ($headers->has('X-Foo', 1)) { + echo 'Second X-Foo header exists'; + } If the header exists, ``true`` will be returned or ``false`` if not. @@ -644,32 +560,22 @@ If the header exists, ``true`` will be returned or ``false`` if not. numerical index, starting from zero to specify which header you want to check more specifically. - .. code-block:: php - - $headers = $message->getHeaders(); - - // Check if the To: header exists - if ($headers->has('To')) { - echo 'To: exists'; - } - - // Check if an X-Foo header exists twice (i.e. check for the 2nd one) - if ($headers->has('X-Foo', 1)) { - echo 'Second X-Foo header exists'; - } - Removing Headers ~~~~~~~~~~~~~~~~ Removing a Header from the HeaderSet is done by calling the HeaderSet's -``remove()`` or ``removeAll()`` methods. +``remove()`` or ``removeAll()`` methods:: -To remove an existing header: + $headers = $message->getHeaders(); + + // Remove the Subject: header + $headers->remove('Subject'); -* Get the HeaderSet from the entity by via its ``getHeaders()`` method. + // Remove all X-Foo headers + $headers->removeAll('X-Foo'); -* Call the HeaderSet's ``remove()`` or ``removeAll()`` methods specifying the - header you want to remove. + // Remove only the second X-Foo header + $headers->remove('X-Foo', 1); When calling ``remove()`` a single header will be removed. When calling ``removeAll()`` all headers with the given name will be removed. If no headers @@ -683,40 +589,16 @@ exist with the given name, no errors will occur. check more specifically. For the same reason, ``removeAll()`` exists to remove all headers that have the given name. - .. code-block:: php - - $headers = $message->getHeaders(); - - // Remove the Subject: header - $headers->remove('Subject'); - - // Remove all X-Foo headers - $headers->removeAll('X-Foo'); - - // Remove only the second X-Foo header - $headers->remove('X-Foo', 1); - Modifying a Header's Content ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To change a Header's content you should know what type of header it is and then call it's appropriate setter method. All headers also have a ``setFieldBodyModel()`` method that accepts a mixed parameter and delegates to -the correct setter. - -To modify an existing header: - -* Get the HeaderSet from the entity by via its ``getHeaders()`` method. - -* Get the Header by using the HeaderSet's ``get()``. - -* Call the Header's appropriate setter method or call the header's - ``setFieldBodyModel()`` method. +the correct setter:: The header will be updated inside the HeaderSet and the changes will be seen -when the message is sent. - -.. code-block:: php +when the message is sent:: $headers = $message->getHeaders(); @@ -726,14 +608,14 @@ when the message is sent. // Change the To: header $to = $headers->get('To'); - $to->setNameAddresses(array( + $to->setNameAddresses([ 'person@example.org' => 'Person', 'thing@example.org' - )); + ]); // Using the setFieldBodyModel() just delegates to the correct method // So here to calls setNameAddresses() - $to->setFieldBodyModel(array( + $to->setFieldBodyModel([ 'person@example.org' => 'Person', 'thing@example.org' - )); + ]); diff --git a/vendor/swiftmailer/swiftmailer/doc/help-resources.rst b/vendor/swiftmailer/swiftmailer/doc/help-resources.rst deleted file mode 100644 index 4208935..0000000 --- a/vendor/swiftmailer/swiftmailer/doc/help-resources.rst +++ /dev/null @@ -1,44 +0,0 @@ -Getting Help -============ - -There are a number of ways you can get help when using Swift Mailer, depending -upon the nature of your problem. For bug reports and feature requests create a -new ticket in GitHub. For general advice ask on the Google Group -(swiftmailer). - -Submitting Bugs & Feature Requests ----------------------------------- - -Bugs and feature requests should be posted on GitHub. - -If you post a bug or request a feature in the forum, or on the Google Group -you will most likely be asked to create a ticket in `GitHub`_ since it is -simply not feasible to manage such requests from a number of a different -sources. - -When you go to GitHub you will be asked to create a username and password -before you can create a ticket. This is free and takes very little time. - -When you create your ticket, do not assign it to any milestones. A developer -will assess your ticket and re-assign it as needed. - -If your ticket is reporting a bug present in the current version, which was -not present in the previous version please include the tag "regression" in -your ticket. - -GitHub will update you when work is performed on your ticket. - -Ask on the Google Group ------------------------ - -You can seek advice at Google Groups, within the "swiftmailer" `group`_. - -You can post messages to this group if you want help, or there's something you -wish to discuss with the developers and with other users. - -This is probably the fastest way to get help since it is primarily email-based -for most users, though bug reports should not be posted here since they may -not be resolved. - -.. _`GitHub`: https://github.com/swiftmailer/swiftmailer/issues -.. _`group`: http://groups.google.com/group/swiftmailer diff --git a/vendor/swiftmailer/swiftmailer/doc/including-the-files.rst b/vendor/swiftmailer/swiftmailer/doc/including-the-files.rst deleted file mode 100644 index 978dca2..0000000 --- a/vendor/swiftmailer/swiftmailer/doc/including-the-files.rst +++ /dev/null @@ -1,46 +0,0 @@ -Including Swift Mailer (Autoloading) -==================================== - -If you are using Composer, Swift Mailer will be automatically autoloaded. - -If not, you can use the built-in autoloader by requiring the -``swift_required.php`` file:: - - require_once '/path/to/swift-mailer/lib/swift_required.php'; - - /* rest of code goes here */ - -If you want to override the default Swift Mailer configuration, call the -``init()`` method on the ``Swift`` class and pass it a valid PHP callable (a -PHP function name, a PHP 5.3 anonymous function, ...):: - - require_once '/path/to/swift-mailer/lib/swift_required.php'; - - function swiftmailer_configurator() { - // configure Swift Mailer - - Swift_DependencyContainer::getInstance()->... - Swift_Preferences::getInstance()->... - } - - Swift::init('swiftmailer_configurator'); - - /* rest of code goes here */ - -The advantage of using the ``init()`` method is that your code will be -executed only if you use Swift Mailer in your script. - -.. note:: - - While Swift Mailer's autoloader is designed to play nicely with other - autoloaders, sometimes you may have a need to avoid using Swift Mailer's - autoloader and use your own instead. Include the ``swift_init.php`` - instead of the ``swift_required.php`` if you need to do this. The very - minimum include is the ``swift_init.php`` file since Swift Mailer will not - work without the dependency injection this file sets up: - - .. code-block:: php - - require_once '/path/to/swift-mailer/lib/swift_init.php'; - - /* rest of code goes here */ diff --git a/vendor/swiftmailer/swiftmailer/doc/index.rst b/vendor/swiftmailer/swiftmailer/doc/index.rst index a1a0a92..5d92889 100644 --- a/vendor/swiftmailer/swiftmailer/doc/index.rst +++ b/vendor/swiftmailer/swiftmailer/doc/index.rst @@ -5,10 +5,6 @@ Swiftmailer :maxdepth: 2 introduction - overview - installing - help-resources - including-the-files messages headers sending diff --git a/vendor/swiftmailer/swiftmailer/doc/installing.rst b/vendor/swiftmailer/swiftmailer/doc/installing.rst deleted file mode 100644 index 557211d..0000000 --- a/vendor/swiftmailer/swiftmailer/doc/installing.rst +++ /dev/null @@ -1,89 +0,0 @@ -Installing the Library -====================== - -Installing with Composer ------------------------- - -The recommended way to install Swiftmailer is via Composer: - -.. code-block:: bash - - $ php composer.phar require swiftmailer/swiftmailer @stable - -Installing from Git -------------------- - -It's possible to download and install Swift Mailer directly from github.com if -you want to keep up-to-date with ease. - -Swift Mailer's source code is kept in a git repository at github.com so you -can get the source directly from the repository. - -.. note:: - - You do not need to have git installed to use Swift Mailer from GitHub. If - you don't have git installed, go to `GitHub`_ and click the "Download" - button. - -Cloning the Repository -~~~~~~~~~~~~~~~~~~~~~~ - -The repository can be cloned from git://github.com/swiftmailer/swiftmailer.git -using the ``git clone`` command. - -You will need to have ``git`` installed before you can use the -``git clone`` command. - -To clone the repository: - -* Open your favorite terminal environment (command line). - -* Move to the directory you want to clone to. - -* Run the command ``git clone git://github.com/swiftmailer/swiftmailer.git - swiftmailer``. - -The source code will be downloaded into a directory called "swiftmailer". - -The example shows the process on a UNIX-like system such as Linux, BSD or Mac -OS X. - -.. code-block:: bash - - $ cd source_code/ - $ git clone git://github.com/swiftmailer/swiftmailer.git swiftmailer - Initialized empty Git repository in /Users/chris/source_code/swiftmailer/.git/ - remote: Counting objects: 6815, done. - remote: Compressing objects: 100% (2761/2761), done. - remote: Total 6815 (delta 3641), reused 6326 (delta 3286) - Receiving objects: 100% (6815/6815), 4.35 MiB | 162 KiB/s, done. - Resolving deltas: 100% (3641/3641), done. - Checking out files: 100% (1847/1847), done. - $ cd swiftmailer/ - $ ls - CHANGES LICENSE ... - $ - -Troubleshooting ---------------- - -Swift Mailer does not work when used with function overloading as implemented -by ``mbstring`` (``mbstring.func_overload`` set to ``2``). A workaround is to -temporarily change the internal encoding to ``ASCII`` when sending an email: - -.. code-block:: php - - if (function_exists('mb_internal_encoding') && ((int) ini_get('mbstring.func_overload')) & 2) - { - $mbEncoding = mb_internal_encoding(); - mb_internal_encoding('ASCII'); - } - - // Create your message and send it with Swift Mailer - - if (isset($mbEncoding)) - { - mb_internal_encoding($mbEncoding); - } - -.. _`GitHub`: http://github.com/swiftmailer/swiftmailer diff --git a/vendor/swiftmailer/swiftmailer/doc/introduction.rst b/vendor/swiftmailer/swiftmailer/doc/introduction.rst index a85336b..774e9f4 100644 --- a/vendor/swiftmailer/swiftmailer/doc/introduction.rst +++ b/vendor/swiftmailer/swiftmailer/doc/introduction.rst @@ -1,135 +1,61 @@ Introduction ============ -Swift Mailer is a component-based library for sending e-mails from PHP -applications. +Swift Mailer is a for sending e-mails from PHP applications. -Organization of this Book -------------------------- +System Requirements +------------------- -This book has been written so that those who need information quickly are able -to find what they need, and those who wish to learn more advanced topics can -read deeper into each chapter. +Swift Mailer requires PHP 7.0 or higher (``proc_*`` functions must be +available). -The book begins with an overview of Swift Mailer, discussing what's included -in the package and preparing you for the remainder of the book. +Swift Mailer does not work when used with function overloading as implemented +by ``mbstring`` when ``mbstring.func_overload`` is set to ``2``. -It is possible to read this user guide just like any other book (from -beginning to end). Each chapter begins with a discussion of the contents it -contains, followed by a short code sample designed to give you a head start. -As you get further into a chapter you will learn more about Swift Mailer's -capabilities, but often you will be able to head directly to the topic you -wish to learn about. - -Throughout this book you will be presented with code samples, which most -people should find ample to implement Swift Mailer appropriately in their own -projects. We will also use diagrams where appropriate, and where we believe -readers may find it helpful we will discuss some related theory, including -reference to certain documents you are able to find online. - -Code Samples +Installation ------------ -Code samples presented in this book will be displayed on a different colored -background in a monospaced font. Samples are not to be taken as copy & paste -code snippets. - -Code examples are used through the book to clarify what is written in text. -They will sometimes be usable as-is, but they should always be taken as -outline/pseudo code only. - -A code sample will look like this:: - - class AClass - { - ... - } - - // A Comment - $obj = new AClass($arg1, $arg2, ... ); - - /* A note about another way of doing something - $obj = AClass::newInstance($arg1, $arg2, ... ); - - */ +The recommended way to install Swiftmailer is via Composer: -The presence of 3 dots ``...`` in a code sample indicates that we have left -out a chunk of the code for brevity, they are not actually part of the code. +.. code-block:: bash -We will often place multi-line comments ``/* ... */`` in the code so that we -can show alternative ways of achieving the same result. + $ composer require "swiftmailer/swiftmailer:^6.0" -You should read the code examples given and try to understand them. They are -kept concise so that you are not overwhelmed with information. +Basic Usage +----------- -History of Swift Mailer ------------------------ +Here is the simplest way to send emails with Swift Mailer:: -Swift Mailer began back in 2005 as a one-class project for sending mail over -SMTP. It has since grown into the flexible component-based library that is in -development today. + require_once '/path/to/vendor/autoload.php'; -Chris Corbyn first posted Swift Mailer on a web forum asking for comments from -other developers. It was never intended as a fully supported open source -project, but members of the forum began to adopt it and make use of it. + // Create the Transport + $transport = (new Swift_SmtpTransport('smtp.example.org', 25)) + ->setUsername('your username') + ->setPassword('your password') + ; -Very quickly feature requests were coming for the ability to add attachments -and use SMTP authentication, along with a number of other "obvious" missing -features. Considering the only alternative was PHPMailer it seemed like a good -time to bring some fresh tools to the table. Chris began working towards a -more component based, PHP5-like approach unlike the existing single-class, -legacy PHP4 approach taken by PHPMailer. + // Create the Mailer using your created Transport + $mailer = new Swift_Mailer($transport); -Members of the forum offered a lot of advice and critique on the code as he -worked through this project and released versions 2 and 3 of the library in -2005 and 2006, which by then had been broken down into smaller classes -offering more flexibility and supporting plugins. To this day the Swift Mailer -team still receive a lot of feature requests from users both on the forum and -in by email. + // Create a message + $message = (new Swift_Message('Wonderful Subject')) + ->setFrom(['john@doe.com' => 'John Doe']) + ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) + ->setBody('Here is the message itself') + ; -Until 2008 Chris was the sole developer of Swift Mailer, but entering 2009 he -gained the support of two experienced developers well-known to him: Paul -Annesley and Christopher Thompson. This has been an extremely welcome change. + // Send the message + $result = $mailer->send($message); -As of September 2009, Chris handed over the maintenance of Swift Mailer to -Fabien Potencier. +You can also use Sendmail as a transport:: -Now 2009 and in its fourth major version Swift Mailer is more object-oriented -and flexible than ever, both from a usability standpoint and from a -development standpoint. + // Sendmail + $transport = new Swift_SendmailTransport('/usr/sbin/sendmail -bs'); -By no means is Swift Mailer ready to call "finished". There are still many -features that can be added to the library along with the constant refactoring -that happens behind the scenes. - -It's a Library! ---------------- - -Swift Mailer is not an application - it's a library. - -To most experienced developers this is probably an obvious point to make, but -it's certainly worth mentioning. Many people often contact us having gotten -the completely wrong end of the stick in terms of what Swift Mailer is -actually for. - -It's not an application. It does not have a graphical user interface. It -cannot be opened in your web browser directly. - -It's a library (or a framework if you like). It provides a whole lot of -classes that do some very complicated things, so that you don't have to. You -"use" Swift Mailer within an application so that your application can have the -ability to send emails. - -The component-based structure of the library means that you are free to -implement it in a number of different ways and that you can pick and choose -what you want to use. +Getting Help +------------ -An application on the other hand (such as a blog or a forum) is already "put -together" in a particular way, (usually) provides a graphical user interface -and most likely doesn't offer a great deal of integration with your own -application. +For general support, use `Stack Overflow `_. -Embrace the structure of the library and use the components it offers to your -advantage. Learning what the components do, rather than blindly copying and -pasting existing code will put you in a great position to build a powerful -application! +For bug reports and feature requests, create a new ticket in `GitHub +`_. diff --git a/vendor/swiftmailer/swiftmailer/doc/japanese.rst b/vendor/swiftmailer/swiftmailer/doc/japanese.rst index 34afa7b..5454821 100644 --- a/vendor/swiftmailer/swiftmailer/doc/japanese.rst +++ b/vendor/swiftmailer/swiftmailer/doc/japanese.rst @@ -3,11 +3,8 @@ Using Swift Mailer for Japanese Emails To send emails in Japanese, you need to tweak the default configuration. -After requiring the Swift Mailer autoloader (by including the -``swift_required.php`` file), call the ``Swift::init()`` method with the -following code:: - - require_once '/path/to/swift-mailer/lib/swift_required.php'; +Call the ``Swift::init()`` method with the following code as early as possible +in your code:: Swift::init(function () { Swift_DependencyContainer::getInstance() diff --git a/vendor/swiftmailer/swiftmailer/doc/messages.rst b/vendor/swiftmailer/swiftmailer/doc/messages.rst index b058b77..fac402c 100644 --- a/vendor/swiftmailer/swiftmailer/doc/messages.rst +++ b/vendor/swiftmailer/swiftmailer/doc/messages.rst @@ -2,45 +2,27 @@ Creating Messages ================= Creating messages in Swift Mailer is done by making use of the various MIME -entities provided with the library. Complex messages can be quickly created +entities provided with the library. Complex messages can be quickly created with very little effort. -Quick Reference for Creating a Message ---------------------------------------- +Quick Reference +--------------- You can think of creating a Message as being similar to the steps you perform -when you click the Compose button in your mail client. You give it a subject, -specify some recipients, add any attachments and write your message. - -To create a Message: - -* Call the ``newInstance()`` method of ``Swift_Message``. - -* Set your sender address (``From:``) with ``setFrom()`` or ``setSender()``. - -* Set a subject line with ``setSubject()``. - -* Set recipients with ``setTo()``, ``setCc()`` and/or ``setBcc()``. - -* Set a body with ``setBody()``. - -* Add attachments with ``attach()``. - -.. code-block:: php - - require_once 'lib/swift_required.php'; +when you click the Compose button in your mail client. You give it a subject, +specify some recipients, add any attachments and write your message:: // Create the message - $message = Swift_Message::newInstance() + $message = (new Swift_Message()) // Give the message a subject ->setSubject('Your subject') // Set the From address with an associative array - ->setFrom(array('john@doe.com' => 'John Doe')) + ->setFrom(['john@doe.com' => 'John Doe']) - // Set the To addresses with an associative array - ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name')) + // Set the To addresses with an associative array (setTo/setCc/setBcc) + ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) // Give it a body ->setBody('Here is the message itself') @@ -82,19 +64,18 @@ Encoders and different Header types to generate the entity. The Structure of a Message ~~~~~~~~~~~~~~~~~~~~~~~~~~ -Of all of the MIME entities, a message -- ``Swift_Message`` -is the largest and most complex. It has many properties that can be updated -and it can contain other MIME entities -- attachments for example -- -nested inside it. +Of all of the MIME entities, a message -- ``Swift_Message`` is the largest and +most complex. It has many properties that can be updated and it can contain +other MIME entities -- attachments for example -- nested inside it. -A Message has a lot of different Headers which are there to present -information about the message to the recipients' mail client. Most of these -headers will be familiar to the majority of users, but we'll list the basic -ones. Although it's possible to work directly with the Headers of a Message -(or other MIME entity), the standard Headers have accessor methods provided to -abstract away the complex details for you. For example, although the Date on a -message is written with a strict format, you only need to pass a UNIX -timestamp to ``setDate()``. +A Message has a lot of different Headers which are there to present information +about the message to the recipients' mail client. Most of these headers will be +familiar to the majority of users, but we'll list the basic ones. Although it's +possible to work directly with the Headers of a Message (or other MIME entity), +the standard Headers have accessor methods provided to abstract away the +complex details for you. For example, although the Date on a message is written +with a strict format, you only need to pass a DateTimeInterface instance to +``setDate()``. +-------------------------------+------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------+ | Header | Description | Accessors | @@ -129,28 +110,17 @@ Working with a Message Object Although there are a lot of available methods on a message object, you only need to make use of a small subset of them. Usually you'll use -``setSubject()``, ``setTo()`` and -``setFrom()`` before setting the body of your message with -``setBody()``. +``setSubject()``, ``setTo()`` and ``setFrom()`` before setting the body of your +message with ``setBody()``:: -Calling methods is simple. You just call them like functions, but using the -object operator "``->``" to do so. If you've created -a message object and called it ``$message`` then you'd set a -subject on it like so: - -.. code-block:: php - - require_once 'lib/swift_required.php'; - - $message = Swift_Message::newInstance(); + $message = new Swift_Message(); $message->setSubject('My subject'); -All MIME entities (including a message) have a ``toString()`` -method that you can call if you want to take a look at what is going to be -sent. For example, if you ``echo -$message->toString();`` you would see something like this: +All MIME entities (including a message) have a ``toString()`` method that you +can call if you want to take a look at what is going to be sent. For example, +if you ``echo $message->toString();`` you would see something like this: -.. code-block:: bash +.. code-block:: text Message-ID: <1230173678.4952f5eeb1432@swift.generated> Date: Thu, 25 Dec 2008 13:54:38 +1100 @@ -177,17 +147,10 @@ Setting the Subject Line ~~~~~~~~~~~~~~~~~~~~~~~~ The subject line, displayed in the recipients' mail client can be set with the -``setSubject()`` method, or as a parameter to ``Swift_Message::newInstance()``. - -To set the subject of your Message: - -* Call the ``setSubject()`` method of the Message, or specify it at the time - you create the message. - - .. code-block:: php +``setSubject()`` method, or as a parameter to ``new Swift_Message()``:: // Pass it as a parameter when you create the message - $message = Swift_Message::newInstance('My amazing subject'); + $message = new Swift_Message('My amazing subject'); // Or set it after like this $message->setSubject('My amazing subject'); @@ -195,36 +158,26 @@ To set the subject of your Message: Setting the Body Content ~~~~~~~~~~~~~~~~~~~~~~~~ -The body of the message -- seen when the user opens the message -- -is specified by calling the ``setBody()`` method. If an alternative body is to -be included ``addPart()`` can be used. +The body of the message -- seen when the user opens the message -- is specified +by calling the ``setBody()`` method. If an alternative body is to be included, +``addPart()`` can be used. The body of a message is the main part that is read by the user. Often people -want to send a message in HTML format (``text/html``), other -times people want to send in plain text (``text/plain``), or -sometimes people want to send both versions and allow the recipient to choose -how they view the message. +want to send a message in HTML format (``text/html``), other times people want +to send in plain text (``text/plain``), or sometimes people want to send both +versions and allow the recipient to choose how they view the message. As a rule of thumb, if you're going to send a HTML email, always include a plain-text equivalent of the same content so that users who prefer to read plain text can do so. -To set the body of your Message: - -* Call the ``setBody()`` method of the Message, or specify it at the time you - create the message. - -* Add any alternative bodies with ``addPart()``. - If the recipient's mail client offers preferences for displaying text vs. HTML -then the mail client will present that part to the user where available. In +then the mail client will present that part to the user where available. In other cases the mail client will display the "best" part it can - usually HTML -if you've included HTML. - -.. code-block:: php +if you've included HTML:: // Pass it as a parameter when you create the message - $message = Swift_Message::newInstance('Subject here', 'My amazing body'); + $message = new Swift_Message('Subject here', 'My amazing body'); // Or set it after like this $message->setBody('My amazing body', 'text/html'); @@ -235,25 +188,20 @@ if you've included HTML. Attaching Files --------------- -Attachments are downloadable parts of a message and can be added by calling -the ``attach()`` method on the message. You can add attachments that exist on -disk, or you can create attachments on-the-fly. - -Attachments are actually an interesting area of Swift Mailer and something -that could put a lot of power at your fingertips if you grasp the concept -behind the way a message is held together. +Attachments are downloadable parts of a message and can be added by calling the +``attach()`` method on the message. You can add attachments that exist on disk, +or you can create attachments on-the-fly. Although we refer to files sent over e-mails as "attachments" -- because they're attached to the message -- lots of other parts of the message are actually "attached" even if we don't refer to these parts as attachments. -File attachments are created by the ``Swift_Attachment`` class -and then attached to the message via the ``attach()`` method on -it. For all of the "every day" MIME types such as all image formats, word -documents, PDFs and spreadsheets you don't need to explicitly set the -content-type of the attachment, though it would do no harm to do so. For less -common formats you should set the content-type -- which we'll cover in a -moment. +File attachments are created by the ``Swift_Attachment`` class and then +attached to the message via the ``attach()`` method on it. For all of the +"every day" MIME types such as all image formats, word documents, PDFs and +spreadsheets you don't need to explicitly set the content-type of the +attachment, though it would do no harm to do so. For less common formats you +should set the content-type -- which we'll cover in a moment. Attaching Existing Files ~~~~~~~~~~~~~~~~~~~~~~~~ @@ -265,16 +213,8 @@ You can attach files that exist locally, or if your PHP installation has ``allow_url_fopen`` turned on you can attach files from other websites. -To attach an existing file: - -* Create an attachment with ``Swift_Attachment::fromPath()``. - -* Add the attachment to the message with ``attach()``. - The attachment will be presented to the recipient as a downloadable file with -the same filename as the one you attached. - -.. code-block:: php +the same filename as the one you attached:: // Create the attachment // * Note that you can technically leave the content-type parameter out @@ -296,14 +236,8 @@ Usually you don't need to explicitly set the filename of an attachment because the name of the attached file will be used by default, but if you want to set the filename you use the ``setFilename()`` method of the Attachment. -To change the filename of an attachment: - -* Call its ``setFilename()`` method. - The attachment will be attached in the normal way, but meta-data sent inside -the email will rename the file to something else. - -.. code-block:: php +the email will rename the file to something else:: // Create the attachment and call its setFilename() method $attachment = Swift_Attachment::fromPath('/path/to/image.jpg') @@ -319,43 +253,32 @@ Attaching Dynamic Content Files that are generated at runtime, such as PDF documents or images created via GD can be attached directly to a message without writing them out to disk. -Use the standard ``Swift_Attachment::newInstance()`` method. - -To attach dynamically created content: - -* Create your content as you normally would. - -* Create an attachment with ``Swift_Attachment::newInstance()``, specifying - the source data of your content along with a name and the content-type. - -* Add the attachment to the message with ``attach()``. +Use ``Swift_Attachment`` directly. The attachment will be presented to the recipient as a downloadable file -with the filename and content-type you specify. +with the filename and content-type you specify:: -.. note:: + // Create your file contents in the normal way, but don't write them to disk + $data = create_my_pdf_data(); - If you would usually write the file to disk anyway you should just attach - it with ``Swift_Attachment::fromPath()`` since this will use less memory: - - .. code-block:: php + // Create the attachment with your data + $attachment = new Swift_Attachment($data, 'my-file.pdf', 'application/pdf'); - // Create your file contents in the normal way, but don't write them to disk - $data = create_my_pdf_data(); + // Attach it to the message + $message->attach($attachment); - // Create the attachment with your data - $attachment = Swift_Attachment::newInstance($data, 'my-file.pdf', 'application/pdf'); - // Attach it to the message - $message->attach($attachment); + // You can alternatively use method chaining to build the attachment + $attachment = (new Swift_Attachment()) + ->setFilename('my-file.pdf') + ->setContentType('application/pdf') + ->setBody($data) + ; +.. note:: - // You can alternatively use method chaining to build the attachment - $attachment = Swift_Attachment::newInstance() - ->setFilename('my-file.pdf') - ->setContentType('application/pdf') - ->setBody($data) - ; + If you would usually write the file to disk anyway you should just attach + it with ``Swift_Attachment::fromPath()`` since this will use less memory. Changing the Disposition ~~~~~~~~~~~~~~~~~~~~~~~~ @@ -364,35 +287,29 @@ Attachments just appear as files that can be saved to the Desktop if desired. You can make attachment appear inline where possible by using the ``setDisposition()`` method of an attachment. -To make an attachment appear inline: +The attachment will be displayed within the email viewing window if the mail +client knows how to display it:: + + // Create the attachment and call its setDisposition() method + $attachment = Swift_Attachment::fromPath('/path/to/image.jpg') + ->setDisposition('inline'); -* Call its ``setDisposition()`` method. -The attachment will be displayed within the email viewing window if the mail -client knows how to display it. + // Because there's a fluid interface, you can do this in one statement + $message->attach( + Swift_Attachment::fromPath('/path/to/image.jpg')->setDisposition('inline') + ); .. note:: If you try to create an inline attachment for a non-displayable file type such as a ZIP file, the mail client should just present the attachment as - normal: - - .. code-block:: php - - // Create the attachment and call its setDisposition() method - $attachment = Swift_Attachment::fromPath('/path/to/image.jpg') - ->setDisposition('inline'); - - - // Because there's a fluid interface, you can do this in one statement - $message->attach( - Swift_Attachment::fromPath('/path/to/image.jpg')->setDisposition('inline') - ); + normal. Embedding Inline Media Files ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Often people want to include an image or other content inline with a HTML +Often, people want to include an image or other content inline with a HTML message. It's easy to do this with HTML linking to remote resources, but this approach is usually blocked by mail clients. Swift Mailer allows you to embed your media directly into the message. @@ -427,58 +344,47 @@ message with just one line of code, using ``Swift_EmbeddedFile::fromPath()``. You can embed files that exist locally, or if your PHP installation has ``allow_url_fopen`` turned on you can embed files from other websites. -To embed an existing file: - -* Create a message object with ``Swift_Message::newInstance()``. +The file will be displayed with the message inline with the HTML wherever its ID +is used as a ``src`` attribute:: -* Set the body as HTML, and embed a file at the correct point in the message with ``embed()``. + // Create the message + $message = new Swift_Message('My subject'); + + // Set the body + $message->setBody( + '' . + ' ' . + ' Here is an image Image' . + ' Rest of message' . + ' ' . + '', + 'text/html' // Mark the content-type as HTML + ); -The file will be displayed with the message inline with the HTML wherever its ID -is used as a ``src`` attribute. + // You can embed files from a URL if allow_url_fopen is on in php.ini + $message->setBody( + '' . + ' ' . + ' Here is an image Image' . + ' Rest of message' . + ' ' . + '', + 'text/html' + ); .. note:: - ``Swift_Image`` and ``Swift_EmbeddedFile`` are just aliases of one - another. ``Swift_Image`` exists for semantic purposes. + ``Swift_Image`` and ``Swift_EmbeddedFile`` are just aliases of one another. + ``Swift_Image`` exists for semantic purposes. .. note:: You can embed files in two stages if you prefer. Just capture the return - value of ``embed()`` in a variable and use that as the ``src`` attribute. - - .. code-block:: php - - // Create the message - $message = Swift_Message::newInstance('My subject'); - - // Set the body - $message->setBody( - '' . - ' ' . - ' ' . - ' Here is an image Image' . - ' Rest of message' . - ' ' . - '', - 'text/html' // Mark the content-type as HTML - ); - - // You can embed files from a URL if allow_url_fopen is on in php.ini - $message->setBody( - '' . - ' ' . - ' ' . - ' Here is an image Image' . - ' Rest of message' . - ' ' . - '', - 'text/html' - ); - + value of ``embed()`` in a variable and use that as the ``src`` attribute:: // If placing the embed() code inline becomes cumbersome // it's easy to do this in two steps @@ -486,7 +392,6 @@ is used as a ``src`` attribute. $message->setBody( '' . - ' ' . ' ' . ' Here is an image Image' . ' Rest of message' . @@ -500,58 +405,46 @@ Embedding Dynamic Content Images that are generated at runtime, such as images created via GD can be embedded directly to a message without writing them out to disk. Use the -standard ``Swift_Image::newInstance()`` method. +standard ``new Swift_Image()`` method. -To embed dynamically created content: - -* Create a message object with ``Swift_Message::newInstance()``. +The file will be displayed with the message inline with the HTML wherever its ID +is used as a ``src`` attribute:: -* Set the body as HTML, and embed a file at the correct point in the message - with ``embed()``. You will need to specify a filename and a content-type. + // Create your file contents in the normal way, but don't write them to disk + $img_data = create_my_image_data(); -The file will be displayed with the message inline with the HTML wherever its ID -is used as a ``src`` attribute. + // Create the message + $message = new Swift_Message('My subject'); + + // Set the body + $message->setBody( + '' . + ' ' . + ' Here is an image Image' . + ' Rest of message' . + ' ' . + '', + 'text/html' // Mark the content-type as HTML + ); .. note:: - ``Swift_Image`` and ``Swift_EmbeddedFile`` are just aliases of one - another. ``Swift_Image`` exists for semantic purposes. + ``Swift_Image`` and ``Swift_EmbeddedFile`` are just aliases of one another. + ``Swift_Image`` exists for semantic purposes. .. note:: You can embed files in two stages if you prefer. Just capture the return - value of ``embed()`` in a variable and use that as the ``src`` attribute. - - .. code-block:: php - - // Create your file contents in the normal way, but don't write them to disk - $img_data = create_my_image_data(); - - // Create the message - $message = Swift_Message::newInstance('My subject'); - - // Set the body - $message->setBody( - '' . - ' ' . - ' ' . - ' Here is an image Image' . - ' Rest of message' . - ' ' . - '', - 'text/html' // Mark the content-type as HTML - ); - + value of ``embed()`` in a variable and use that as the ``src`` attribute:: // If placing the embed() code inline becomes cumbersome // it's easy to do this in two steps - $cid = $message->embed(Swift_Image::newInstance($img_data, 'image.jpg', 'image/jpeg')); + $cid = $message->embed(new Swift_Image($img_data, 'image.jpg', 'image/jpeg')); $message->setBody( '' . - ' ' . ' ' . ' Here is an image Image' . ' Rest of message' . @@ -575,9 +468,9 @@ Message recipients are one of three types: * ``Bcc:`` recipients -- hidden from other recipients (optional) -Each type can contain one, or several addresses. It's possible to list only -the addresses of the recipients, or you can personalize the address by -providing the real name of the recipient. +Each type can contain one, or several addresses. It's possible to list only the +addresses of the recipients, or you can personalize the address by providing +the real name of the recipient. Make sure to add only valid email addresses as recipients. If you try to add an invalid email address with ``setTo()``, ``setCc()`` or ``setBcc()``, Swift @@ -585,79 +478,74 @@ Mailer will throw a ``Swift_RfcComplianceException``. If you add recipients automatically based on a data source that may contain invalid email addresses, you can prevent possible exceptions by validating the -addresses using ``Swift_Validate::email($email)`` and only adding addresses -that validate. Another way would be to wrap your ``setTo()``, ``setCc()`` and +addresses using:: + use Egulias\EmailValidator\EmailValidator; + use Egulias\EmailValidator\Validation\RFCValidation; + + $validator = new EmailValidator(); + $validator->isValid("example@example.com", new RFCValidation()); //true +and only adding addresses that validate. Another way would be to wrap your ``setTo()``, ``setCc()`` and ``setBcc()`` calls in a try-catch block and handle the ``Swift_RfcComplianceException`` in the catch block. .. sidebar:: Syntax for Addresses If you only wish to refer to a single email address (for example your - ``From:`` address) then you can just use a string. - - .. code-block:: php + ``From:`` address) then you can just use a string:: $message->setFrom('some@address.tld'); - If you want to include a name then you must use an associative array. - - .. code-block:: php + If you want to include a name then you must use an associative array:: - $message->setFrom(array('some@address.tld' => 'The Name')); + $message->setFrom(['some@address.tld' => 'The Name']); - If you want to include multiple addresses then you must use an array. + If you want to include multiple addresses then you must use an array:: - .. code-block:: php - - $message->setTo(array('some@address.tld', 'other@address.tld')); + $message->setTo(['some@address.tld', 'other@address.tld']); You can mix personalized (addresses with a name) and non-personalized addresses in the same list by mixing the use of associative and - non-associative array syntax. - - .. code-block:: php + non-associative array syntax:: - $message->setTo(array( + $message->setTo([ 'recipient-with-name@example.org' => 'Recipient Name One', 'no-name@example.org', // Note that this is not a key-value pair 'named-recipient@example.org' => 'Recipient Name Two' - )); + ]); Setting ``To:`` Recipients ~~~~~~~~~~~~~~~~~~~~~~~~~~ -``To:`` recipients are required in a message and are set with the -``setTo()`` or ``addTo()`` methods of the message. +``To:`` recipients are required in a message and are set with the ``setTo()`` +or ``addTo()`` methods of the message. -To set ``To:`` recipients, create the message object using either -``new Swift_Message( ... )`` or ``Swift_Message::newInstance( ... )``, -then call the ``setTo()`` method with a complete array of addresses, or use the -``addTo()`` method to iteratively add recipients. +To set ``To:`` recipients, create the message object using either ``new +Swift_Message( ... )`` or ``new Swift_Message( ... )``, then call the +``setTo()`` method with a complete array of addresses, or use the ``addTo()`` +method to iteratively add recipients. The ``setTo()`` method accepts input in various formats as described earlier in this chapter. The ``addTo()`` method takes either one or two parameters. The first being the email address and the second optional parameter being the name of the recipient. -``To:`` recipients are visible in the message headers and will be -seen by the other recipients. +``To:`` recipients are visible in the message headers and will be seen by the +other recipients:: + + // Using setTo() to set all recipients in one go + $message->setTo([ + 'person1@example.org', + 'person2@otherdomain.org' => 'Person 2 Name', + 'person3@example.org', + 'person4@example.org', + 'person5@example.org' => 'Person 5 Name' + ]); .. note:: Multiple calls to ``setTo()`` will not add new recipients -- each call overrides the previous calls. If you want to iteratively add - recipients, use the ``addTo()`` method. - - .. code-block:: php - - // Using setTo() to set all recipients in one go - $message->setTo(array( - 'person1@example.org', - 'person2@otherdomain.org' => 'Person 2 Name', - 'person3@example.org', - 'person4@example.org', - 'person5@example.org' => 'Person 5 Name' - )); + recipients, use the ``addTo()`` method:: // Using addTo() to add recipients iteratively $message->addTo('person1@example.org'); @@ -669,35 +557,33 @@ Setting ``Cc:`` Recipients ``Cc:`` recipients are set with the ``setCc()`` or ``addCc()`` methods of the message. -To set ``Cc:`` recipients, create the message object using either -``new Swift_Message( ... )`` or ``Swift_Message::newInstance( ... )``, then call -the ``setCc()`` method with a complete array of addresses, or use the -``addCc()`` method to iteratively add recipients. +To set ``Cc:`` recipients, create the message object using either ``new +Swift_Message( ... )`` or ``new Swift_Message( ... )``, then call the +``setCc()`` method with a complete array of addresses, or use the ``addCc()`` +method to iteratively add recipients. The ``setCc()`` method accepts input in various formats as described earlier in this chapter. The ``addCc()`` method takes either one or two parameters. The first being the email address and the second optional parameter being the name of the recipient. -``Cc:`` recipients are visible in the message headers and will be -seen by the other recipients. +``Cc:`` recipients are visible in the message headers and will be seen by the +other recipients:: -.. note:: - - Multiple calls to ``setCc()`` will not add new recipients -- each - call overrides the previous calls. If you want to iteratively add Cc: - recipients, use the ``addCc()`` method. + // Using setTo() to set all recipients in one go + $message->setTo([ + 'person1@example.org', + 'person2@otherdomain.org' => 'Person 2 Name', + 'person3@example.org', + 'person4@example.org', + 'person5@example.org' => 'Person 5 Name' + ]); - .. code-block:: php +.. note:: - // Using setCc() to set all recipients in one go - $message->setCc(array( - 'person1@example.org', - 'person2@otherdomain.org' => 'Person 2 Name', - 'person3@example.org', - 'person4@example.org', - 'person5@example.org' => 'Person 5 Name' - )); + Multiple calls to ``setCc()`` will not add new recipients -- each call + overrides the previous calls. If you want to iteratively add Cc: + recipients, use the ``addCc()`` method:: // Using addCc() to add recipients iteratively $message->addCc('person1@example.org'); @@ -710,45 +596,63 @@ Setting ``Bcc:`` Recipients it, and are set with the ``setBcc()`` or ``addBcc()`` methods of the message. To set ``Bcc:`` recipients, create the message object using either ``new -Swift_Message( ... )`` or ``Swift_Message::newInstance( ... )``, then call the -``setBcc()`` method with a complete array of addresses, or use -the ``addBcc()`` method to iteratively add recipients. +Swift_Message( ... )`` or ``new Swift_Message( ... )``, then call the +``setBcc()`` method with a complete array of addresses, or use the ``addBcc()`` +method to iteratively add recipients. -The ``setBcc()`` method accepts input in various formats as described earlier in -this chapter. The ``addBcc()`` method takes either one or two parameters. The -first being the email address and the second optional parameter being the name -of the recipient. +The ``setBcc()`` method accepts input in various formats as described earlier +in this chapter. The ``addBcc()`` method takes either one or two parameters. +The first being the email address and the second optional parameter being the +name of the recipient. Only the individual ``Bcc:`` recipient will see their address in the message -headers. Other recipients (including other ``Bcc:`` recipients) will not see the -address. +headers. Other recipients (including other ``Bcc:`` recipients) will not see +the address:: + + // Using setBcc() to set all recipients in one go + $message->setBcc([ + 'person1@example.org', + 'person2@otherdomain.org' => 'Person 2 Name', + 'person3@example.org', + 'person4@example.org', + 'person5@example.org' => 'Person 5 Name' + ]); .. note:: - Multiple calls to ``setBcc()`` will not add new recipients -- each - call overrides the previous calls. If you want to iteratively add Bcc: - recipients, use the ``addBcc()`` method. - - .. code-block:: php - - // Using setBcc() to set all recipients in one go - $message->setBcc(array( - 'person1@example.org', - 'person2@otherdomain.org' => 'Person 2 Name', - 'person3@example.org', - 'person4@example.org', - 'person5@example.org' => 'Person 5 Name' - )); + Multiple calls to ``setBcc()`` will not add new recipients -- each call + overrides the previous calls. If you want to iteratively add Bcc: + recipients, use the ``addBcc()`` method:: // Using addBcc() to add recipients iteratively $message->addBcc('person1@example.org'); $message->addBcc('person2@example.org', 'Person 2 Name'); +.. sidebar:: Internationalized Email Addresses + + Traditionally only ASCII characters have been allowed in email addresses. + With the introduction of internationalized domain names (IDNs), non-ASCII + characters may appear in the domain name. By default, Swiftmailer encodes + such domain names in Punycode (e.g. xn--xample-ova.invalid). This is + compatible with all mail servers. + + RFC 6531 introduced an SMTP extension, SMTPUTF8, that allows non-ASCII + characters in email addresses on both sides of the @ sign. To send to such + addresses, your outbound SMTP server must support the SMTPUTF8 extension. + You should use the ``Swift_AddressEncoder_Utf8AddressEncoder`` address + encoder and enable the ``Swift_Transport_Esmtp_SmtpUtf8Handler`` SMTP + extension handler:: + + $smtpUtf8 = new Swift_Transport_Esmtp_SmtpUtf8Handler(); + $transport->setExtensionHandlers([$smtpUtf8]); + $utf8Encoder = new Swift_AddressEncoder_Utf8AddressEncoder(); + $transport->setAddressEncoder($utf8Encoder); + Specifying Sender Details ------------------------- -An email must include information about who sent it. Usually this is managed -by the ``From:`` address, however there are other options. +An email must include information about who sent it. Usually this is managed by +the ``From:`` address, however there are other options. The sender information is contained in three possible places: @@ -772,37 +676,34 @@ Setting the ``From:`` Address ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A ``From:`` address is required and is set with the ``setFrom()`` method of the -message. ``From:`` addresses specify who actually wrote the email, and usually who sent it. +message. ``From:`` addresses specify who actually wrote the email, and usually +who sent it. -What most people probably don't realise is that you can have more than one +What most people probably don't realize is that you can have more than one ``From:`` address if more than one person wrote the email -- for example if an email was put together by a committee. -To set the ``From:`` address(es): - -* Call the ``setFrom()`` method on the Message. - -The ``From:`` address(es) are visible in the message headers and -will be seen by the recipients. +The ``From:`` address(es) are visible in the message headers and will be seen +by the recipients. .. note:: If you set multiple ``From:`` addresses then you absolutely must set a ``Sender:`` address to indicate who physically sent the message. - .. code-block:: php +:: - // Set a single From: address - $message->setFrom('your@address.tld'); + // Set a single From: address + $message->setFrom('your@address.tld'); - // Set a From: address including a name - $message->setFrom(array('your@address.tld' => 'Your Name')); + // Set a From: address including a name + $message->setFrom(['your@address.tld' => 'Your Name']); - // Set multiple From: addresses if multiple people wrote the email - $message->setFrom(array( - 'person1@example.org' => 'Sender One', - 'person2@example.org' => 'Sender Two' - )); + // Set multiple From: addresses if multiple people wrote the email + $message->setFrom([ + 'person1@example.org' => 'Sender One', + 'person2@example.org' => 'Sender Two' + ]); Setting the ``Sender:`` Address ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -810,10 +711,6 @@ Setting the ``Sender:`` Address A ``Sender:`` address specifies who sent the message and is set with the ``setSender()`` method of the message. -To set the ``Sender:`` address: - -* Call the ``setSender()`` method on the Message. - The ``Sender:`` address is visible in the message headers and will be seen by the recipients. @@ -825,32 +722,22 @@ This address will be used as the ``Return-Path:`` unless otherwise specified. ``Sender:`` address to indicate who physically sent the message. You must not set more than one sender address on a message because it's not -possible for more than one person to send a single message. - -.. code-block:: php +possible for more than one person to send a single message:: $message->setSender('your@address.tld'); Setting the ``Return-Path:`` (Bounce) Address ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The ``Return-Path:`` address specifies where bounce notifications should -be sent and is set with the ``setReturnPath()`` method of the message. - -You can only have one ``Return-Path:`` and it must not include -a personal name. - -To set the ``Return-Path:`` address: - -* Call the ``setReturnPath()`` method on the Message. +The ``Return-Path:`` address specifies where bounce notifications should be +sent and is set with the ``setReturnPath()`` method of the message. -Bounce notifications will be sent to this address. +You can only have one ``Return-Path:`` and it must not include a personal name. -.. code-block:: php +Bounce notifications will be sent to this address:: $message->setReturnPath('bounces@address.tld'); - Signed/Encrypted Message ------------------------ @@ -862,73 +749,72 @@ S/MIME S/MIME can sign and/or encrypt a message using the OpenSSL extension. -When signing a message, the signer creates a signature of the entire content of the message (including attachments). +When signing a message, the signer creates a signature of the entire content of +the message (including attachments). -The certificate and private key must be PEM encoded, and can be either created using for example OpenSSL or -obtained at an official Certificate Authority (CA). +The certificate and private key must be PEM encoded, and can be either created +using for example OpenSSL or obtained at an official Certificate Authority (CA). -**The recipient must have the CA certificate in the list of trusted issuers in order to verify the signature.** +**The recipient must have the CA certificate in the list of trusted issuers in +order to verify the signature.** **Make sure the certificate supports emailProtection.** -When using OpenSSL this can done by the including the *-addtrust emailProtection* parameter when creating the certificate. - -.. code-block:: php +When using OpenSSL this can done by the including the *-addtrust +emailProtection* parameter when creating the certificate:: - $message = Swift_Message::newInstance(); + $message = new Swift_Message(); - $smimeSigner = Swift_Signers_SMimeSigner::newInstance(); + $smimeSigner = new Swift_Signers_SMimeSigner(); $smimeSigner->setSignCertificate('/path/to/certificate.pem', '/path/to/private-key.pem'); $message->attachSigner($smimeSigner); -When the private key is secured using a passphrase use the following instead. - -.. code-block:: php +When the private key is secured using a passphrase use the following instead:: - $message = Swift_Message::newInstance(); + $message = new Swift_Message(); - $smimeSigner = Swift_Signers_SMimeSigner::newInstance(); - $smimeSigner->setSignCertificate('/path/to/certificate.pem', array('/path/to/private-key.pem', 'passphrase')); + $smimeSigner = new Swift_Signers_SMimeSigner(); + $smimeSigner->setSignCertificate('/path/to/certificate.pem', ['/path/to/private-key.pem', 'passphrase']); $message->attachSigner($smimeSigner); -By default the signature is added as attachment, -making the message still readable for mailing agents not supporting signed messages. +By default the signature is added as attachment, making the message still +readable for mailing agents not supporting signed messages. -Storing the message as binary is also possible but not recommended. - -.. code-block:: php +Storing the message as binary is also possible but not recommended:: $smimeSigner->setSignCertificate('/path/to/certificate.pem', '/path/to/private-key.pem', PKCS7_BINARY); -When encrypting the message (also known as enveloping), the entire message (including attachments) -is encrypted using a certificate, and the recipient can then decrypt the message using corresponding private key. - -Encrypting ensures nobody can read the contents of the message without the private key. +When encrypting the message (also known as enveloping), the entire message +(including attachments) is encrypted using a certificate, and the recipient can +then decrypt the message using corresponding private key. -Normally the recipient provides a certificate for encrypting and keeping the decryption key private. +Encrypting ensures nobody can read the contents of the message without the +private key. -Using both signing and encrypting is also possible. +Normally the recipient provides a certificate for encrypting and keeping the +decryption key private. -.. code-block:: php +Using both signing and encrypting is also possible:: - $message = Swift_Message::newInstance(); + $message = new Swift_Message(); - $smimeSigner = Swift_Signers_SMimeSigner::newInstance(); + $smimeSigner = new Swift_Signers_SMimeSigner(); $smimeSigner->setSignCertificate('/path/to/sign-certificate.pem', '/path/to/private-key.pem'); $smimeSigner->setEncryptCertificate('/path/to/encrypt-certificate.pem'); $message->attachSigner($smimeSigner); -The used encryption cipher can be set as the second parameter of setEncryptCertificate() +The used encryption cipher can be set as the second parameter of +setEncryptCertificate() -See http://php.net/manual/openssl.ciphers for a list of supported ciphers. +See https://secure.php.net/manual/openssl.ciphers for a list of supported ciphers. -By default the message is first signed and then encrypted, this can be changed by adding. - -.. code-block:: php +By default the message is first signed and then encrypted, this can be changed +by adding:: $smimeSigner->setSignThenEncrypt(false); -**Changing this is not recommended as most mail agents don't support this none-standard way.** +**Changing this is not recommended as most mail agents don't support this +none-standard way.** Only when having trouble with sign then encrypt method, this should be changed. @@ -937,14 +823,12 @@ Requesting a Read Receipt It is possible to request a read-receipt to be sent to an address when the email is opened. To request a read receipt set the address with -``setReadReceiptTo()``. - -To request a read receipt: +``setReadReceiptTo()``: -* Set the address you want the receipt to be sent to with the - ``setReadReceiptTo()`` method on the Message. + $message->setReadReceiptTo('your@address.tld'); -When the email is opened, if the mail client supports it a notification will be sent to this address. +When the email is opened, if the mail client supports it a notification will be +sent to this address. .. note:: @@ -952,14 +836,10 @@ When the email is opened, if the mail client supports it a notification will be clients auto-disable them. Those clients that will send a read receipt will make the user aware that one has been requested. - .. code-block:: php - - $message->setReadReceiptTo('your@address.tld'); - Setting the Character Set ------------------------- -The character set of the message (and it's MIME parts) is set with the +The character set of the message (and its MIME parts) is set with the ``setCharset()`` method. You can also change the global default of UTF-8 by working with the ``Swift_Preferences`` class. @@ -982,15 +862,13 @@ To set the character set of your Message: * Change the global UTF-8 setting by calling ``Swift_Preferences::setCharset()``; or -* Call the ``setCharset()`` method on the message or the MIME part. - - .. code-block:: php +* Call the ``setCharset()`` method on the message or the MIME part:: // Approach 1: Change the global setting (suggested) Swift_Preferences::getInstance()->setCharset('iso-8859-2'); // Approach 2: Call the setCharset() method of the message - $message = Swift_Message::newInstance() + $message = (new Swift_Message()) ->setCharset('iso-8859-2'); // Approach 3: Specify the charset when setting the body @@ -999,19 +877,42 @@ To set the character set of your Message: // Approach 4: Specify the charset for each part added $message->addPart('My part', 'text/plain', 'iso-8859-2'); +Setting the Encoding +-------------------- + +The body of each MIME part needs to be encoded. Binary attachments are encoded +in base64 using the ``Swift_Mime_ContentEncoder_Base64ContentEncoder``. Text +parts are traditionally encoded in quoted-printable using +``Swift_Mime_ContentEncoder_QpContentEncoder`` or +``Swift_Mime_ContentEncoder_NativeQpContentEncoder``. + +The encoder of the message or MIME part is set with the ``setEncoder()`` method. + +Quoted-printable is the safe choice, because it converts 8-bit text as 7-bit. +Most modern SMTP servers support 8-bit text. This is advertised via the 8BITMIME +SMTP extension. If your outbound SMTP server supports this SMTP extension, and +it supports downgrading the message (e.g converting to quoted-printable on the +fly) when delivering to a downstream server that does not support the extension, +you may wish to use ``Swift_Mime_ContentEncoder_PlainContentEncoder`` in +``8bit`` mode instead. This has the advantage that the source data is slightly +more readable and compact, especially for non-Western languages. + + $eightBitMime = new Swift_Transport_Esmtp_EightBitMimeHandler(); + $transport->setExtensionHandlers([$eightBitMime]); + $plainEncoder = new Swift_Mime_ContentEncoder_PlainContentEncoder('8bit'); + $message->setEncoder($plainEncoder); + Setting the Line Length ----------------------- -The length of lines in a message can be changed by using the ``setMaxLineLength()`` method on the message. It should be kept to less than -1000 characters. +The length of lines in a message can be changed by using the +``setMaxLineLength()`` method on the message:: + + $message->setMaxLineLength(1000); Swift Mailer defaults to using 78 characters per line in a message. This is done for historical reasons and so that the message can be easily viewed in -plain-text terminals. - -To change the maximum length of lines in your Message: - -* Call the ``setMaxLineLength()`` method on the Message. +plain-text terminals Lines that are longer than the line length specified will be wrapped between words. @@ -1023,36 +924,27 @@ words. as truncating parts of your message when it is transported between SMTP servers. - .. code-block:: php - - $message->setMaxLineLength(1000); - Setting the Message Priority ---------------------------- You can change the priority of the message with ``setPriority()``. Setting the priority will not change the way your email is sent -- it is purely an -indicative setting for the recipient. +indicative setting for the recipient:: + + // Indicate "High" priority + $message->setPriority(2); The priority of a message is an indication to the recipient what significance it has. Swift Mailer allows you to set the priority by calling the ``setPriority`` method. This method takes an integer value between 1 and 5: -* `Swift_Mime_SimpleMessage::PRIORITY_HIGHEST`: 1 -* `Swift_Mime_SimpleMessage::PRIORITY_HIGH`: 2 -* `Swift_Mime_SimpleMessage::PRIORITY_NORMAL`: 3 -* `Swift_Mime_SimpleMessage::PRIORITY_LOW`: 4 -* `Swift_Mime_SimpleMessage::PRIORITY_LOWEST`: 5 - -To set the message priority: +* ``Swift_Mime_SimpleMessage::PRIORITY_HIGHEST``: 1 +* ``Swift_Mime_SimpleMessage::PRIORITY_HIGH``: 2 +* ``Swift_Mime_SimpleMessage::PRIORITY_NORMAL``: 3 +* ``Swift_Mime_SimpleMessage::PRIORITY_LOW``: 4 +* ``Swift_Mime_SimpleMessage::PRIORITY_LOWEST``: 5 -* Set the priority as an integer between 1 and 5 with the ``setPriority()`` - method on the Message. - -.. code-block:: php - - // Indicate "High" priority - $message->setPriority(2); +:: // Or use the constant to be more explicit $message->setPriority(Swift_Mime_SimpleMessage::PRIORITY_HIGH); diff --git a/vendor/swiftmailer/swiftmailer/doc/overview.rst b/vendor/swiftmailer/swiftmailer/doc/overview.rst deleted file mode 100644 index ebfe008..0000000 --- a/vendor/swiftmailer/swiftmailer/doc/overview.rst +++ /dev/null @@ -1,159 +0,0 @@ -Library Overview -================ - -Most features (and more) of your every day mail client software are provided -by Swift Mailer, using object-oriented PHP code as the interface. - -In this chapter we will take a short tour of the various components, which put -together form the Swift Mailer library as a whole. You will learn key -terminology used throughout the rest of this book and you will gain a little -understanding of the classes you will work with as you integrate Swift Mailer -into your application. - -This chapter is intended to prepare you for the information contained in the -subsequent chapters of this book. You may choose to skip this chapter if you -are fairly technically minded, though it is likely to save you some time in -the long run if you at least read between the lines here. - -System Requirements -------------------- - -The basic requirements to operate Swift Mailer are extremely minimal and -easily achieved. Historically, Swift Mailer has supported both PHP 4 and PHP 5 -by following a parallel development workflow. Now in it's fourth major -version, and Swift Mailer operates on servers running PHP 5.3.3 or higher. - -The library aims to work with as many PHP 5 projects as possible: - -* PHP 5.3.3 or higher, with the SPL extension (standard) - -* Limited network access to connect to remote SMTP servers - -* 8 MB or more memory limit (Swift Mailer uses around 2 MB) - -Component Breakdown -------------------- - -Swift Mailer is made up of many classes. Each of these classes can be grouped -into a general "component" group which describes the task it is designed to -perform. - -We'll take a brief look at the components which form Swift Mailer in this -section of the book. - -The Mailer -~~~~~~~~~~ - -The mailer class, ``Swift_Mailer`` is the central class in the library where -all of the other components meet one another. ``Swift_Mailer`` acts as a sort -of message dispatcher, communicating with the underlying Transport to deliver -your Message to all intended recipients. - -If you were to dig around in the source code for Swift Mailer you'd notice -that ``Swift_Mailer`` itself is pretty bare. It delegates to other objects for -most tasks and in theory, if you knew the internals of Swift Mailer well you -could by-pass this class entirely. We wouldn't advise doing such a thing -however -- there are reasons this class exists: - -* for consistency, regardless of the Transport used - -* to provide abstraction from the internals in the event internal API changes - are made - -* to provide convenience wrappers around aspects of the internal API - -An instance of ``Swift_Mailer`` is created by the developer before sending any -Messages. - -Transports -~~~~~~~~~~ - -Transports are the classes in Swift Mailer that are responsible for -communicating with a service in order to deliver a Message. There are several -types of Transport in Swift Mailer, all of which implement the Swift_Transport -interface and offer underlying start(), stop() and send() methods. - -Typically you will not need to know how a Transport works under-the-surface, -you will only need to know how to create an instance of one, and which one to -use for your environment. - -+---------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+ -| Class | Features | Pros/cons | -+=================================+=============================================================================================+===============================================================================================================================================+ -| ``Swift_SmtpTransport`` | Sends messages over SMTP; Supports Authentication; Supports Encryption | Very portable; Pleasingly predictable results; Provides good feedback | -+---------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+ -| ``Swift_SendmailTransport`` | Communicates with a locally installed ``sendmail`` executable (Linux/UNIX) | Quick time-to-run; Provides less-accurate feedback than SMTP; Requires ``sendmail`` installation | -+---------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+ -| ``Swift_LoadBalancedTransport`` | Cycles through a collection of the other Transports to manage load-reduction | Provides graceful fallback if one Transport fails (e.g. an SMTP server is down); Keeps the load on remote services down by spreading the work | -+---------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+ -| ``Swift_FailoverTransport`` | Works in conjunction with a collection of the other Transports to provide high-availability | Provides graceful fallback if one Transport fails (e.g. an SMTP server is down) | -+---------------------------------+---------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------+ - -MIME Entities -~~~~~~~~~~~~~ - -Everything that forms part of a Message is called a MIME Entity. All MIME -entities in Swift Mailer share a common set of features. There are various -types of MIME entity that serve different purposes such as Attachments and -MIME parts. - -An e-mail message is made up of several relatively simple entities that are -combined in different ways to achieve different results. All of these entities -have the same fundamental outline but serve a different purpose. The Message -itself can be defined as a MIME entity, an Attachment is a MIME entity, all -MIME parts are MIME entities -- and so on! - -The basic units of each MIME entity -- be it the Message itself, or an -Attachment -- are its Headers and its body: - -.. code-block:: text - - Other-Header: Another value - - The body content itself - -The Headers of a MIME entity, and its body must conform to some strict -standards defined by various RFC documents. Swift Mailer ensures that these -specifications are followed by using various types of object, including -Encoders and different Header types to generate the entity. - -Each MIME component implements the base ``Swift_Mime_MimeEntity`` interface, -which offers methods for retrieving Headers, adding new Headers, changing the -Encoder, updating the body and so on! - -All MIME entities have one Header in common -- the Content-Type Header, -updated with the entity's ``setContentType()`` method. - -Encoders -~~~~~~~~ - -Encoders are used to transform the content of Messages generated in Swift -Mailer into a format that is safe to send across the internet and that -conforms to RFC specifications. - -Generally speaking you will not need to interact with the Encoders in Swift -Mailer -- the correct settings will be handled by the library itself. -However they are probably worth a brief mention in the event that you do want -to play with them. - -Both the Headers and the body of all MIME entities (including the Message -itself) use Encoders to ensure the data they contain can be sent over the -internet without becoming corrupted or misinterpreted. - -There are two types of Encoder: Base64 and Quoted-Printable. - -Plugins -~~~~~~~ - -Plugins exist to extend, or modify the behaviour of Swift Mailer. They respond -to Events that are fired within the Transports during sending. - -There are a number of Plugins provided as part of the base Swift Mailer -package and they all follow a common interface to respond to Events fired -within the library. Interfaces are provided to "listen" to each type of Event -fired and to act as desired when a listened-to Event occurs. - -Although several plugins are provided with Swift Mailer out-of-the-box, the -Events system has been specifically designed to make it easy for experienced -object-oriented developers to write their own plugins in order to achieve -goals that may not be possible with the base library. diff --git a/vendor/swiftmailer/swiftmailer/doc/plugins.rst b/vendor/swiftmailer/swiftmailer/doc/plugins.rst index 6cec6be..548b07f 100644 --- a/vendor/swiftmailer/swiftmailer/doc/plugins.rst +++ b/vendor/swiftmailer/swiftmailer/doc/plugins.rst @@ -1,21 +1,31 @@ Plugins ======= -Plugins are provided with Swift Mailer and can be used to extend the behavior -of the library in situations where using simple class inheritance would be more complex. +Plugins exist to extend, or modify the behaviour of Swift Mailer. They respond +to Events that are fired within the Transports during sending. + +There are a number of Plugins provided as part of the base Swift Mailer package +and they all follow a common interface to respond to Events fired within the +library. Interfaces are provided to "listen" to each type of Event fired and to +act as desired when a listened-to Event occurs. + +Although several plugins are provided with Swift Mailer out-of-the-box, the +Events system has been specifically designed to make it easy for experienced +object-oriented developers to write their own plugins in order to achieve +goals that may not be possible with the base library. AntiFlood Plugin ---------------- -Many SMTP servers have limits on the number of messages that may be sent -during any single SMTP connection. The AntiFlood plugin provides a way to stay -within this limit while still managing a large number of emails. +Many SMTP servers have limits on the number of messages that may be sent during +any single SMTP connection. The AntiFlood plugin provides a way to stay within +this limit while still managing a large number of emails. A typical limit for a single connection is 100 emails. If the server you -connect to imposes such a limit, it expects you to disconnect after that -number of emails has been sent. You could manage this manually within a loop, -but the AntiFlood plugin provides the necessary wrapper code so that you don't -need to worry about this logic. +connect to imposes such a limit, it expects you to disconnect after that number +of emails has been sent. You could manage this manually within a loop, but the +AntiFlood plugin provides the necessary wrapper code so that you don't need to +worry about this logic. Regardless of limits imposed by the server, it's usually a good idea to be conservative with the resources of the SMTP server. Sending will become @@ -38,29 +48,14 @@ The AntiFlood Plugin -- like all plugins -- is added with the Mailer class's ``registerPlugin()`` method. It takes two constructor parameters: the number of emails to pause after, and optionally the number of seconds to pause for. -To use the AntiFlood plugin: - -* Create an instance of the Mailer using any Transport you choose. - -* Create an instance of the ``Swift_Plugins_AntiFloodPlugin`` class, passing - in one or two constructor parameters. - -* Register the plugin using the Mailer's ``registerPlugin()`` method. - -* Continue using Swift Mailer to send messages as normal. - -When Swift Mailer sends messages it will count the number of messages that -have been sent since the last re-connect. Once the number hits your specified -threshold it will disconnect and re-connect, optionally pausing for a -specified amount of time. - -.. code-block:: php - - require_once 'lib/swift_required.php'; +When Swift Mailer sends messages it will count the number of messages that have +been sent since the last re-connect. Once the number hits your specified +threshold it will disconnect and re-connect, optionally pausing for a specified +amount of time:: // Create the Mailer using any Transport - $mailer = Swift_Mailer::newInstance( - Swift_SmtpTransport::newInstance('smtp.example.org', 25) + $mailer = new Swift_Mailer( + new Swift_SmtpTransport('smtp.example.org', 25) ); // Use AntiFlood to re-connect after 100 emails @@ -83,9 +78,9 @@ If your SMTP server has restrictions in place to limit the rate at which you send emails, then your code will need to be aware of this rate-limiting. The Throttler plugin makes Swift Mailer run at a rate-limited speed. -Many shared hosts don't open their SMTP servers as a free-for-all. Usually -they have policies in place (probably to discourage spammers) that only allow -you to send a fixed number of emails per-hour/day. +Many shared hosts don't open their SMTP servers as a free-for-all. Usually they +have policies in place (probably to discourage spammers) that only allow you to +send a fixed number of emails per-hour/day. The Throttler plugin supports two modes of rate-limiting and with each, you will need to do that math to figure out the values you want. The plugin can @@ -99,29 +94,14 @@ The Throttler Plugin -- like all plugins -- is added with the Mailer class' ``registerPlugin()`` method. It has two required constructor parameters that tell it how to do its rate-limiting. -To use the Throttler plugin: - -* Create an instance of the Mailer using any Transport you choose. - -* Create an instance of the ``Swift_Plugins_ThrottlerPlugin`` class, passing - the number of emails, or bytes you wish to limit by, along with the mode - you're using. - -* Register the plugin using the Mailer's ``registerPlugin()`` method. - -* Continue using Swift Mailer to send messages as normal. - -When Swift Mailer sends messages it will keep track of the rate at which sending -messages is occurring. If it realises that sending is happening too fast, it -will cause your program to ``sleep()`` for enough time to average out the rate. - -.. code-block:: php - - require_once 'lib/swift_required.php'; +When Swift Mailer sends messages it will keep track of the rate at which +sending messages is occurring. If it realises that sending is happening too +fast, it will cause your program to ``sleep()`` for enough time to average out +the rate:: // Create the Mailer using any Transport - $mailer = Swift_Mailer::newInstance( - Swift_SmtpTransport::newInstance('smtp.example.org', 25) + $mailer = new Swift_Mailer( + new Swift_SmtpTransport('smtp.example.org', 25) ); // Rate limit to 100 emails per-minute @@ -148,10 +128,10 @@ The Logger plugins helps with debugging during the process of sending. It can help to identify why an SMTP server is rejecting addresses, or any other hard-to-find problems that may arise. -The Logger plugin comes in two parts. There's the plugin itself, along with -one of a number of possible Loggers that you may choose to use. For example, -the logger may output messages directly in realtime, or it may capture -messages in an array. +The Logger plugin comes in two parts. There's the plugin itself, along with one +of a number of possible Loggers that you may choose to use. For example, the +logger may output messages directly in realtime, or it may capture messages in +an array. One other notable feature is the way in which the Logger plugin changes Exception messages. If Exceptions are being thrown but the error message does @@ -164,8 +144,7 @@ own implementation is incredibly simple and is achieved by creating a short class that implements the ``Swift_Plugins_Logger`` interface. * ``Swift_Plugins_Loggers_ArrayLogger``: Keeps a collection of log messages - inside an array. The array content can be cleared or dumped out to the - screen. + inside an array. The array content can be cleared or dumped out to the screen. * ``Swift_Plugins_Loggers_EchoLogger``: Prints output to the screen in realtime. Handy for very rudimentary debug output. @@ -177,34 +156,14 @@ The Logger Plugin -- like all plugins -- is added with the Mailer class' ``registerPlugin()`` method. It accepts an instance of ``Swift_Plugins_Logger`` in its constructor. -To use the Logger plugin: - -* Create an instance of the Mailer using any Transport you choose. - -* Create an instance of the a Logger implementation of - ``Swift_Plugins_Logger``. - -* Create an instance of the ``Swift_Plugins_LoggerPlugin`` class, passing the - created Logger instance to its constructor. - -* Register the plugin using the Mailer's ``registerPlugin()`` method. - -* Continue using Swift Mailer to send messages as normal. - -* Dump the contents of the log with the logger's ``dump()`` method. - When Swift Mailer sends messages it will keep a log of all the interactions with the underlying Transport being used. Depending upon the Logger that has -been used the behaviour will differ, but all implementations offer a way to -get the contents of the log. - -.. code-block:: php - - require_once 'lib/swift_required.php'; +been used the behaviour will differ, but all implementations offer a way to get +the contents of the log:: // Create the Mailer using any Transport - $mailer = Swift_Mailer::newInstance( - Swift_SmtpTransport::newInstance('smtp.example.org', 25) + $mailer = new Swift_Mailer( + new Swift_SmtpTransport('smtp.example.org', 25) ); // To use the ArrayLogger @@ -234,18 +193,18 @@ tiny variations such as the recipient's name being used inside the message body. The Decorator plugin aims to provide a solution for allowing these small differences. -The decorator plugin works by intercepting the sending process of Swift -Mailer, reading the email address in the To: field and then looking up a set -of replacements for a template. +The decorator plugin works by intercepting the sending process of Swift Mailer, +reading the email address in the To: field and then looking up a set of +replacements for a template. While the use of this plugin is simple, it is probably the most commonly misunderstood plugin due to the way in which it works. The typical mistake users make is to try registering the plugin multiple times (once for each recipient) -- inside a loop for example. This is incorrect. -The Decorator plugin should be registered just once, but containing the list -of all recipients prior to sending. It will use this list of recipients to -find the required replacements during sending. +The Decorator plugin should be registered just once, but containing the list of +all recipients prior to sending. It will use this list of recipients to find +the required replacements during sending. Using the Decorator Plugin ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -263,37 +222,33 @@ you'll be sending the message to. email addresses and whose values are an associative array of replacements for that email address. The curly braces used in this example can be any type of syntax you choose, provided they match the placeholders in your - email template. - - .. code-block:: php + email template:: - $replacements = array(); + $replacements = []; foreach ($users as $user) { - $replacements[$user['email']] = array( + $replacements[$user['email']] = [ '{username}'=>$user['username'], - '{password}'=>$user['password'] - ); + '{resetcode}'=>$user['resetcode'] + ]; } Now create an instance of the Decorator plugin using this array of replacements and then register it with the Mailer. Do this only once! -.. code-block:: php +:: $decorator = new Swift_Plugins_DecoratorPlugin($replacements); $mailer->registerPlugin($decorator); When you create your message, replace elements in the body (and/or the subject -line) with your placeholders. +line) with your placeholders:: -.. code-block:: php - - $message = Swift_Message::newInstance() + $message = (new Swift_Message()) ->setSubject('Important notice for {username}') ->setBody( - "Hello {username}, we have reset your password to {password}\n" . - "Please log in and change it at your earliest convenience." + "Hello {username}, you requested to reset your password.\n" . + "Please visit https://example.com/pwreset and use the reset code {resetcode} to set a new password." ) ; @@ -310,8 +265,8 @@ this to one user: Subject: Important notice for smilingsunshine2009 - Hello smilingsunshine2009, we have reset your password to rainyDays - Please log in and change it at your earliest convenience. + Hello smilingsunshine2009, you requested to reset your password. + Please visit https://example.com/pwreset and use the reset code 183457 to set a new password. While another use may receive the message as: @@ -319,12 +274,12 @@ While another use may receive the message as: Subject: Important notice for billy-bo-bob - Hello billy-bo-bob, we have reset your password to dancingOctopus - Please log in and change it at your earliest convenience. + Hello billy-bo-bob, you requested to reset your password. + Please visit https://example.com/pwreset and use the reset code 539127 to set a new password. While the decorator plugin provides a means to solve this problem, there are -various ways you could tackle this problem without the need for a plugin. -We're trying to come up with a better way ourselves and while we have several +various ways you could tackle this problem without the need for a plugin. We're +trying to come up with a better way ourselves and while we have several (obvious) ideas we don't quite have the perfect solution to go ahead and implement it. Watch this space. @@ -337,16 +292,15 @@ that performs replacement lookups on-the-fly you may provide your own implementation. Providing your own replacements lookup implementation for the Decorator is -simply a matter of passing an instance of ``Swift_Plugins_Decorator_Replacements`` to the decorator plugin's constructor, +simply a matter of passing an instance of +``Swift_Plugins_Decorator_Replacements`` to the decorator plugin's constructor, rather than passing in an array. The Replacements interface is very simple to implement since it has just one method: ``getReplacementsFor($address)``. Imagine you want to look up replacements from a database on-the-fly, you might -provide an implementation that does this. You need to create a small class. - -.. code-block:: php +provide an implementation that does this. You need to create a small class:: class DbReplacements implements Swift_Plugins_Decorator_Replacements { public function getReplacementsFor($address) { @@ -358,28 +312,26 @@ provide an implementation that does this. You need to create a small class. $query->execute([$address]); if ($row = $query->fetch(PDO::FETCH_ASSOC)) { - return array( + return [ '{username}'=>$row['username'], - '{password}'=>$row['password'] - ); + '{resetcode}'=>$row['resetcode'] + ]; } } } Now all you need to do is pass an instance of your class into the Decorator -plugin's constructor instead of passing an array. - -.. code-block:: php +plugin's constructor instead of passing an array:: $decorator = new Swift_Plugins_DecoratorPlugin(new DbReplacements()); $mailer->registerPlugin($decorator); -For each message sent, the plugin will call your class' ``getReplacementsFor()`` -method to find the array of replacements it needs. +For each message sent, the plugin will call your class' +``getReplacementsFor()`` method to find the array of replacements it needs. .. note:: If your lookup algorithm is case sensitive, you should transform the - ``$address`` argument as appropriate -- for example by passing it - through ``strtolower()``. + ``$address`` argument as appropriate -- for example by passing it through + ``strtolower()``. diff --git a/vendor/swiftmailer/swiftmailer/doc/sending.rst b/vendor/swiftmailer/swiftmailer/doc/sending.rst index f340404..0104207 100644 --- a/vendor/swiftmailer/swiftmailer/doc/sending.rst +++ b/vendor/swiftmailer/swiftmailer/doc/sending.rst @@ -7,40 +7,15 @@ Quick Reference for Sending a Message Sending a message is very straightforward. You create a Transport, use it to create the Mailer, then you use the Mailer to send the message. -To send a Message: - -* Create a Transport from one of the provided Transports -- - ``Swift_SmtpTransport``, ``Swift_SendmailTransport`` - or one of the aggregate Transports. - -* Create an instance of the ``Swift_Mailer`` class, using the Transport as - it's constructor parameter. - -* Create a Message. - -* Send the message via the ``send()`` method on the Mailer object. - -.. caution:: - - The ``Swift_SmtpTransport`` and ``Swift_SendmailTransport`` transports use - ``proc_*`` PHP functions, which might not be available on your PHP - installation. You can easily check if that's the case by running the - following PHP script: ``setUsername('your username') ->setPassword('your password') ; @@ -49,16 +24,16 @@ recipients are delivered to successfully then the value 5 will be returned. You could alternatively use a different transport such as Sendmail: // Sendmail - $transport = Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs'); + $transport = new Swift_SendmailTransport('/usr/sbin/sendmail -bs'); */ // Create the Mailer using your created Transport - $mailer = Swift_Mailer::newInstance($transport); + $mailer = new Swift_Mailer($transport); // Create a message - $message = Swift_Message::newInstance('Wonderful Subject') - ->setFrom(array('john@doe.com' => 'John Doe')) - ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name')) + $message = (new Swift_Message('Wonderful Subject')) + ->setFrom(['john@doe.com' => 'John Doe']) + ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) ->setBody('Here is the message itself') ; @@ -68,19 +43,33 @@ recipients are delivered to successfully then the value 5 will be returned. Transport Types ~~~~~~~~~~~~~~~ -A Transport is the component which actually does the sending. You need to -provide a Transport object to the Mailer class and there are several possible -options. +Transports are the classes in Swift Mailer that are responsible for +communicating with a service in order to deliver a Message. There are several +types of Transport in Swift Mailer, all of which implement the +``Swift_Transport`` interface:: + +* ``Swift_SmtpTransport``: Sends messages over SMTP; Supports Authentication; + Supports Encryption. Very portable; Pleasingly predictable results; Provides + good feedback; + +* ``Swift_SendmailTransport``: Communicates with a locally installed + ``sendmail`` executable (Linux/UNIX). Quick time-to-run; Provides + less-accurate feedback than SMTP; Requires ``sendmail`` installation; + +* ``Swift_LoadBalancedTransport``: Cycles through a collection of the other + Transports to manage load-reduction. Provides graceful fallback if one + Transport fails (e.g. an SMTP server is down); Keeps the load on remote + services down by spreading the work; -Typically you will not need to know how a Transport works under-the-surface, -you will only need to know how to create an instance of one, and which one to -use for your environment. +* ``Swift_FailoverTransport``: Works in conjunction with a collection of the + other Transports to provide high-availability. Provides graceful fallback if + one Transport fails (e.g. an SMTP server is down). The SMTP Transport .................. The SMTP Transport sends messages over the (standardized) Simple Message -Transfer Protocol. It can deal with encryption and authentication. +Transfer Protocol. It can deal with encryption and authentication. The SMTP Transport, ``Swift_SmtpTransport`` is without doubt the most commonly used Transport because it will work on 99% of web servers (I just made that @@ -92,12 +81,12 @@ SMTP servers often require users to authenticate with a username and password before any mail can be sent to other domains. This is easily achieved using Swift Mailer with the SMTP Transport. -SMTP is a protocol -- in other words it's a "way" of communicating a job -to be done (i.e. sending a message). The SMTP protocol is the fundamental -basis on which messages are delivered all over the internet 7 days a week, 365 -days a year. For this reason it's the most "direct" method of sending messages -you can use and it's the one that will give you the most power and feedback -(such as delivery failures) when using Swift Mailer. +SMTP is a protocol -- in other words it's a "way" of communicating a job to be +done (i.e. sending a message). The SMTP protocol is the fundamental basis on +which messages are delivered all over the internet 7 days a week, 365 days a +year. For this reason it's the most "direct" method of sending messages you can +use and it's the one that will give you the most power and feedback (such as +delivery failures) when using Swift Mailer. Because SMTP is generally run as a remote service (i.e. you connect to it over the network/internet) it's extremely portable from server-to-server. You can @@ -114,35 +103,24 @@ Using the SMTP Transport The SMTP Transport is easy to use. Most configuration options can be set with the constructor. -To use the SMTP Transport you need to know which SMTP server your code needs -to connect to. Ask your web host if you're not sure. Lots of people ask me who -to connect to -- I really can't answer that since it's a setting that's -extremely specific to your hosting environment. - -To use the SMTP Transport: - -* Call ``Swift_SmtpTransport::newInstance()`` with the SMTP server name and - optionally with a port number (defaults to 25). - -* Use the returned object to create the Mailer. +To use the SMTP Transport you need to know which SMTP server your code needs to +connect to. Ask your web host if you're not sure. Lots of people ask me who to +connect to -- I really can't answer that since it's a setting that's extremely +specific to your hosting environment. A connection to the SMTP server will be established upon the first call to -``send()``. - -.. code-block:: php - - require_once 'lib/swift_required.php'; +``send()``:: // Create the Transport - $transport = Swift_SmtpTransport::newInstance('smtp.example.org', 25); + $transport = new Swift_SmtpTransport('smtp.example.org', 25); // Create the Mailer using your created Transport - $mailer = Swift_Mailer::newInstance($transport); + $mailer = new Swift_Mailer($transport); /* It's also possible to use multiple method calls - $transport = Swift_SmtpTransport::newInstance() + $transport = (new Swift_SmtpTransport()) ->setHost('smtp.example.org') ->setPort(25) ; @@ -151,15 +129,14 @@ A connection to the SMTP server will be established upon the first call to Encrypted SMTP ^^^^^^^^^^^^^^ -You can use SSL or TLS encryption with the SMTP Transport by specifying it as -a parameter or with a method call. +You can use SSL or TLS encryption with the SMTP Transport by specifying it as a +parameter or with a method call:: -To use encryption with the SMTP Transport: - -* Pass the encryption setting as a third parameter to - ``Swift_SmtpTransport::newInstance()``; or + // Create the Transport + $transport = new Swift_SmtpTransport('smtp.example.org', 587, 'ssl'); -* Call the ``setEncryption()`` method on the Transport. + // Create the Mailer using your created Transport + $mailer = new Swift_Mailer($transport); A connection to the SMTP server will be established upon the first call to ``send()``. The connection will be initiated with the correct encryption @@ -170,42 +147,29 @@ settings. For SSL or TLS encryption to work your PHP installation must have appropriate OpenSSL transports wrappers. You can check if "tls" and/or "ssl" are present in your PHP installation by using the PHP function - ``stream_get_transports()`` + ``stream_get_transports()``. - .. code-block:: php - - require_once 'lib/swift_required.php'; - - // Create the Transport - $transport = Swift_SmtpTransport::newInstance('smtp.example.org', 587, 'ssl'); - - // Create the Mailer using your created Transport - $mailer = Swift_Mailer::newInstance($transport); - - /* - It's also possible to use multiple method calls - - $transport = Swift_SmtpTransport::newInstance() - ->setHost('smtp.example.org') - ->setPort(587) - ->setEncryption('ssl') - ; - */ +.. note:: + If you are using Mailcatcher_, make sure you do not set the encryption + for the ``Swift_SmtpTransport``, since Mailcatcher does not support encryption. SMTP with a Username and Password ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Some servers require authentication. You can provide a username and password -with ``setUsername()`` and ``setPassword()`` methods. - -To use a username and password with the SMTP Transport: +with ``setUsername()`` and ``setPassword()`` methods:: -* Create the Transport with ``Swift_SmtpTransport::newInstance()``. + // Create the Transport the call setUsername() and setPassword() + $transport = (new Swift_SmtpTransport('smtp.example.org', 25)) + ->setUsername('username') + ->setPassword('password') + ; -* Call the ``setUsername()`` and ``setPassword()`` methods on the Transport. + // Create the Mailer using your created Transport + $mailer = new Swift_Mailer($transport); -Your username and password will be used to authenticate upon first connect -when ``send()`` are first used on the Mailer. +Your username and password will be used to authenticate upon first connect when +``send()`` are first used on the Mailer. If authentication fails, an Exception of type ``Swift_TransportException`` will be thrown. @@ -216,27 +180,14 @@ be thrown. Exception is going to be thrown, call the ``start()`` method on the created Transport. - .. code-block:: php - - require_once 'lib/swift_required.php'; - - // Create the Transport the call setUsername() and setPassword() - $transport = Swift_SmtpTransport::newInstance('smtp.example.org', 25) - ->setUsername('username') - ->setPassword('password') - ; - - // Create the Mailer using your created Transport - $mailer = Swift_Mailer::newInstance($transport); - The Sendmail Transport ...................... -The Sendmail Transport sends messages by communicating with a locally -installed MTA -- such as ``sendmail``. +The Sendmail Transport sends messages by communicating with a locally installed +MTA -- such as ``sendmail``. -The Sendmail Transport, ``Swift_SendmailTransport`` does not directly connect to -any remote services. It is designed for Linux servers that have ``sendmail`` +The Sendmail Transport, ``Swift_SendmailTransport`` does not directly connect +to any remote services. It is designed for Linux servers that have ``sendmail`` installed. The Transport starts a local ``sendmail`` process and sends messages to it. Usually the ``sendmail`` process will respond quickly as it spools your messages to disk before sending them. @@ -248,18 +199,18 @@ its name, provided they have the relevant sendmail wrappers so that they can be started with the correct command-line flags. It's a common misconception that because the Sendmail Transport returns a -result very quickly it must therefore deliver messages to recipients quickly --- this is not true. It's not slow by any means, but it's certainly not -faster than SMTP when it comes to getting messages to the intended recipients. -This is because sendmail itself sends the messages over SMTP once they have -been quickly spooled to disk. +result very quickly it must therefore deliver messages to recipients quickly -- +this is not true. It's not slow by any means, but it's certainly not faster +than SMTP when it comes to getting messages to the intended recipients. This is +because sendmail itself sends the messages over SMTP once they have been +quickly spooled to disk. The Sendmail Transport has the potential to be just as smart of the SMTP Transport when it comes to notifying Swift Mailer about which recipients were rejected, but in reality the majority of locally installed ``sendmail`` -instances are not configured well enough to provide any useful feedback. As such -Swift Mailer may report successful deliveries where they did in fact fail before -they even left your server. +instances are not configured well enough to provide any useful feedback. As +such Swift Mailer may report successful deliveries where they did in fact fail +before they even left your server. You can run the Sendmail Transport in two different modes specified by command line flags: @@ -270,19 +221,19 @@ line flags: * "``-t``" runs in piped mode with no feedback, but theoretically faster, though not advised -You can think of the Sendmail Transport as a sort of asynchronous SMTP Transport --- though if you have problems with delivery failures you should try using the -SMTP Transport instead. Swift Mailer isn't doing the work here, it's simply -passing the work to somebody else (i.e. ``sendmail``). +You can think of the Sendmail Transport as a sort of asynchronous SMTP +Transport -- though if you have problems with delivery failures you should try +using the SMTP Transport instead. Swift Mailer isn't doing the work here, it's +simply passing the work to somebody else (i.e. ``sendmail``). Using the Sendmail Transport ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -To use the Sendmail Transport you simply need to call -``Swift_SendmailTransport::newInstance()`` with the command as a parameter. +To use the Sendmail Transport you simply need to call ``new +Swift_SendmailTransport()`` with the command as a parameter. -To use the Sendmail Transport you need to know where ``sendmail`` or another MTA -exists on the server. Swift Mailer uses a default value of +To use the Sendmail Transport you need to know where ``sendmail`` or another +MTA exists on the server. Swift Mailer uses a default value of ``/usr/sbin/sendmail``, which should work on most systems. You specify the entire command as a parameter (i.e. including the command line @@ -294,64 +245,20 @@ flags). Swift Mailer supports operational modes of "``-bs``" (default) and If you run sendmail in "``-t``" mode you will get no feedback as to whether or not sending has succeeded. Use "``-bs``" unless you have a reason not to. -To use the Sendmail Transport: - -* Call ``Swift_SendmailTransport::newInstance()`` with the command, including - the correct command line flags. The default is to use ``/usr/sbin/sendmail - -bs`` if this is not specified. - -* Use the returned object to create the Mailer. - A sendmail process will be started upon the first call to ``send()``. If the process cannot be started successfully an Exception of type -``Swift_TransportException`` will be thrown. - -.. code-block:: php - - require_once 'lib/swift_required.php'; +``Swift_TransportException`` will be thrown:: // Create the Transport - $transport = Swift_SendmailTransport::newInstance('/usr/sbin/exim -bs'); + $transport = new Swift_SendmailTransport('/usr/sbin/exim -bs'); // Create the Mailer using your created Transport - $mailer = Swift_Mailer::newInstance($transport); - -The Mail Transport -.................. - -The Mail Transport sends messages by delegating to PHP's internal -``mail()`` function. - -In my experience -- and others' -- the ``mail()`` function is not particularly -predictable, or helpful. - -Quite notably, the ``mail()`` function behaves entirely differently between -Linux and Windows servers. On linux it uses ``sendmail``, but on Windows it uses -SMTP. - -In order for the ``mail()`` function to even work at all ``php.ini`` needs to be -configured correctly, specifying the location of sendmail or of an SMTP server. - -The problem with ``mail()`` is that it "tries" to simplify things to the point -that it actually makes things more complex due to poor interface design. The -developers of Swift Mailer have gone to a lot of effort to make the Mail -Transport work with a reasonable degree of consistency. - -Serious drawbacks when using this Transport are: - -* Unpredictable message headers - -* Lack of feedback regarding delivery failures - -* Lack of support for several plugins that require real-time delivery feedback - -It's a last resort, and we say that with a passion! + $mailer = new Swift_Mailer($transport); Available Methods for Sending Messages ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -The Mailer class offers two methods for sending Messages -- ``send()``. -Each behaves in a slightly different way. +The Mailer class offers one method for sending Messages -- ``send()``. When a message is sent in Swift Mailer, the Mailer class communicates with whichever Transport class you have chosen to use. @@ -359,8 +266,8 @@ whichever Transport class you have chosen to use. Each recipient in the message should either be accepted or rejected by the Transport. For example, if the domain name on the email address is not reachable the SMTP Transport may reject the address because it cannot process -it. Whichever method you use -- ``send()`` -- Swift Mailer will return -an integer indicating the number of accepted recipients. +it. ``send()`` will return an integer indicating the number of accepted +recipients. .. note:: @@ -374,40 +281,23 @@ The ``send()`` method of the ``Swift_Mailer`` class sends a message using exactly the same logic as your Desktop mail client would use. Just pass it a Message and get a result. -To send a Message with ``send()``: - -* Create a Transport from one of the provided Transports -- - ``Swift_SmtpTransport``, ``Swift_SendmailTransport``, - or one of the aggregate Transports. - -* Create an instance of the ``Swift_Mailer`` class, using the Transport as - it's constructor parameter. - -* Create a Message. - -* Send the message via the ``send()`` method on the Mailer object. - The message will be sent just like it would be sent if you used your mail client. An integer is returned which includes the number of successful recipients. If none of the recipients could be sent to then zero will be returned, which equates to a boolean ``false``. If you set two ``To:`` recipients and three ``Bcc:`` recipients in the message and all of the -recipients are delivered to successfully then the value 5 will be returned. - -.. code-block:: php - - require_once 'lib/swift_required.php'; +recipients are delivered to successfully then the value 5 will be returned:: // Create the Transport - $transport = Swift_SmtpTransport::newInstance('localhost', 25); + $transport = new Swift_SmtpTransport('localhost', 25); // Create the Mailer using your created Transport - $mailer = Swift_Mailer::newInstance($transport); + $mailer = new Swift_Mailer($transport); // Create a message - $message = Swift_Message::newInstance('Wonderful Subject') - ->setFrom(array('john@doe.com' => 'John Doe')) - ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name')) + $message = (new Swift_Message('Wonderful Subject')) + ->setFrom(['john@doe.com' => 'John Doe']) + ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) ->setBody('Here is the message itself') ; @@ -433,8 +323,8 @@ recipients are delivered to successfully then the value 5 will be returned. Sending Emails in Batch ....................... -If you want to send a separate message to each recipient so that only their -own address shows up in the ``To:`` field, follow the following recipe: +If you want to send a separate message to each recipient so that only their own +address shows up in the ``To:`` field, follow the following recipe: * Create a Transport from one of the provided Transports -- ``Swift_SmtpTransport``, ``Swift_SendmailTransport``, @@ -457,10 +347,11 @@ Mailer will throw a ``Swift_RfcComplianceException``. If you add recipients automatically based on a data source that may contain invalid email addresses, you can prevent possible exceptions by validating the -addresses using ``Swift_Validate::email($email)`` and only adding addresses -that validate. Another way would be to wrap your ``setTo()``, ``setCc()`` and -``setBcc()`` calls in a try-catch block and handle the -``Swift_RfcComplianceException`` in the catch block. +addresses using ``Egulias\EmailValidator\EmailValidator`` (a dependency that is +installed with Swift Mailer) and only adding addresses that validate. Another +way would be to wrap your ``setTo()``, ``setCc()`` and ``setBcc()`` calls in a +try-catch block and handle the ``Swift_RfcComplianceException`` in the catch +block. Handling invalid addresses properly is especially important when sending emails in large batches since a single invalid address might cause an unhandled @@ -470,35 +361,31 @@ exception and stop the execution or your script early. In the following example, two emails are sent. One to each of ``receiver@domain.org`` and ``other@domain.org``. These recipients will - not be aware of each other. - - .. code-block:: php - - require_once 'lib/swift_required.php'; + not be aware of each other:: // Create the Transport - $transport = Swift_SmtpTransport::newInstance('localhost', 25); + $transport = new Swift_SmtpTransport('localhost', 25); // Create the Mailer using your created Transport - $mailer = Swift_Mailer::newInstance($transport); + $mailer = new Swift_Mailer($transport); // Create a message - $message = Swift_Message::newInstance('Wonderful Subject') - ->setFrom(array('john@doe.com' => 'John Doe')) + $message = (new Swift_Message('Wonderful Subject')) + ->setFrom(['john@doe.com' => 'John Doe']) ->setBody('Here is the message itself') ; // Send the message - $failedRecipients = array(); + $failedRecipients = []; $numSent = 0; - $to = array('receiver@domain.org', 'other@domain.org' => 'A name'); + $to = ['receiver@domain.org', 'other@domain.org' => 'A name']; foreach ($to as $address => $name) { if (is_int($address)) { $message->setTo($name); } else { - $message->setTo(array($address => $name)); + $message->setTo([$address => $name]); } $numSent += $mailer->send($message, $failedRecipients); @@ -509,8 +396,8 @@ exception and stop the execution or your script early. Finding out Rejected Addresses ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -It's possible to get a list of addresses that were rejected by the Transport -by using a by-reference parameter to ``send()``. +It's possible to get a list of addresses that were rejected by the Transport by +using a by-reference parameter to ``send()``. As Swift Mailer attempts to send the message to each address given to it, if a recipient is rejected it will be added to the array. You can pass an existing @@ -524,12 +411,34 @@ Getting Failures By-reference ............................. Collecting delivery failures by-reference with the ``send()`` method is as -simple as passing a variable name to the method call. +simple as passing a variable name to the method call:: + + $mailer = new Swift_Mailer( ... ); + + $message = (new Swift_Message( ... )) + ->setFrom( ... ) + ->setTo([ + 'receiver@bad-domain.org' => 'Receiver Name', + 'other@domain.org' => 'A name', + 'other-receiver@bad-domain.org' => 'Other Name' + )) + ->setBody( ... ) + ; -To get failed recipients by-reference: + // Pass a variable name to the send() method + if (!$mailer->send($message, $failures)) + { + echo "Failures:"; + print_r($failures); + } -* Pass a by-reference variable name to the ``send()`` method of the Mailer - class. + /* + Failures: + Array ( + 0 => receiver@bad-domain.org, + 1 => other-receiver@bad-domain.org + ) + */ If the Transport rejects any of the recipients, the culprit addresses will be added to the array provided by-reference. @@ -541,31 +450,4 @@ added to the array provided by-reference. already exists it will be type-cast to an array and failures will be added to it. - .. code-block:: php - - $mailer = Swift_Mailer::newInstance( ... ); - - $message = Swift_Message::newInstance( ... ) - ->setFrom( ... ) - ->setTo(array( - 'receiver@bad-domain.org' => 'Receiver Name', - 'other@domain.org' => 'A name', - 'other-receiver@bad-domain.org' => 'Other Name' - )) - ->setBody( ... ) - ; - - // Pass a variable name to the send() method - if (!$mailer->send($message, $failures)) - { - echo "Failures:"; - print_r($failures); - } - - /* - Failures: - Array ( - 0 => receiver@bad-domain.org, - 1 => other-receiver@bad-domain.org - ) - */ +.. _Mailcatcher: https://mailcatcher.me/ diff --git a/vendor/swiftmailer/swiftmailer/doc/uml/Encoders.graffle b/vendor/swiftmailer/swiftmailer/doc/uml/Encoders.graffle deleted file mode 100644 index f895752..0000000 Binary files a/vendor/swiftmailer/swiftmailer/doc/uml/Encoders.graffle and /dev/null differ diff --git a/vendor/swiftmailer/swiftmailer/doc/uml/Mime.graffle b/vendor/swiftmailer/swiftmailer/doc/uml/Mime.graffle deleted file mode 100644 index e1e33cb..0000000 Binary files a/vendor/swiftmailer/swiftmailer/doc/uml/Mime.graffle and /dev/null differ diff --git a/vendor/swiftmailer/swiftmailer/doc/uml/Transports.graffle b/vendor/swiftmailer/swiftmailer/doc/uml/Transports.graffle deleted file mode 100644 index 5670e2b..0000000 Binary files a/vendor/swiftmailer/swiftmailer/doc/uml/Transports.graffle and /dev/null differ diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift.php index 82c381b..7eb7634 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift.php @@ -11,16 +11,14 @@ /** * General utility class in Swift Mailer, not to be instantiated. * - * * @author Chris Corbyn */ abstract class Swift { - /** Swift Mailer Version number generated during dist release process */ - const VERSION = '@SWIFT_VERSION_NUMBER@'; + const VERSION = '6.2.0'; public static $initialized = false; - public static $inits = array(); + public static $inits = []; /** * Registers an initializer callable that will be called the first time @@ -75,6 +73,6 @@ public static function registerAutoload($callable = null) if (null !== $callable) { self::$inits[] = $callable; } - spl_autoload_register(array('Swift', 'autoload')); + spl_autoload_register(['Swift', 'autoload']); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/AddressEncoder.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/AddressEncoder.php new file mode 100644 index 0000000..7ec3e90 --- /dev/null +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/AddressEncoder.php @@ -0,0 +1,25 @@ +address = $address; + } + + public function getAddress(): string + { + return $this->address; + } +} diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Attachment.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Attachment.php index a95bccf..642aa6f 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Attachment.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Attachment.php @@ -9,7 +9,7 @@ */ /** - * Attachment class for attaching files to a {@link Swift_Mime_Message}. + * Attachment class for attaching files to a {@link Swift_Mime_SimpleMessage}. * * @author Chris Corbyn */ @@ -27,30 +27,13 @@ class Swift_Attachment extends Swift_Mime_Attachment public function __construct($data = null, $filename = null, $contentType = null) { call_user_func_array( - array($this, 'Swift_Mime_Attachment::__construct'), + [$this, 'Swift_Mime_Attachment::__construct'], Swift_DependencyContainer::getInstance() ->createDependenciesFor('mime.attachment') ); - $this->setBody($data); + $this->setBody($data, $contentType); $this->setFilename($filename); - if ($contentType) { - $this->setContentType($contentType); - } - } - - /** - * Create a new Attachment. - * - * @param string|Swift_OutputByteStream $data - * @param string $filename - * @param string $contentType - * - * @return Swift_Mime_Attachment - */ - public static function newInstance($data = null, $filename = null, $contentType = null) - { - return new self($data, $filename, $contentType); } /** @@ -59,13 +42,13 @@ public static function newInstance($data = null, $filename = null, $contentType * @param string $path * @param string $contentType optional * - * @return Swift_Mime_Attachment + * @return self */ public static function fromPath($path, $contentType = null) { - return self::newInstance()->setFile( + return (new self())->setFile( new Swift_ByteStream_FileByteStream($path), $contentType - ); + ); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php index a7b0e3a..3a69c15 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php @@ -18,48 +18,47 @@ abstract class Swift_ByteStream_AbstractFilterableInputStream implements Swift_I /** * Write sequence. */ - protected $_sequence = 0; + protected $sequence = 0; /** * StreamFilters. * * @var Swift_StreamFilter[] */ - private $_filters = array(); + private $filters = []; /** * A buffer for writing. */ - private $_writeBuffer = ''; + private $writeBuffer = ''; /** * Bound streams. * * @var Swift_InputByteStream[] */ - private $_mirrors = array(); + private $mirrors = []; /** * Commit the given bytes to the storage medium immediately. * * @param string $bytes */ - abstract protected function _commit($bytes); + abstract protected function doCommit($bytes); /** * Flush any buffers/content with immediate effect. */ - abstract protected function _flush(); + abstract protected function flush(); /** * Add a StreamFilter to this InputByteStream. * - * @param Swift_StreamFilter $filter - * @param string $key + * @param string $key */ public function addFilter(Swift_StreamFilter $filter, $key) { - $this->_filters[$key] = $filter; + $this->filters[$key] = $filter; } /** @@ -69,7 +68,7 @@ public function addFilter(Swift_StreamFilter $filter, $key) */ public function removeFilter($key) { - unset($this->_filters[$key]); + unset($this->filters[$key]); } /** @@ -83,15 +82,15 @@ public function removeFilter($key) */ public function write($bytes) { - $this->_writeBuffer .= $bytes; - foreach ($this->_filters as $filter) { - if ($filter->shouldBuffer($this->_writeBuffer)) { + $this->writeBuffer .= $bytes; + foreach ($this->filters as $filter) { + if ($filter->shouldBuffer($this->writeBuffer)) { return; } } - $this->_doWrite($this->_writeBuffer); + $this->doWrite($this->writeBuffer); - return ++$this->_sequence; + return ++$this->sequence; } /** @@ -102,7 +101,7 @@ public function write($bytes) */ public function commit() { - $this->_doWrite($this->_writeBuffer); + $this->doWrite($this->writeBuffer); } /** @@ -110,12 +109,10 @@ public function commit() * * The stream acts as an observer, receiving all data that is written. * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - * - * @param Swift_InputByteStream $is */ public function bind(Swift_InputByteStream $is) { - $this->_mirrors[] = $is; + $this->mirrors[] = $is; } /** @@ -124,17 +121,15 @@ public function bind(Swift_InputByteStream $is) * If $is is not bound, no errors will be raised. * If the stream currently has any buffered data it will be written to $is * before unbinding occurs. - * - * @param Swift_InputByteStream $is */ public function unbind(Swift_InputByteStream $is) { - foreach ($this->_mirrors as $k => $stream) { + foreach ($this->mirrors as $k => $stream) { if ($is === $stream) { - if ($this->_writeBuffer !== '') { - $stream->write($this->_writeBuffer); + if ('' !== $this->writeBuffer) { + $stream->write($this->writeBuffer); } - unset($this->_mirrors[$k]); + unset($this->mirrors[$k]); } } } @@ -147,20 +142,20 @@ public function unbind(Swift_InputByteStream $is) */ public function flushBuffers() { - if ($this->_writeBuffer !== '') { - $this->_doWrite($this->_writeBuffer); + if ('' !== $this->writeBuffer) { + $this->doWrite($this->writeBuffer); } - $this->_flush(); + $this->flush(); - foreach ($this->_mirrors as $stream) { + foreach ($this->mirrors as $stream) { $stream->flushBuffers(); } } /** Run $bytes through all filters */ - private function _filter($bytes) + private function filter($bytes) { - foreach ($this->_filters as $filter) { + foreach ($this->filters as $filter) { $bytes = $filter->filter($bytes); } @@ -168,14 +163,14 @@ private function _filter($bytes) } /** Just write the bytes to the stream */ - private function _doWrite($bytes) + private function doWrite($bytes) { - $this->_commit($this->_filter($bytes)); + $this->doCommit($this->filter($bytes)); - foreach ($this->_mirrors as $stream) { + foreach ($this->mirrors as $stream) { $stream->write($bytes); } - $this->_writeBuffer = ''; + $this->writeBuffer = ''; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php index ef05a6d..68dc3b1 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php @@ -11,7 +11,7 @@ /** * Allows reading and writing of bytes to and from an array. * - * @author Chris Corbyn + * @author Chris Corbyn */ class Swift_ByteStream_ArrayByteStream implements Swift_InputByteStream, Swift_OutputByteStream { @@ -20,28 +20,28 @@ class Swift_ByteStream_ArrayByteStream implements Swift_InputByteStream, Swift_O * * @var string[] */ - private $_array = array(); + private $array = []; /** * The size of the stack. * * @var int */ - private $_arraySize = 0; + private $arraySize = 0; /** * The internal pointer offset. * * @var int */ - private $_offset = 0; + private $offset = 0; /** * Bound streams. * * @var Swift_InputByteStream[] */ - private $_mirrors = array(); + private $mirrors = []; /** * Create a new ArrayByteStream. @@ -53,12 +53,12 @@ class Swift_ByteStream_ArrayByteStream implements Swift_InputByteStream, Swift_O public function __construct($stack = null) { if (is_array($stack)) { - $this->_array = $stack; - $this->_arraySize = count($stack); + $this->array = $stack; + $this->arraySize = count($stack); } elseif (is_string($stack)) { $this->write($stack); } else { - $this->_array = array(); + $this->array = []; } } @@ -76,16 +76,16 @@ public function __construct($stack = null) */ public function read($length) { - if ($this->_offset == $this->_arraySize) { + if ($this->offset == $this->arraySize) { return false; } // Don't use array slice - $end = $length + $this->_offset; - $end = $this->_arraySize < $end ? $this->_arraySize : $end; + $end = $length + $this->offset; + $end = $this->arraySize < $end ? $this->arraySize : $end; $ret = ''; - for (; $this->_offset < $end; ++$this->_offset) { - $ret .= $this->_array[$this->_offset]; + for (; $this->offset < $end; ++$this->offset) { + $ret .= $this->array[$this->offset]; } return $ret; @@ -100,11 +100,11 @@ public function write($bytes) { $to_add = str_split($bytes); foreach ($to_add as $value) { - $this->_array[] = $value; + $this->array[] = $value; } - $this->_arraySize = count($this->_array); + $this->arraySize = count($this->array); - foreach ($this->_mirrors as $stream) { + foreach ($this->mirrors as $stream) { $stream->write($bytes); } } @@ -121,12 +121,10 @@ public function commit() * * The stream acts as an observer, receiving all data that is written. * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - * - * @param Swift_InputByteStream $is */ public function bind(Swift_InputByteStream $is) { - $this->_mirrors[] = $is; + $this->mirrors[] = $is; } /** @@ -135,14 +133,12 @@ public function bind(Swift_InputByteStream $is) * If $is is not bound, no errors will be raised. * If the stream currently has any buffered data it will be written to $is * before unbinding occurs. - * - * @param Swift_InputByteStream $is */ public function unbind(Swift_InputByteStream $is) { - foreach ($this->_mirrors as $k => $stream) { + foreach ($this->mirrors as $k => $stream) { if ($is === $stream) { - unset($this->_mirrors[$k]); + unset($this->mirrors[$k]); } } } @@ -156,13 +152,13 @@ public function unbind(Swift_InputByteStream $is) */ public function setReadPointer($byteOffset) { - if ($byteOffset > $this->_arraySize) { - $byteOffset = $this->_arraySize; + if ($byteOffset > $this->arraySize) { + $byteOffset = $this->arraySize; } elseif ($byteOffset < 0) { $byteOffset = 0; } - $this->_offset = $byteOffset; + $this->offset = $byteOffset; } /** @@ -171,11 +167,11 @@ public function setReadPointer($byteOffset) */ public function flushBuffers() { - $this->_offset = 0; - $this->_array = array(); - $this->_arraySize = 0; + $this->offset = 0; + $this->array = []; + $this->arraySize = 0; - foreach ($this->_mirrors as $stream) { + foreach ($this->mirrors as $stream) { $stream->flushBuffers(); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php index 9ed8523..0c428f7 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php @@ -11,30 +11,27 @@ /** * Allows reading and writing of bytes to and from a file. * - * @author Chris Corbyn + * @author Chris Corbyn */ class Swift_ByteStream_FileByteStream extends Swift_ByteStream_AbstractFilterableInputStream implements Swift_FileStream { /** The internal pointer offset */ - private $_offset = 0; + private $offset = 0; /** The path to the file */ - private $_path; + private $path; /** The mode this file is opened in for writing */ - private $_mode; + private $mode; /** A lazy-loaded resource handle for reading the file */ - private $_reader; + private $reader; /** A lazy-loaded resource handle for writing the file */ - private $_writer; - - /** If magic_quotes_runtime is on, this will be true */ - private $_quotes = false; + private $writer; /** If stream is seekable true/false, or null if not known */ - private $_seekable = null; + private $seekable = null; /** * Create a new FileByteStream for $path. @@ -47,12 +44,8 @@ public function __construct($path, $writable = false) if (empty($path)) { throw new Swift_IoException('The path cannot be empty'); } - $this->_path = $path; - $this->_mode = $writable ? 'w+b' : 'rb'; - - if (function_exists('get_magic_quotes_runtime') && @get_magic_quotes_runtime() == 1) { - $this->_quotes = true; - } + $this->path = $path; + $this->mode = $writable ? 'w+b' : 'rb'; } /** @@ -62,7 +55,7 @@ public function __construct($path, $writable = false) */ public function getPath() { - return $this->_path; + return $this->path; } /** @@ -75,27 +68,21 @@ public function getPath() * * @param int $length * - * @throws Swift_IoException - * * @return string|bool + * + * @throws Swift_IoException */ public function read($length) { - $fp = $this->_getReadHandle(); + $fp = $this->getReadHandle(); if (!feof($fp)) { - if ($this->_quotes) { - ini_set('magic_quotes_runtime', 0); - } $bytes = fread($fp, $length); - if ($this->_quotes) { - ini_set('magic_quotes_runtime', 1); - } - $this->_offset = ftell($fp); + $this->offset = ftell($fp); // If we read one byte after reaching the end of the file // feof() will return false and an empty string is returned - if ($bytes === '' && feof($fp)) { - $this->_resetReadHandle(); + if ('' === $bytes && feof($fp)) { + $this->resetReadHandle(); return false; } @@ -103,7 +90,7 @@ public function read($length) return $bytes; } - $this->_resetReadHandle(); + $this->resetReadHandle(); return false; } @@ -117,95 +104,93 @@ public function read($length) */ public function setReadPointer($byteOffset) { - if (isset($this->_reader)) { - $this->_seekReadStreamToPosition($byteOffset); + if (isset($this->reader)) { + $this->seekReadStreamToPosition($byteOffset); } - $this->_offset = $byteOffset; + $this->offset = $byteOffset; } /** Just write the bytes to the file */ - protected function _commit($bytes) + protected function doCommit($bytes) { - fwrite($this->_getWriteHandle(), $bytes); - $this->_resetReadHandle(); + fwrite($this->getWriteHandle(), $bytes); + $this->resetReadHandle(); } /** Not used */ - protected function _flush() + protected function flush() { } /** Get the resource for reading */ - private function _getReadHandle() + private function getReadHandle() { - if (!isset($this->_reader)) { - $pointer = @fopen($this->_path, 'rb'); + if (!isset($this->reader)) { + $pointer = @fopen($this->path, 'rb'); if (!$pointer) { - throw new Swift_IoException( - 'Unable to open file for reading ['.$this->_path.']' - ); + throw new Swift_IoException('Unable to open file for reading ['.$this->path.']'); } - $this->_reader = $pointer; - if ($this->_offset != 0) { - $this->_getReadStreamSeekableStatus(); - $this->_seekReadStreamToPosition($this->_offset); + $this->reader = $pointer; + if (0 != $this->offset) { + $this->getReadStreamSeekableStatus(); + $this->seekReadStreamToPosition($this->offset); } } - return $this->_reader; + return $this->reader; } /** Get the resource for writing */ - private function _getWriteHandle() + private function getWriteHandle() { - if (!isset($this->_writer)) { - if (!$this->_writer = fopen($this->_path, $this->_mode)) { + if (!isset($this->writer)) { + if (!$this->writer = fopen($this->path, $this->mode)) { throw new Swift_IoException( - 'Unable to open file for writing ['.$this->_path.']' + 'Unable to open file for writing ['.$this->path.']' ); } } - return $this->_writer; + return $this->writer; } /** Force a reload of the resource for reading */ - private function _resetReadHandle() + private function resetReadHandle() { - if (isset($this->_reader)) { - fclose($this->_reader); - $this->_reader = null; + if (isset($this->reader)) { + fclose($this->reader); + $this->reader = null; } } /** Check if ReadOnly Stream is seekable */ - private function _getReadStreamSeekableStatus() + private function getReadStreamSeekableStatus() { - $metas = stream_get_meta_data($this->_reader); - $this->_seekable = $metas['seekable']; + $metas = stream_get_meta_data($this->reader); + $this->seekable = $metas['seekable']; } /** Streams in a readOnly stream ensuring copy if needed */ - private function _seekReadStreamToPosition($offset) + private function seekReadStreamToPosition($offset) { - if ($this->_seekable === null) { - $this->_getReadStreamSeekableStatus(); + if (null === $this->seekable) { + $this->getReadStreamSeekableStatus(); } - if ($this->_seekable === false) { - $currentPos = ftell($this->_reader); + if (false === $this->seekable) { + $currentPos = ftell($this->reader); if ($currentPos < $offset) { $toDiscard = $offset - $currentPos; - fread($this->_reader, $toDiscard); + fread($this->reader, $toDiscard); return; } - $this->_copyReadStream(); + $this->copyReadStream(); } - fseek($this->_reader, $offset, SEEK_SET); + fseek($this->reader, $offset, SEEK_SET); } /** Copy a readOnly Stream to ensure seekability */ - private function _copyReadStream() + private function copyReadStream() { if ($tmpFile = fopen('php://temp/maxmemory:4096', 'w+b')) { /* We have opened a php:// Stream Should work without problem */ @@ -214,11 +199,11 @@ private function _copyReadStream() } else { throw new Swift_IoException('Unable to copy the file to make it seekable, sys_temp_dir is not writable, php://memory not available'); } - $currentPos = ftell($this->_reader); - fclose($this->_reader); - $source = fopen($this->_path, 'rb'); + $currentPos = ftell($this->reader); + fclose($this->reader); + $source = fopen($this->path, 'rb'); if (!$source) { - throw new Swift_IoException('Unable to open file for copying ['.$this->_path.']'); + throw new Swift_IoException('Unable to open file for copying ['.$this->path.']'); } fseek($tmpFile, 0, SEEK_SET); while (!feof($source)) { @@ -226,6 +211,6 @@ private function _copyReadStream() } fseek($tmpFile, $currentPos, SEEK_SET); fclose($source); - $this->_reader = $tmpFile; + $this->reader = $tmpFile; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php index 1c9a80c..2d00b6a 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ByteStream/TemporaryFileByteStream.php @@ -17,7 +17,7 @@ public function __construct() { $filePath = tempnam(sys_get_temp_dir(), 'FileByteStream'); - if ($filePath === false) { + if (false === $filePath) { throw new Swift_IoException('Failed to retrieve temporary file name.'); } @@ -26,7 +26,7 @@ public function __construct() public function getContent() { - if (($content = file_get_contents($this->getPath())) === false) { + if (false === ($content = file_get_contents($this->getPath()))) { throw new Swift_IoException('Failed to get temporary file content.'); } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php index 6a18e1d..b09bb5b 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php @@ -11,8 +11,8 @@ /** * Provides fixed-width byte sizes for reading fixed-width character sets. * - * @author Chris Corbyn - * @author Xavier De Cock + * @author Chris Corbyn + * @author Xavier De Cock */ class Swift_CharacterReader_GenericFixedWidthReader implements Swift_CharacterReader { @@ -21,7 +21,7 @@ class Swift_CharacterReader_GenericFixedWidthReader implements Swift_CharacterRe * * @var int */ - private $_width; + private $width; /** * Creates a new GenericFixedWidthReader using $width bytes per character. @@ -30,7 +30,7 @@ class Swift_CharacterReader_GenericFixedWidthReader implements Swift_CharacterRe */ public function __construct($width) { - $this->_width = $width; + $this->width = $width; } /** @@ -47,11 +47,11 @@ public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredC { $strlen = strlen($string); // % and / are CPU intensive, so, maybe find a better way - $ignored = $strlen % $this->_width; + $ignored = $strlen % $this->width; $ignoredChars = $ignored ? substr($string, -$ignored) : ''; - $currentMap = $this->_width; + $currentMap = $this->width; - return ($strlen - $ignored) / $this->_width; + return ($strlen - $ignored) / $this->width; } /** @@ -80,7 +80,7 @@ public function getMapType() */ public function validateByteSequence($bytes, $size) { - $needed = $this->_width - $size; + $needed = $this->width - $size; return $needed > -1 ? $needed : -1; } @@ -92,6 +92,6 @@ public function validateByteSequence($bytes, $size) */ public function getInitialByteSize() { - return $this->_width; + return $this->width; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php index 22746bd..4a2df31 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php @@ -17,7 +17,7 @@ class Swift_CharacterReader_Utf8Reader implements Swift_CharacterReader { /** Pre-computed for optimization */ - private static $length_map = array( + private static $length_map = [ // N=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x0N 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // 0x1N @@ -35,9 +35,9 @@ class Swift_CharacterReader_Utf8Reader implements Swift_CharacterReader 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // 0xDN 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, // 0xEN 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 0, 0, // 0xFN - ); + ]; - private static $s_length_map = array( + private static $s_length_map = [ "\x00" => 1, "\x01" => 1, "\x02" => 1, "\x03" => 1, "\x04" => 1, "\x05" => 1, "\x06" => 1, "\x07" => 1, "\x08" => 1, "\x09" => 1, "\x0a" => 1, "\x0b" => 1, "\x0c" => 1, "\x0d" => 1, "\x0e" => 1, "\x0f" => 1, "\x10" => 1, "\x11" => 1, "\x12" => 1, "\x13" => 1, "\x14" => 1, "\x15" => 1, "\x16" => 1, "\x17" => 1, @@ -70,7 +70,7 @@ class Swift_CharacterReader_Utf8Reader implements Swift_CharacterReader "\xe8" => 3, "\xe9" => 3, "\xea" => 3, "\xeb" => 3, "\xec" => 3, "\xed" => 3, "\xee" => 3, "\xef" => 3, "\xf0" => 4, "\xf1" => 4, "\xf2" => 4, "\xf3" => 4, "\xf4" => 4, "\xf5" => 4, "\xf6" => 4, "\xf7" => 4, "\xf8" => 5, "\xf9" => 5, "\xfa" => 5, "\xfb" => 5, "\xfc" => 6, "\xfd" => 6, "\xfe" => 0, "\xff" => 0, - ); + ]; /** * Returns the complete character map. @@ -85,7 +85,7 @@ class Swift_CharacterReader_Utf8Reader implements Swift_CharacterReader public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) { if (!isset($currentMap['i']) || !isset($currentMap['p'])) { - $currentMap['p'] = $currentMap['i'] = array(); + $currentMap['p'] = $currentMap['i'] = []; } $strlen = strlen($string); @@ -95,12 +95,12 @@ public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredC for ($i = 0; $i < $strlen; ++$i) { $char = $string[$i]; $size = self::$s_length_map[$char]; - if ($size == 0) { + if (0 == $size) { /* char is invalid, we must wait for a resync */ $invalid = true; continue; } else { - if ($invalid == true) { + if (true === $invalid) { /* We mark the chars as invalid and start a new char */ $currentMap['p'][$charPos + $foundChars] = $startOffset + $i; $currentMap['i'][$charPos + $foundChars] = true; diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php index 9171a0b..78fffa9 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php @@ -20,14 +20,14 @@ class Swift_CharacterReaderFactory_SimpleCharacterReaderFactory implements Swift * * @var array */ - private static $_map = array(); + private static $map = []; /** * Factories which have already been loaded. * * @var Swift_CharacterReaderFactory[] */ - private static $_loaded = array(); + private static $loaded = []; /** * Creates a new CharacterReaderFactory. @@ -44,54 +44,54 @@ public function __wakeup() public function init() { - if (count(self::$_map) > 0) { + if (count(self::$map) > 0) { return; } $prefix = 'Swift_CharacterReader_'; - $singleByte = array( + $singleByte = [ 'class' => $prefix.'GenericFixedWidthReader', - 'constructor' => array(1), - ); + 'constructor' => [1], + ]; - $doubleByte = array( + $doubleByte = [ 'class' => $prefix.'GenericFixedWidthReader', - 'constructor' => array(2), - ); + 'constructor' => [2], + ]; - $fourBytes = array( + $fourBytes = [ 'class' => $prefix.'GenericFixedWidthReader', - 'constructor' => array(4), - ); + 'constructor' => [4], + ]; // Utf-8 - self::$_map['utf-?8'] = array( + self::$map['utf-?8'] = [ 'class' => $prefix.'Utf8Reader', - 'constructor' => array(), - ); + 'constructor' => [], + ]; //7-8 bit charsets - self::$_map['(us-)?ascii'] = $singleByte; - self::$_map['(iso|iec)-?8859-?[0-9]+'] = $singleByte; - self::$_map['windows-?125[0-9]'] = $singleByte; - self::$_map['cp-?[0-9]+'] = $singleByte; - self::$_map['ansi'] = $singleByte; - self::$_map['macintosh'] = $singleByte; - self::$_map['koi-?7'] = $singleByte; - self::$_map['koi-?8-?.+'] = $singleByte; - self::$_map['mik'] = $singleByte; - self::$_map['(cork|t1)'] = $singleByte; - self::$_map['v?iscii'] = $singleByte; + self::$map['(us-)?ascii'] = $singleByte; + self::$map['(iso|iec)-?8859-?[0-9]+'] = $singleByte; + self::$map['windows-?125[0-9]'] = $singleByte; + self::$map['cp-?[0-9]+'] = $singleByte; + self::$map['ansi'] = $singleByte; + self::$map['macintosh'] = $singleByte; + self::$map['koi-?7'] = $singleByte; + self::$map['koi-?8-?.+'] = $singleByte; + self::$map['mik'] = $singleByte; + self::$map['(cork|t1)'] = $singleByte; + self::$map['v?iscii'] = $singleByte; //16 bits - self::$_map['(ucs-?2|utf-?16)'] = $doubleByte; + self::$map['(ucs-?2|utf-?16)'] = $doubleByte; //32 bits - self::$_map['(ucs-?4|utf-?32)'] = $fourBytes; + self::$map['(ucs-?4|utf-?32)'] = $fourBytes; // Fallback - self::$_map['.*'] = $singleByte; + self::$map['.*'] = $singleByte; } /** @@ -103,21 +103,21 @@ public function init() */ public function getReaderFor($charset) { - $charset = trim(strtolower($charset)); - foreach (self::$_map as $pattern => $spec) { + $charset = strtolower(trim($charset)); + foreach (self::$map as $pattern => $spec) { $re = '/^'.$pattern.'$/D'; if (preg_match($re, $charset)) { - if (!array_key_exists($pattern, self::$_loaded)) { + if (!array_key_exists($pattern, self::$loaded)) { $reflector = new ReflectionClass($spec['class']); if ($reflector->getConstructor()) { $reader = $reflector->newInstanceArgs($spec['constructor']); } else { $reader = $reflector->newInstance(); } - self::$_loaded[$pattern] = $reader; + self::$loaded[$pattern] = $reader; } - return self::$_loaded[$pattern]; + return self::$loaded[$pattern]; } } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php index 7213a40..c2fb1d5 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php @@ -8,6 +8,8 @@ * file that was distributed with this source code. */ +@trigger_error(sprintf('The "%s" class is deprecated since Swiftmailer 6.2; use "%s" instead.', Swift_CharacterStream_ArrayCharacterStream::class, Swift_CharacterStream_CharacterStream::class), E_USER_DEPRECATED); + /** * A CharacterStream implementation which stores characters in an internal array. * @@ -16,28 +18,28 @@ class Swift_CharacterStream_ArrayCharacterStream implements Swift_CharacterStream { /** A map of byte values and their respective characters */ - private static $_charMap; + private static $charMap; /** A map of characters and their derivative byte values */ - private static $_byteMap; + private static $byteMap; /** The char reader (lazy-loaded) for the current charset */ - private $_charReader; + private $charReader; /** A factory for creating CharacterReader instances */ - private $_charReaderFactory; + private $charReaderFactory; /** The character set this stream is using */ - private $_charset; + private $charset; /** Array of characters */ - private $_array = array(); + private $array = []; /** Size of the array of character */ - private $_array_size = array(); + private $array_size = []; /** The current character offset in the stream */ - private $_offset = 0; + private $offset = 0; /** * Create a new CharacterStream with the given $chars, if set. @@ -47,7 +49,7 @@ class Swift_CharacterStream_ArrayCharacterStream implements Swift_CharacterStrea */ public function __construct(Swift_CharacterReaderFactory $factory, $charset) { - self::_initializeMaps(); + self::initializeMaps(); $this->setCharacterReaderFactory($factory); $this->setCharacterSet($charset); } @@ -59,18 +61,16 @@ public function __construct(Swift_CharacterReaderFactory $factory, $charset) */ public function setCharacterSet($charset) { - $this->_charset = $charset; - $this->_charReader = null; + $this->charset = $charset; + $this->charReader = null; } /** * Set the CharacterReaderFactory for multi charset support. - * - * @param Swift_CharacterReaderFactory $factory */ public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory) { - $this->_charReaderFactory = $factory; + $this->charReaderFactory = $factory; } /** @@ -80,28 +80,28 @@ public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory) */ public function importByteStream(Swift_OutputByteStream $os) { - if (!isset($this->_charReader)) { - $this->_charReader = $this->_charReaderFactory - ->getReaderFor($this->_charset); + if (!isset($this->charReader)) { + $this->charReader = $this->charReaderFactory + ->getReaderFor($this->charset); } - $startLength = $this->_charReader->getInitialByteSize(); + $startLength = $this->charReader->getInitialByteSize(); while (false !== $bytes = $os->read($startLength)) { - $c = array(); + $c = []; for ($i = 0, $len = strlen($bytes); $i < $len; ++$i) { - $c[] = self::$_byteMap[$bytes[$i]]; + $c[] = self::$byteMap[$bytes[$i]]; } $size = count($c); - $need = $this->_charReader + $need = $this->charReader ->validateByteSequence($c, $size); if ($need > 0 && false !== $bytes = $os->read($need)) { for ($i = 0, $len = strlen($bytes); $i < $len; ++$i) { - $c[] = self::$_byteMap[$bytes[$i]]; + $c[] = self::$byteMap[$bytes[$i]]; } } - $this->_array[] = $c; - ++$this->_array_size; + $this->array[] = $c; + ++$this->array_size; } } @@ -127,20 +127,20 @@ public function importString($string) */ public function read($length) { - if ($this->_offset == $this->_array_size) { + if ($this->offset == $this->array_size) { return false; } // Don't use array slice - $arrays = array(); - $end = $length + $this->_offset; - for ($i = $this->_offset; $i < $end; ++$i) { - if (!isset($this->_array[$i])) { + $arrays = []; + $end = $length + $this->offset; + for ($i = $this->offset; $i < $end; ++$i) { + if (!isset($this->array[$i])) { break; } - $arrays[] = $this->_array[$i]; + $arrays[] = $this->array[$i]; } - $this->_offset += $i - $this->_offset; // Limit function calls + $this->offset += $i - $this->offset; // Limit function calls $chars = false; foreach ($arrays as $array) { $chars .= implode('', array_map('chr', $array)); @@ -159,20 +159,20 @@ public function read($length) */ public function readBytes($length) { - if ($this->_offset == $this->_array_size) { + if ($this->offset == $this->array_size) { return false; } - $arrays = array(); - $end = $length + $this->_offset; - for ($i = $this->_offset; $i < $end; ++$i) { - if (!isset($this->_array[$i])) { + $arrays = []; + $end = $length + $this->offset; + for ($i = $this->offset; $i < $end; ++$i) { + if (!isset($this->array[$i])) { break; } - $arrays[] = $this->_array[$i]; + $arrays[] = $this->array[$i]; } - $this->_offset += ($i - $this->_offset); // Limit function calls + $this->offset += ($i - $this->offset); // Limit function calls - return call_user_func_array('array_merge', $arrays); + return array_merge(...$arrays); } /** @@ -182,28 +182,28 @@ public function readBytes($length) */ public function write($chars) { - if (!isset($this->_charReader)) { - $this->_charReader = $this->_charReaderFactory->getReaderFor( - $this->_charset); + if (!isset($this->charReader)) { + $this->charReader = $this->charReaderFactory->getReaderFor( + $this->charset); } - $startLength = $this->_charReader->getInitialByteSize(); + $startLength = $this->charReader->getInitialByteSize(); $fp = fopen('php://memory', 'w+b'); fwrite($fp, $chars); unset($chars); fseek($fp, 0, SEEK_SET); - $buffer = array(0); + $buffer = [0]; $buf_pos = 1; $buf_len = 1; $has_datas = true; do { - $bytes = array(); + $bytes = []; // Buffer Filing if ($buf_len - $buf_pos < $startLength) { $buf = array_splice($buffer, $buf_pos); - $new = $this->_reloadBuffer($fp, 100); + $new = $this->reloadBuffer($fp, 100); if ($new) { $buffer = array_merge($buf, $new); $buf_len = count($buffer); @@ -218,11 +218,11 @@ public function write($chars) ++$size; $bytes[] = $buffer[$buf_pos++]; } - $need = $this->_charReader->validateByteSequence( + $need = $this->charReader->validateByteSequence( $bytes, $size); if ($need > 0) { if ($buf_len - $buf_pos < $need) { - $new = $this->_reloadBuffer($fp, $need); + $new = $this->reloadBuffer($fp, $need); if ($new) { $buffer = array_merge($buffer, $new); @@ -233,8 +233,8 @@ public function write($chars) $bytes[] = $buffer[$buf_pos++]; } } - $this->_array[] = $bytes; - ++$this->_array_size; + $this->array[] = $bytes; + ++$this->array_size; } } while ($has_datas); @@ -248,12 +248,12 @@ public function write($chars) */ public function setPointer($charOffset) { - if ($charOffset > $this->_array_size) { - $charOffset = $this->_array_size; + if ($charOffset > $this->array_size) { + $charOffset = $this->array_size; } elseif ($charOffset < 0) { $charOffset = 0; } - $this->_offset = $charOffset; + $this->offset = $charOffset; } /** @@ -261,17 +261,17 @@ public function setPointer($charOffset) */ public function flushContents() { - $this->_offset = 0; - $this->_array = array(); - $this->_array_size = 0; + $this->offset = 0; + $this->array = []; + $this->array_size = 0; } - private function _reloadBuffer($fp, $len) + private function reloadBuffer($fp, $len) { - if (!feof($fp) && ($bytes = fread($fp, $len)) !== false) { - $buf = array(); + if (!feof($fp) && false !== ($bytes = fread($fp, $len))) { + $buf = []; for ($i = 0, $len = strlen($bytes); $i < $len; ++$i) { - $buf[] = self::$_byteMap[$bytes[$i]]; + $buf[] = self::$byteMap[$bytes[$i]]; } return $buf; @@ -280,14 +280,14 @@ private function _reloadBuffer($fp, $len) return false; } - private static function _initializeMaps() + private static function initializeMaps() { - if (!isset(self::$_charMap)) { - self::$_charMap = array(); + if (!isset(self::$charMap)) { + self::$charMap = []; for ($byte = 0; $byte < 256; ++$byte) { - self::$_charMap[$byte] = chr($byte); + self::$charMap[$byte] = chr($byte); } - self::$_byteMap = array_flip(self::$_charMap); + self::$byteMap = array_flip(self::$charMap); } } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/CharacterStream.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/CharacterStream.php new file mode 100644 index 0000000..7ce97ae --- /dev/null +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/CharacterStream.php @@ -0,0 +1,227 @@ + + */ +class Swift_CharacterStream_CharacterStream implements Swift_CharacterStream +{ + /** + * The char reader (lazy-loaded) for the current charset. + * + * @var Swift_CharacterReader + */ + private $charReader; + + /** + * A factory for creating CharacterReader instances. + * + * @var Swift_CharacterReaderFactory + */ + private $charReaderFactory; + + /** + * The character set this stream is using. + * + * @var string + */ + private $charset; + + /** + * The data's stored as-is. + * + * @var string + */ + private $datas = ''; + + /** + * Number of bytes in the stream. + * + * @var int + */ + private $datasSize = 0; + + /** + * Map. + * + * @var mixed + */ + private $map; + + /** + * Map Type. + * + * @var int + */ + private $mapType = 0; + + /** + * Number of characters in the stream. + * + * @var int + */ + private $charCount = 0; + + /** + * Position in the stream. + * + * @var int + */ + private $currentPos = 0; + + /** + * Constructor. + * + * @param string $charset + */ + public function __construct(Swift_CharacterReaderFactory $factory, $charset) + { + $this->setCharacterReaderFactory($factory); + $this->setCharacterSet($charset); + } + + /* -- Changing parameters of the stream -- */ + + /** + * Set the character set used in this CharacterStream. + * + * @param string $charset + */ + public function setCharacterSet($charset) + { + $this->charset = $charset; + $this->charReader = null; + $this->mapType = 0; + } + + /** + * Set the CharacterReaderFactory for multi charset support. + */ + public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory) + { + $this->charReaderFactory = $factory; + } + + public function flushContents() + { + $this->datas = null; + $this->map = null; + $this->charCount = 0; + $this->currentPos = 0; + $this->datasSize = 0; + } + + public function importByteStream(Swift_OutputByteStream $os) + { + $this->flushContents(); + $blocks = 512; + $os->setReadPointer(0); + while (false !== ($read = $os->read($blocks))) { + $this->write($read); + } + } + + public function importString($string) + { + $this->flushContents(); + $this->write($string); + } + + public function read($length) + { + if ($this->currentPos >= $this->charCount) { + return false; + } + $ret = false; + $length = ($this->currentPos + $length > $this->charCount) ? $this->charCount - $this->currentPos : $length; + switch ($this->mapType) { + case Swift_CharacterReader::MAP_TYPE_FIXED_LEN: + $len = $length * $this->map; + $ret = substr($this->datas, + $this->currentPos * $this->map, + $len); + $this->currentPos += $length; + break; + + case Swift_CharacterReader::MAP_TYPE_INVALID: + $ret = ''; + for (; $this->currentPos < $length; ++$this->currentPos) { + if (isset($this->map[$this->currentPos])) { + $ret .= '?'; + } else { + $ret .= $this->datas[$this->currentPos]; + } + } + break; + + case Swift_CharacterReader::MAP_TYPE_POSITIONS: + $end = $this->currentPos + $length; + $end = $end > $this->charCount ? $this->charCount : $end; + $ret = ''; + $start = 0; + if ($this->currentPos > 0) { + $start = $this->map['p'][$this->currentPos - 1]; + } + $to = $start; + for (; $this->currentPos < $end; ++$this->currentPos) { + if (isset($this->map['i'][$this->currentPos])) { + $ret .= substr($this->datas, $start, $to - $start).'?'; + $start = $this->map['p'][$this->currentPos]; + } else { + $to = $this->map['p'][$this->currentPos]; + } + } + $ret .= substr($this->datas, $start, $to - $start); + break; + } + + return $ret; + } + + public function readBytes($length) + { + $read = $this->read($length); + if (false !== $read) { + $ret = array_map('ord', str_split($read, 1)); + + return $ret; + } + + return false; + } + + public function setPointer($charOffset) + { + if ($this->charCount < $charOffset) { + $charOffset = $this->charCount; + } + $this->currentPos = $charOffset; + } + + public function write($chars) + { + if (!isset($this->charReader)) { + $this->charReader = $this->charReaderFactory->getReaderFor( + $this->charset); + $this->map = []; + $this->mapType = $this->charReader->getMapType(); + } + $ignored = ''; + $this->datas .= $chars; + $this->charCount += $this->charReader->getCharPositions(substr($this->datas, $this->datasSize), $this->datasSize, $this->map, $ignored); + if (false !== $ignored) { + $this->datasSize = strlen($this->datas) - strlen($ignored); + } else { + $this->datasSize = strlen($this->datas); + } + } +} diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php index 58bd140..d606776 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php @@ -8,260 +8,13 @@ * file that was distributed with this source code. */ +@trigger_error(sprintf('The "%s" class is deprecated since Swiftmailer 6.2; use "%s" instead.', Swift_CharacterStream_NgCharacterStream::class, Swift_CharacterStream_CharacterStream::class), E_USER_DEPRECATED); + /** * A CharacterStream implementation which stores characters in an internal array. * - * @author Xavier De Cock + * @author Xavier De Cock */ -class Swift_CharacterStream_NgCharacterStream implements Swift_CharacterStream +class Swift_CharacterStream_NgCharacterStream extends Swift_CharacterStream_CharacterStream { - /** - * The char reader (lazy-loaded) for the current charset. - * - * @var Swift_CharacterReader - */ - private $_charReader; - - /** - * A factory for creating CharacterReader instances. - * - * @var Swift_CharacterReaderFactory - */ - private $_charReaderFactory; - - /** - * The character set this stream is using. - * - * @var string - */ - private $_charset; - - /** - * The data's stored as-is. - * - * @var string - */ - private $_datas = ''; - - /** - * Number of bytes in the stream. - * - * @var int - */ - private $_datasSize = 0; - - /** - * Map. - * - * @var mixed - */ - private $_map; - - /** - * Map Type. - * - * @var int - */ - private $_mapType = 0; - - /** - * Number of characters in the stream. - * - * @var int - */ - private $_charCount = 0; - - /** - * Position in the stream. - * - * @var int - */ - private $_currentPos = 0; - - /** - * Constructor. - * - * @param Swift_CharacterReaderFactory $factory - * @param string $charset - */ - public function __construct(Swift_CharacterReaderFactory $factory, $charset) - { - $this->setCharacterReaderFactory($factory); - $this->setCharacterSet($charset); - } - - /* -- Changing parameters of the stream -- */ - - /** - * Set the character set used in this CharacterStream. - * - * @param string $charset - */ - public function setCharacterSet($charset) - { - $this->_charset = $charset; - $this->_charReader = null; - $this->_mapType = 0; - } - - /** - * Set the CharacterReaderFactory for multi charset support. - * - * @param Swift_CharacterReaderFactory $factory - */ - public function setCharacterReaderFactory(Swift_CharacterReaderFactory $factory) - { - $this->_charReaderFactory = $factory; - } - - /** - * @see Swift_CharacterStream::flushContents() - */ - public function flushContents() - { - $this->_datas = null; - $this->_map = null; - $this->_charCount = 0; - $this->_currentPos = 0; - $this->_datasSize = 0; - } - - /** - * @see Swift_CharacterStream::importByteStream() - * - * @param Swift_OutputByteStream $os - */ - public function importByteStream(Swift_OutputByteStream $os) - { - $this->flushContents(); - $blocks = 512; - $os->setReadPointer(0); - while (false !== ($read = $os->read($blocks))) { - $this->write($read); - } - } - - /** - * @see Swift_CharacterStream::importString() - * - * @param string $string - */ - public function importString($string) - { - $this->flushContents(); - $this->write($string); - } - - /** - * @see Swift_CharacterStream::read() - * - * @param int $length - * - * @return string - */ - public function read($length) - { - if ($this->_currentPos >= $this->_charCount) { - return false; - } - $ret = false; - $length = $this->_currentPos + $length > $this->_charCount ? $this->_charCount - $this->_currentPos : $length; - switch ($this->_mapType) { - case Swift_CharacterReader::MAP_TYPE_FIXED_LEN: - $len = $length * $this->_map; - $ret = substr($this->_datas, - $this->_currentPos * $this->_map, - $len); - $this->_currentPos += $length; - break; - - case Swift_CharacterReader::MAP_TYPE_INVALID: - $ret = ''; - for (; $this->_currentPos < $length; ++$this->_currentPos) { - if (isset($this->_map[$this->_currentPos])) { - $ret .= '?'; - } else { - $ret .= $this->_datas[$this->_currentPos]; - } - } - break; - - case Swift_CharacterReader::MAP_TYPE_POSITIONS: - $end = $this->_currentPos + $length; - $end = $end > $this->_charCount ? $this->_charCount : $end; - $ret = ''; - $start = 0; - if ($this->_currentPos > 0) { - $start = $this->_map['p'][$this->_currentPos - 1]; - } - $to = $start; - for (; $this->_currentPos < $end; ++$this->_currentPos) { - if (isset($this->_map['i'][$this->_currentPos])) { - $ret .= substr($this->_datas, $start, $to - $start).'?'; - $start = $this->_map['p'][$this->_currentPos]; - } else { - $to = $this->_map['p'][$this->_currentPos]; - } - } - $ret .= substr($this->_datas, $start, $to - $start); - break; - } - - return $ret; - } - - /** - * @see Swift_CharacterStream::readBytes() - * - * @param int $length - * - * @return int[] - */ - public function readBytes($length) - { - $read = $this->read($length); - if ($read !== false) { - $ret = array_map('ord', str_split($read, 1)); - - return $ret; - } - - return false; - } - - /** - * @see Swift_CharacterStream::setPointer() - * - * @param int $charOffset - */ - public function setPointer($charOffset) - { - if ($this->_charCount < $charOffset) { - $charOffset = $this->_charCount; - } - $this->_currentPos = $charOffset; - } - - /** - * @see Swift_CharacterStream::write() - * - * @param string $chars - */ - public function write($chars) - { - if (!isset($this->_charReader)) { - $this->_charReader = $this->_charReaderFactory->getReaderFor( - $this->_charset); - $this->_map = array(); - $this->_mapType = $this->_charReader->getMapType(); - } - $ignored = ''; - $this->_datas .= $chars; - $this->_charCount += $this->_charReader->getCharPositions(substr($this->_datas, $this->_datasSize), $this->_datasSize, $this->_map, $ignored); - if ($ignored !== false) { - $this->_datasSize = strlen($this->_datas) - strlen($ignored); - } else { - $this->_datasSize = strlen($this->_datas); - } - } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ConfigurableSpool.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ConfigurableSpool.php index 4ae5bac..a711bac 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ConfigurableSpool.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/ConfigurableSpool.php @@ -16,10 +16,10 @@ abstract class Swift_ConfigurableSpool implements Swift_Spool { /** The maximum number of messages to send per flush */ - private $_message_limit; + private $message_limit; /** The time limit per flush */ - private $_time_limit; + private $time_limit; /** * Sets the maximum number of messages to send per flush. @@ -28,7 +28,7 @@ abstract class Swift_ConfigurableSpool implements Swift_Spool */ public function setMessageLimit($limit) { - $this->_message_limit = (int) $limit; + $this->message_limit = (int) $limit; } /** @@ -38,7 +38,7 @@ public function setMessageLimit($limit) */ public function getMessageLimit() { - return $this->_message_limit; + return $this->message_limit; } /** @@ -48,7 +48,7 @@ public function getMessageLimit() */ public function setTimeLimit($limit) { - $this->_time_limit = (int) $limit; + $this->time_limit = (int) $limit; } /** @@ -58,6 +58,6 @@ public function setTimeLimit($limit) */ public function getTimeLimit() { - return $this->_time_limit; + return $this->time_limit; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/DependencyContainer.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/DependencyContainer.php index befec9a..b38f8ce 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/DependencyContainer.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/DependencyContainer.php @@ -11,30 +11,33 @@ /** * Dependency Injection container. * - * @author Chris Corbyn + * @author Chris Corbyn */ class Swift_DependencyContainer { /** Constant for literal value types */ - const TYPE_VALUE = 0x0001; + const TYPE_VALUE = 0x00001; /** Constant for new instance types */ - const TYPE_INSTANCE = 0x0010; + const TYPE_INSTANCE = 0x00010; /** Constant for shared instance types */ - const TYPE_SHARED = 0x0100; + const TYPE_SHARED = 0x00100; /** Constant for aliases */ - const TYPE_ALIAS = 0x1000; + const TYPE_ALIAS = 0x01000; + + /** Constant for arrays */ + const TYPE_ARRAY = 0x10000; /** Singleton instance */ - private static $_instance = null; + private static $instance = null; /** The data container */ - private $_store = array(); + private $store = []; /** The current endpoint in the data container */ - private $_endPoint; + private $endPoint; /** * Constructor should not be used. @@ -52,11 +55,11 @@ public function __construct() */ public static function getInstance() { - if (!isset(self::$_instance)) { - self::$_instance = new self(); + if (!isset(self::$instance)) { + self::$instance = new self(); } - return self::$_instance; + return self::$instance; } /** @@ -66,7 +69,7 @@ public static function getInstance() */ public function listItems() { - return array_keys($this->_store); + return array_keys($this->store); } /** @@ -80,8 +83,8 @@ public function listItems() */ public function has($itemName) { - return array_key_exists($itemName, $this->_store) - && isset($this->_store[$itemName]['lookupType']); + return array_key_exists($itemName, $this->store) + && isset($this->store[$itemName]['lookupType']); } /** @@ -91,9 +94,9 @@ public function has($itemName) * * @param string $itemName * - * @throws Swift_DependencyException If the dependency is not found - * * @return mixed + * + * @throws Swift_DependencyException If the dependency is not found */ public function lookup($itemName) { @@ -103,15 +106,17 @@ public function lookup($itemName) ); } - switch ($this->_store[$itemName]['lookupType']) { + switch ($this->store[$itemName]['lookupType']) { case self::TYPE_ALIAS: - return $this->_createAlias($itemName); + return $this->createAlias($itemName); case self::TYPE_VALUE: - return $this->_getValue($itemName); + return $this->getValue($itemName); case self::TYPE_INSTANCE: - return $this->_createNewInstance($itemName); + return $this->createNewInstance($itemName); case self::TYPE_SHARED: - return $this->_createSharedInstance($itemName); + return $this->createSharedInstance($itemName); + case self::TYPE_ARRAY: + return $this->createDependenciesFor($itemName); } } @@ -124,9 +129,9 @@ public function lookup($itemName) */ public function createDependenciesFor($itemName) { - $args = array(); - if (isset($this->_store[$itemName]['args'])) { - $args = $this->_resolveArgs($this->_store[$itemName]['args']); + $args = []; + if (isset($this->store[$itemName]['args'])) { + $args = $this->resolveArgs($this->store[$itemName]['args']); } return $args; @@ -147,8 +152,8 @@ public function createDependenciesFor($itemName) */ public function register($itemName) { - $this->_store[$itemName] = array(); - $this->_endPoint = &$this->_store[$itemName]; + $this->store[$itemName] = []; + $this->endPoint = &$this->store[$itemName]; return $this; } @@ -164,7 +169,7 @@ public function register($itemName) */ public function asValue($value) { - $endPoint = &$this->_getEndPoint(); + $endPoint = &$this->getEndPoint(); $endPoint['lookupType'] = self::TYPE_VALUE; $endPoint['value'] = $value; @@ -180,7 +185,7 @@ public function asValue($value) */ public function asAliasOf($lookup) { - $endPoint = &$this->_getEndPoint(); + $endPoint = &$this->getEndPoint(); $endPoint['lookupType'] = self::TYPE_ALIAS; $endPoint['ref'] = $lookup; @@ -202,7 +207,7 @@ public function asAliasOf($lookup) */ public function asNewInstanceOf($className) { - $endPoint = &$this->_getEndPoint(); + $endPoint = &$this->getEndPoint(); $endPoint['lookupType'] = self::TYPE_INSTANCE; $endPoint['className'] = $className; @@ -220,13 +225,28 @@ public function asNewInstanceOf($className) */ public function asSharedInstanceOf($className) { - $endPoint = &$this->_getEndPoint(); + $endPoint = &$this->getEndPoint(); $endPoint['lookupType'] = self::TYPE_SHARED; $endPoint['className'] = $className; return $this; } + /** + * Specify the previously registered item as array of dependencies. + * + * {@link register()} must be called before this will work. + * + * @return $this + */ + public function asArray() + { + $endPoint = &$this->getEndPoint(); + $endPoint['lookupType'] = self::TYPE_ARRAY; + + return $this; + } + /** * Specify a list of injected dependencies for the previously registered item. * @@ -234,14 +254,12 @@ public function asSharedInstanceOf($className) * * @see addConstructorValue(), addConstructorLookup() * - * @param array $lookups - * * @return $this */ public function withDependencies(array $lookups) { - $endPoint = &$this->_getEndPoint(); - $endPoint['args'] = array(); + $endPoint = &$this->getEndPoint(); + $endPoint['args'] = []; foreach ($lookups as $lookup) { $this->addConstructorLookup($lookup); } @@ -261,11 +279,11 @@ public function withDependencies(array $lookups) */ public function addConstructorValue($value) { - $endPoint = &$this->_getEndPoint(); + $endPoint = &$this->getEndPoint(); if (!isset($endPoint['args'])) { - $endPoint['args'] = array(); + $endPoint['args'] = []; } - $endPoint['args'][] = array('type' => 'value', 'item' => $value); + $endPoint['args'][] = ['type' => 'value', 'item' => $value]; return $this; } @@ -282,31 +300,31 @@ public function addConstructorValue($value) */ public function addConstructorLookup($lookup) { - $endPoint = &$this->_getEndPoint(); - if (!isset($this->_endPoint['args'])) { - $endPoint['args'] = array(); + $endPoint = &$this->getEndPoint(); + if (!isset($this->endPoint['args'])) { + $endPoint['args'] = []; } - $endPoint['args'][] = array('type' => 'lookup', 'item' => $lookup); + $endPoint['args'][] = ['type' => 'lookup', 'item' => $lookup]; return $this; } /** Get the literal value with $itemName */ - private function _getValue($itemName) + private function getValue($itemName) { - return $this->_store[$itemName]['value']; + return $this->store[$itemName]['value']; } /** Resolve an alias to another item */ - private function _createAlias($itemName) + private function createAlias($itemName) { - return $this->lookup($this->_store[$itemName]['ref']); + return $this->lookup($this->store[$itemName]['ref']); } /** Create a fresh instance of $itemName */ - private function _createNewInstance($itemName) + private function createNewInstance($itemName) { - $reflector = new ReflectionClass($this->_store[$itemName]['className']); + $reflector = new ReflectionClass($this->store[$itemName]['className']); if ($reflector->getConstructor()) { return $reflector->newInstanceArgs( $this->createDependenciesFor($itemName) @@ -317,35 +335,35 @@ private function _createNewInstance($itemName) } /** Create and register a shared instance of $itemName */ - private function _createSharedInstance($itemName) + private function createSharedInstance($itemName) { - if (!isset($this->_store[$itemName]['instance'])) { - $this->_store[$itemName]['instance'] = $this->_createNewInstance($itemName); + if (!isset($this->store[$itemName]['instance'])) { + $this->store[$itemName]['instance'] = $this->createNewInstance($itemName); } - return $this->_store[$itemName]['instance']; + return $this->store[$itemName]['instance']; } /** Get the current endpoint in the store */ - private function &_getEndPoint() + private function &getEndPoint() { - if (!isset($this->_endPoint)) { + if (!isset($this->endPoint)) { throw new BadMethodCallException( 'Component must first be registered by calling register()' ); } - return $this->_endPoint; + return $this->endPoint; } /** Get an argument list with dependencies resolved */ - private function _resolveArgs(array $args) + private function resolveArgs(array $args) { - $resolved = array(); + $resolved = []; foreach ($args as $argDefinition) { switch ($argDefinition['type']) { case 'lookup': - $resolved[] = $this->_lookupRecursive($argDefinition['item']); + $resolved[] = $this->lookupRecursive($argDefinition['item']); break; case 'value': $resolved[] = $argDefinition['item']; @@ -357,12 +375,12 @@ private function _resolveArgs(array $args) } /** Resolve a single dependency with an collections */ - private function _lookupRecursive($item) + private function lookupRecursive($item) { if (is_array($item)) { - $collection = array(); + $collection = []; foreach ($item as $k => $v) { - $collection[$k] = $this->_lookupRecursive($v); + $collection[$k] = $this->lookupRecursive($v); } return $collection; diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/EmbeddedFile.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/EmbeddedFile.php index d8c72ad..20b8141 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/EmbeddedFile.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/EmbeddedFile.php @@ -27,7 +27,7 @@ class Swift_EmbeddedFile extends Swift_Mime_EmbeddedFile public function __construct($data = null, $filename = null, $contentType = null) { call_user_func_array( - array($this, 'Swift_Mime_EmbeddedFile::__construct'), + [$this, 'Swift_Mime_EmbeddedFile::__construct'], Swift_DependencyContainer::getInstance() ->createDependenciesFor('mime.embeddedfile') ); @@ -39,20 +39,6 @@ public function __construct($data = null, $filename = null, $contentType = null) } } - /** - * Create a new EmbeddedFile. - * - * @param string|Swift_OutputByteStream $data - * @param string $filename - * @param string $contentType - * - * @return Swift_Mime_EmbeddedFile - */ - public static function newInstance($data = null, $filename = null, $contentType = null) - { - return new self($data, $filename, $contentType); - } - /** * Create a new EmbeddedFile from a filesystem path. * @@ -62,8 +48,6 @@ public static function newInstance($data = null, $filename = null, $contentType */ public static function fromPath($path) { - return self::newInstance()->setFile( - new Swift_ByteStream_FileByteStream($path) - ); + return (new self())->setFile(new Swift_ByteStream_FileByteStream($path)); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php index edec10c..95b4ae9 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php @@ -13,7 +13,7 @@ * * Possibly the most accurate RFC 2045 QP implementation found in PHP. * - * @author Chris Corbyn + * @author Chris Corbyn */ class Swift_Encoder_QpEncoder implements Swift_Encoder { @@ -22,21 +22,21 @@ class Swift_Encoder_QpEncoder implements Swift_Encoder * * @var Swift_CharacterStream */ - protected $_charStream; + protected $charStream; /** * A filter used if input should be canonicalized. * * @var Swift_StreamFilter */ - protected $_filter; + protected $filter; /** * Pre-computed QP for HUGE optimization. * * @var string[] */ - protected static $_qpMap = array( + protected static $qpMap = [ 0 => '=00', 1 => '=01', 2 => '=02', 3 => '=03', 4 => '=04', 5 => '=05', 6 => '=06', 7 => '=07', 8 => '=08', 9 => '=09', 10 => '=0A', 11 => '=0B', 12 => '=0C', 13 => '=0D', 14 => '=0E', @@ -89,16 +89,16 @@ class Swift_Encoder_QpEncoder implements Swift_Encoder 245 => '=F5', 246 => '=F6', 247 => '=F7', 248 => '=F8', 249 => '=F9', 250 => '=FA', 251 => '=FB', 252 => '=FC', 253 => '=FD', 254 => '=FE', 255 => '=FF', - ); + ]; - protected static $_safeMapShare = array(); + protected static $safeMapShare = []; /** * A map of non-encoded ascii characters. * * @var string[] */ - protected $_safeMap = array(); + protected $safeMap = []; /** * Creates a new QpEncoder for the given CharacterStream. @@ -108,28 +108,28 @@ class Swift_Encoder_QpEncoder implements Swift_Encoder */ public function __construct(Swift_CharacterStream $charStream, Swift_StreamFilter $filter = null) { - $this->_charStream = $charStream; - if (!isset(self::$_safeMapShare[$this->getSafeMapShareId()])) { + $this->charStream = $charStream; + if (!isset(self::$safeMapShare[$this->getSafeMapShareId()])) { $this->initSafeMap(); - self::$_safeMapShare[$this->getSafeMapShareId()] = $this->_safeMap; + self::$safeMapShare[$this->getSafeMapShareId()] = $this->safeMap; } else { - $this->_safeMap = self::$_safeMapShare[$this->getSafeMapShareId()]; + $this->safeMap = self::$safeMapShare[$this->getSafeMapShareId()]; } - $this->_filter = $filter; + $this->filter = $filter; } public function __sleep() { - return array('_charStream', '_filter'); + return ['charStream', 'filter']; } public function __wakeup() { - if (!isset(self::$_safeMapShare[$this->getSafeMapShareId()])) { + if (!isset(self::$safeMapShare[$this->getSafeMapShareId()])) { $this->initSafeMap(); - self::$_safeMapShare[$this->getSafeMapShareId()] = $this->_safeMap; + self::$safeMapShare[$this->getSafeMapShareId()] = $this->safeMap; } else { - $this->_safeMap = self::$_safeMapShare[$this->getSafeMapShareId()]; + $this->safeMap = self::$safeMapShare[$this->getSafeMapShareId()]; } } @@ -141,8 +141,8 @@ protected function getSafeMapShareId() protected function initSafeMap() { foreach (array_merge( - array(0x09, 0x20), range(0x21, 0x3C), range(0x3E, 0x7E)) as $byte) { - $this->_safeMap[$byte] = chr($byte); + [0x09, 0x20], range(0x21, 0x3C), range(0x3E, 0x7E)) as $byte) { + $this->safeMap[$byte] = chr($byte); } } @@ -153,9 +153,9 @@ protected function initSafeMap() * If the first line needs to be shorter, indicate the difference with * $firstLineOffset. * - * @param string $string to encode - * @param int $firstLineOffset, optional - * @param int $maxLineLength, optional 0 indicates the default of 76 chars + * @param string $string to encode + * @param int $firstLineOffset optional + * @param int $maxLineLength optional 0 indicates the default of 76 chars * * @return string */ @@ -167,25 +167,25 @@ public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) $thisLineLength = $maxLineLength - $firstLineOffset; - $lines = array(); + $lines = []; $lNo = 0; $lines[$lNo] = ''; $currentLine = &$lines[$lNo++]; $size = $lineLen = 0; - $this->_charStream->flushContents(); - $this->_charStream->importString($string); + $this->charStream->flushContents(); + $this->charStream->importString($string); // Fetching more than 4 chars at one is slower, as is fetching fewer bytes // Conveniently 4 chars is the UTF-8 safe number since UTF-8 has up to 6 // bytes per char and (6 * 4 * 3 = 72 chars per line) * =NN is 3 bytes - while (false !== $bytes = $this->_nextSequence()) { + while (false !== $bytes = $this->nextSequence()) { // If we're filtering the input - if (isset($this->_filter)) { + if (isset($this->filter)) { // If we can't filter because we need more bytes - while ($this->_filter->shouldBuffer($bytes)) { + while ($this->filter->shouldBuffer($bytes)) { // Then collect bytes into the buffer - if (false === $moreBytes = $this->_nextSequence(1)) { + if (false === $moreBytes = $this->nextSequence(1)) { break; } @@ -194,13 +194,13 @@ public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) } } // And filter them - $bytes = $this->_filter->filter($bytes); + $bytes = $this->filter->filter($bytes); } - $enc = $this->_encodeByteSequence($bytes, $size); + $enc = $this->encodeByteSequence($bytes, $size); $i = strpos($enc, '=0D=0A'); - $newLineLength = $lineLen + ($i === false ? $size : $i); + $newLineLength = $lineLen + (false === $i ? $size : $i); if ($currentLine && $newLineLength >= $thisLineLength) { $lines[$lNo] = ''; @@ -211,7 +211,7 @@ public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) $currentLine .= $enc; - if ($i === false) { + if (false === $i) { $lineLen += $size; } else { // 6 is the length of '=0D=0A'. @@ -219,7 +219,7 @@ public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) } } - return $this->_standardize(implode("=\r\n", $lines)); + return $this->standardize(implode("=\r\n", $lines)); } /** @@ -229,7 +229,7 @@ public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) */ public function charsetChanged($charset) { - $this->_charStream->setCharacterSet($charset); + $this->charStream->setCharacterSet($charset); } /** @@ -240,16 +240,16 @@ public function charsetChanged($charset) * * @return string */ - protected function _encodeByteSequence(array $bytes, &$size) + protected function encodeByteSequence(array $bytes, &$size) { $ret = ''; $size = 0; foreach ($bytes as $b) { - if (isset($this->_safeMap[$b])) { - $ret .= $this->_safeMap[$b]; + if (isset($this->safeMap[$b])) { + $ret .= $this->safeMap[$b]; ++$size; } else { - $ret .= self::$_qpMap[$b]; + $ret .= self::$qpMap[$b]; $size += 3; } } @@ -264,9 +264,9 @@ protected function _encodeByteSequence(array $bytes, &$size) * * @return int[] */ - protected function _nextSequence($size = 4) + protected function nextSequence($size = 4) { - return $this->_charStream->readBytes($size); + return $this->charStream->readBytes($size); } /** @@ -276,15 +276,15 @@ protected function _nextSequence($size = 4) * * @return string */ - protected function _standardize($string) + protected function standardize($string) { - $string = str_replace(array("\t=0D=0A", ' =0D=0A', '=0D=0A'), - array("=09\r\n", "=20\r\n", "\r\n"), $string + $string = str_replace(["\t=0D=0A", ' =0D=0A', '=0D=0A'], + ["=09\r\n", "=20\r\n", "\r\n"], $string ); switch ($end = ord(substr($string, -1))) { case 0x09: case 0x20: - $string = substr_replace($string, self::$_qpMap[$end], -1); + $string = substr_replace($string, self::$qpMap[$end], -1); } return $string; @@ -295,6 +295,6 @@ protected function _standardize($string) */ public function __clone() { - $this->_charStream = clone $this->_charStream; + $this->charStream = clone $this->charStream; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php index b0215e8..2458515 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php @@ -20,16 +20,14 @@ class Swift_Encoder_Rfc2231Encoder implements Swift_Encoder * * @var Swift_CharacterStream */ - private $_charStream; + private $charStream; /** * Creates a new Rfc2231Encoder using the given character stream instance. - * - * @param Swift_CharacterStream */ public function __construct(Swift_CharacterStream $charStream) { - $this->_charStream = $charStream; + $this->charStream = $charStream; } /** @@ -44,7 +42,7 @@ public function __construct(Swift_CharacterStream $charStream) */ public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) { - $lines = array(); + $lines = []; $lineCount = 0; $lines[] = ''; $currentLine = &$lines[$lineCount++]; @@ -53,12 +51,12 @@ public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) $maxLineLength = 75; } - $this->_charStream->flushContents(); - $this->_charStream->importString($string); + $this->charStream->flushContents(); + $this->charStream->importString($string); $thisLineLength = $maxLineLength - $firstLineOffset; - while (false !== $char = $this->_charStream->read(4)) { + while (false !== $char = $this->charStream->read(4)) { $encodedChar = rawurlencode($char); if (0 != strlen($currentLine) && strlen($currentLine.$encodedChar) > $thisLineLength) { @@ -79,7 +77,7 @@ public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) */ public function charsetChanged($charset) { - $this->_charStream->setCharacterSet($charset); + $this->charStream->setCharacterSet($charset); } /** @@ -87,6 +85,6 @@ public function charsetChanged($charset) */ public function __clone() { - $this->_charStream = clone $this->_charStream; + $this->charStream = clone $this->charStream; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoding.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoding.php deleted file mode 100644 index 2458787..0000000 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Encoding.php +++ /dev/null @@ -1,62 +0,0 @@ -lookup($key); - } -} diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/CommandEvent.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/CommandEvent.php index 674e6b5..18994c1 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/CommandEvent.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/CommandEvent.php @@ -20,27 +20,26 @@ class Swift_Events_CommandEvent extends Swift_Events_EventObject * * @var string */ - private $_command; + private $command; /** * An array of codes which a successful response will contain. * * @var int[] */ - private $_successCodes = array(); + private $successCodes = []; /** * Create a new CommandEvent for $source with $command. * - * @param Swift_Transport $source - * @param string $command - * @param array $successCodes + * @param string $command + * @param array $successCodes */ - public function __construct(Swift_Transport $source, $command, $successCodes = array()) + public function __construct(Swift_Transport $source, $command, $successCodes = []) { parent::__construct($source); - $this->_command = $command; - $this->_successCodes = $successCodes; + $this->command = $command; + $this->successCodes = $successCodes; } /** @@ -50,7 +49,7 @@ public function __construct(Swift_Transport $source, $command, $successCodes = a */ public function getCommand() { - return $this->_command; + return $this->command; } /** @@ -60,6 +59,6 @@ public function getCommand() */ public function getSuccessCodes() { - return $this->_successCodes; + return $this->successCodes; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php index aac36aa..a01dfa2 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php @@ -19,11 +19,11 @@ interface Swift_Events_EventDispatcher * Create a new SendEvent for $source and $message. * * @param Swift_Transport $source - * @param Swift_Mime_Message + * @param Swift_Mime_SimpleMessage * * @return Swift_Events_SendEvent */ - public function createSendEvent(Swift_Transport $source, Swift_Mime_Message $message); + public function createSendEvent(Swift_Transport $source, Swift_Mime_SimpleMessage $message); /** * Create a new CommandEvent for $source and $command. @@ -34,7 +34,7 @@ public function createSendEvent(Swift_Transport $source, Swift_Mime_Message $mes * * @return Swift_Events_CommandEvent */ - public function createCommandEvent(Swift_Transport $source, $command, $successCodes = array()); + public function createCommandEvent(Swift_Transport $source, $command, $successCodes = []); /** * Create a new ResponseEvent for $source and $response. diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/EventObject.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/EventObject.php index 90694a9..24a11f4 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/EventObject.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/EventObject.php @@ -16,10 +16,10 @@ class Swift_Events_EventObject implements Swift_Events_Event { /** The source of this Event */ - private $_source; + private $source; /** The state of this Event (should it bubble up the stack?) */ - private $_bubbleCancelled = false; + private $bubbleCancelled = false; /** * Create a new EventObject originating at $source. @@ -28,7 +28,7 @@ class Swift_Events_EventObject implements Swift_Events_Event */ public function __construct($source) { - $this->_source = $source; + $this->source = $source; } /** @@ -38,17 +38,15 @@ public function __construct($source) */ public function getSource() { - return $this->_source; + return $this->source; } /** * Prevent this Event from bubbling any further up the stack. - * - * @param bool $cancel, optional */ public function cancelBubble($cancel = true) { - $this->_bubbleCancelled = $cancel; + $this->bubbleCancelled = $cancel; } /** @@ -58,6 +56,6 @@ public function cancelBubble($cancel = true) */ public function bubbleCancelled() { - return $this->_bubbleCancelled; + return $this->bubbleCancelled; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php index 2e92ba9..ff7c371 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php @@ -20,27 +20,26 @@ class Swift_Events_ResponseEvent extends Swift_Events_EventObject * * @var bool */ - private $_valid; + private $valid; /** * The response received from the server. * * @var string */ - private $_response; + private $response; /** * Create a new ResponseEvent for $source and $response. * - * @param Swift_Transport $source - * @param string $response - * @param bool $valid + * @param string $response + * @param bool $valid */ public function __construct(Swift_Transport $source, $response, $valid = false) { parent::__construct($source); - $this->_response = $response; - $this->_valid = $valid; + $this->response = $response; + $this->valid = $valid; } /** @@ -50,7 +49,7 @@ public function __construct(Swift_Transport $source, $response, $valid = false) */ public function getResponse() { - return $this->_response; + return $this->response; } /** @@ -60,6 +59,6 @@ public function getResponse() */ public function isValid() { - return $this->_valid; + return $this->valid; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SendEvent.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SendEvent.php index 10da808..a435691 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SendEvent.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SendEvent.php @@ -33,35 +33,32 @@ class Swift_Events_SendEvent extends Swift_Events_EventObject /** * The Message being sent. * - * @var Swift_Mime_Message + * @var Swift_Mime_SimpleMessage */ - private $_message; + private $message; /** * Any recipients which failed after sending. * * @var string[] */ - private $_failedRecipients = array(); + private $failedRecipients = []; /** * The overall result as a bitmask from the class constants. * * @var int */ - private $_result; + private $result; /** * Create a new SendEvent for $source and $message. - * - * @param Swift_Transport $source - * @param Swift_Mime_Message $message */ - public function __construct(Swift_Transport $source, Swift_Mime_Message $message) + public function __construct(Swift_Transport $source, Swift_Mime_SimpleMessage $message) { parent::__construct($source); - $this->_message = $message; - $this->_result = self::RESULT_PENDING; + $this->message = $message; + $this->result = self::RESULT_PENDING; } /** @@ -77,11 +74,11 @@ public function getTransport() /** * Get the Message being sent. * - * @return Swift_Mime_Message + * @return Swift_Mime_SimpleMessage */ public function getMessage() { - return $this->_message; + return $this->message; } /** @@ -91,7 +88,7 @@ public function getMessage() */ public function setFailedRecipients($recipients) { - $this->_failedRecipients = $recipients; + $this->failedRecipients = $recipients; } /** @@ -101,7 +98,7 @@ public function setFailedRecipients($recipients) */ public function getFailedRecipients() { - return $this->_failedRecipients; + return $this->failedRecipients; } /** @@ -111,7 +108,7 @@ public function getFailedRecipients() */ public function setResult($result) { - $this->_result = $result; + $this->result = $result; } /** @@ -124,6 +121,6 @@ public function setResult($result) */ public function getResult() { - return $this->_result; + return $this->result; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php index e8aca75..1396f61 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php @@ -16,37 +16,34 @@ class Swift_Events_SimpleEventDispatcher implements Swift_Events_EventDispatcher { /** A map of event types to their associated listener types */ - private $_eventMap = array(); + private $eventMap = []; /** Event listeners bound to this dispatcher */ - private $_listeners = array(); + private $listeners = []; /** Listeners queued to have an Event bubbled up the stack to them */ - private $_bubbleQueue = array(); + private $bubbleQueue = []; /** * Create a new EventDispatcher. */ public function __construct() { - $this->_eventMap = array( + $this->eventMap = [ 'Swift_Events_CommandEvent' => 'Swift_Events_CommandListener', 'Swift_Events_ResponseEvent' => 'Swift_Events_ResponseListener', 'Swift_Events_SendEvent' => 'Swift_Events_SendListener', 'Swift_Events_TransportChangeEvent' => 'Swift_Events_TransportChangeListener', 'Swift_Events_TransportExceptionEvent' => 'Swift_Events_TransportExceptionListener', - ); + ]; } /** * Create a new SendEvent for $source and $message. * - * @param Swift_Transport $source - * @param Swift_Mime_Message - * * @return Swift_Events_SendEvent */ - public function createSendEvent(Swift_Transport $source, Swift_Mime_Message $message) + public function createSendEvent(Swift_Transport $source, Swift_Mime_SimpleMessage $message) { return new Swift_Events_SendEvent($source, $message); } @@ -54,13 +51,12 @@ public function createSendEvent(Swift_Transport $source, Swift_Mime_Message $mes /** * Create a new CommandEvent for $source and $command. * - * @param Swift_Transport $source - * @param string $command That will be executed - * @param array $successCodes That are needed + * @param string $command That will be executed + * @param array $successCodes That are needed * * @return Swift_Events_CommandEvent */ - public function createCommandEvent(Swift_Transport $source, $command, $successCodes = array()) + public function createCommandEvent(Swift_Transport $source, $command, $successCodes = []) { return new Swift_Events_CommandEvent($source, $command, $successCodes); } @@ -68,9 +64,8 @@ public function createCommandEvent(Swift_Transport $source, $command, $successCo /** * Create a new ResponseEvent for $source and $response. * - * @param Swift_Transport $source - * @param string $response - * @param bool $valid If the response is valid + * @param string $response + * @param bool $valid If the response is valid * * @return Swift_Events_ResponseEvent */ @@ -82,8 +77,6 @@ public function createResponseEvent(Swift_Transport $source, $response, $valid) /** * Create a new TransportChangeEvent for $source. * - * @param Swift_Transport $source - * * @return Swift_Events_TransportChangeEvent */ public function createTransportChangeEvent(Swift_Transport $source) @@ -94,9 +87,6 @@ public function createTransportChangeEvent(Swift_Transport $source) /** * Create a new TransportExceptionEvent for $source. * - * @param Swift_Transport $source - * @param Swift_TransportException $ex - * * @return Swift_Events_TransportExceptionEvent */ public function createTransportExceptionEvent(Swift_Transport $source, Swift_TransportException $ex) @@ -106,51 +96,48 @@ public function createTransportExceptionEvent(Swift_Transport $source, Swift_Tra /** * Bind an event listener to this dispatcher. - * - * @param Swift_Events_EventListener $listener */ public function bindEventListener(Swift_Events_EventListener $listener) { - foreach ($this->_listeners as $l) { + foreach ($this->listeners as $l) { // Already loaded if ($l === $listener) { return; } } - $this->_listeners[] = $listener; + $this->listeners[] = $listener; } /** * Dispatch the given Event to all suitable listeners. * - * @param Swift_Events_EventObject $evt - * @param string $target method + * @param string $target method */ public function dispatchEvent(Swift_Events_EventObject $evt, $target) { - $this->_prepareBubbleQueue($evt); - $this->_bubble($evt, $target); + $this->prepareBubbleQueue($evt); + $this->bubble($evt, $target); } /** Queue listeners on a stack ready for $evt to be bubbled up it */ - private function _prepareBubbleQueue(Swift_Events_EventObject $evt) + private function prepareBubbleQueue(Swift_Events_EventObject $evt) { - $this->_bubbleQueue = array(); + $this->bubbleQueue = []; $evtClass = get_class($evt); - foreach ($this->_listeners as $listener) { - if (array_key_exists($evtClass, $this->_eventMap) - && ($listener instanceof $this->_eventMap[$evtClass])) { - $this->_bubbleQueue[] = $listener; + foreach ($this->listeners as $listener) { + if (array_key_exists($evtClass, $this->eventMap) + && ($listener instanceof $this->eventMap[$evtClass])) { + $this->bubbleQueue[] = $listener; } } } /** Bubble $evt up the stack calling $target() on each listener */ - private function _bubble(Swift_Events_EventObject $evt, $target) + private function bubble(Swift_Events_EventObject $evt, $target) { - if (!$evt->bubbleCancelled() && $listener = array_shift($this->_bubbleQueue)) { + if (!$evt->bubbleCancelled() && $listener = array_shift($this->bubbleQueue)) { $listener->$target($evt); - $this->_bubble($evt, $target); + $this->bubble($evt, $target); } } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php index f87154f..df442cc 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php @@ -20,18 +20,15 @@ class Swift_Events_TransportExceptionEvent extends Swift_Events_EventObject * * @var Swift_TransportException */ - private $_exception; + private $exception; /** * Create a new TransportExceptionEvent for $transport. - * - * @param Swift_Transport $transport - * @param Swift_TransportException $ex */ public function __construct(Swift_Transport $transport, Swift_TransportException $ex) { parent::__construct($transport); - $this->_exception = $ex; + $this->exception = $ex; } /** @@ -41,6 +38,6 @@ public function __construct(Swift_Transport $transport, Swift_TransportException */ public function getException() { - return $this->_exception; + return $this->exception; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FailoverTransport.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FailoverTransport.php index 9951c59..0044be5 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FailoverTransport.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FailoverTransport.php @@ -20,26 +20,14 @@ class Swift_FailoverTransport extends Swift_Transport_FailoverTransport * * @param Swift_Transport[] $transports */ - public function __construct($transports = array()) + public function __construct($transports = []) { call_user_func_array( - array($this, 'Swift_Transport_FailoverTransport::__construct'), + [$this, 'Swift_Transport_FailoverTransport::__construct'], Swift_DependencyContainer::getInstance() ->createDependenciesFor('transport.failover') ); $this->setTransports($transports); } - - /** - * Create a new FailoverTransport instance. - * - * @param Swift_Transport[] $transports - * - * @return self - */ - public static function newInstance($transports = array()) - { - return new self($transports); - } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FileSpool.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FileSpool.php index c82c5db..d16c47c 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FileSpool.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/FileSpool.php @@ -17,14 +17,14 @@ class Swift_FileSpool extends Swift_ConfigurableSpool { /** The spool directory */ - private $_path; + private $path; /** * File WriteRetry Limit. * * @var int */ - private $_retryLimit = 10; + private $retryLimit = 10; /** * Create a new FileSpool. @@ -35,11 +35,11 @@ class Swift_FileSpool extends Swift_ConfigurableSpool */ public function __construct($path) { - $this->_path = $path; + $this->path = $path; - if (!file_exists($this->_path)) { - if (!mkdir($this->_path, 0777, true)) { - throw new Swift_IoException(sprintf('Unable to create path "%s".', $this->_path)); + if (!file_exists($this->path)) { + if (!mkdir($this->path, 0777, true)) { + throw new Swift_IoException(sprintf('Unable to create path "%s".', $this->path)); } } } @@ -77,25 +77,25 @@ public function stop() */ public function setRetryLimit($limit) { - $this->_retryLimit = $limit; + $this->retryLimit = $limit; } /** * Queues a message. * - * @param Swift_Mime_Message $message The message to store + * @param Swift_Mime_SimpleMessage $message The message to store * * @throws Swift_IoException * * @return bool */ - public function queueMessage(Swift_Mime_Message $message) + public function queueMessage(Swift_Mime_SimpleMessage $message) { $ser = serialize($message); - $fileName = $this->_path.'/'.$this->getRandomString(10); - for ($i = 0; $i < $this->_retryLimit; ++$i) { + $fileName = $this->path.'/'.$this->getRandomString(10); + for ($i = 0; $i < $this->retryLimit; ++$i) { /* We try an exclusive creation of the file. This is an atomic operation, it avoid locking mechanism */ - $fp = @fopen($fileName.'.message', 'x'); + $fp = @fopen($fileName.'.message', 'xb'); if (false !== $fp) { if (false === fwrite($fp, $ser)) { return false; @@ -108,7 +108,7 @@ public function queueMessage(Swift_Mime_Message $message) } } - throw new Swift_IoException(sprintf('Unable to create a file for enqueuing Message in "%s".', $this->_path)); + throw new Swift_IoException(sprintf('Unable to create a file for enqueuing Message in "%s".', $this->path)); } /** @@ -118,10 +118,10 @@ public function queueMessage(Swift_Mime_Message $message) */ public function recover($timeout = 900) { - foreach (new DirectoryIterator($this->_path) as $file) { + foreach (new DirectoryIterator($this->path) as $file) { $file = $file->getRealPath(); - if (substr($file, -16) == '.message.sending') { + if ('.message.sending' == substr($file, -16)) { $lockedtime = filectime($file); if ((time() - $lockedtime) > $timeout) { rename($file, substr($file, 0, -8)); @@ -140,12 +140,12 @@ public function recover($timeout = 900) */ public function flushQueue(Swift_Transport $transport, &$failedRecipients = null) { - $directoryIterator = new DirectoryIterator($this->_path); + $directoryIterator = new DirectoryIterator($this->path); /* Start the transport only if there are queued files to send */ if (!$transport->isStarted()) { foreach ($directoryIterator as $file) { - if (substr($file->getRealPath(), -8) == '.message') { + if ('.message' == substr($file->getRealPath(), -8)) { $transport->start(); break; } @@ -158,7 +158,7 @@ public function flushQueue(Swift_Transport $transport, &$failedRecipients = null foreach ($directoryIterator as $file) { $file = $file->getRealPath(); - if (substr($file, -8) != '.message') { + if ('.message' != substr($file, -8)) { continue; } @@ -200,7 +200,7 @@ protected function getRandomString($count) $ret = ''; $strlen = strlen($base); for ($i = 0; $i < $count; ++$i) { - $ret .= $base[((int) rand(0, $strlen - 1))]; + $ret .= $base[random_int(0, $strlen - 1)]; } return $ret; diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/IdGenerator.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/IdGenerator.php new file mode 100644 index 0000000..c845d85 --- /dev/null +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/IdGenerator.php @@ -0,0 +1,22 @@ +setFile(new Swift_ByteStream_FileByteStream($path)); + return (new self())->setFile(new Swift_ByteStream_FileByteStream($path)); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/InputByteStream.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/InputByteStream.php index 56efc75..379a5a1 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/InputByteStream.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/InputByteStream.php @@ -52,7 +52,7 @@ public function commit(); * * @param Swift_InputByteStream $is */ - public function bind(Swift_InputByteStream $is); + public function bind(self $is); /** * Remove an already bound stream. @@ -63,7 +63,7 @@ public function bind(Swift_InputByteStream $is); * * @param Swift_InputByteStream $is */ - public function unbind(Swift_InputByteStream $is); + public function unbind(self $is); /** * Flush the contents of the stream (empty it) and set the internal pointer diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/IoException.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/IoException.php index c405f35..5452bd4 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/IoException.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/IoException.php @@ -18,9 +18,8 @@ class Swift_IoException extends Swift_SwiftException /** * Create a new IoException with $message. * - * @param string $message - * @param int $code - * @param Exception $previous + * @param string $message + * @param int $code */ public function __construct($message, $code = 0, Exception $previous = null) { diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php index b37f07f..76fafdf 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php @@ -20,24 +20,22 @@ class Swift_KeyCache_ArrayKeyCache implements Swift_KeyCache * * @var array */ - private $_contents = array(); + private $contents = []; /** * An InputStream for cloning. * * @var Swift_KeyCache_KeyCacheInputStream */ - private $_stream; + private $stream; /** * Create a new ArrayKeyCache with the given $stream for cloning to make * InputByteStreams. - * - * @param Swift_KeyCache_KeyCacheInputStream $stream */ public function __construct(Swift_KeyCache_KeyCacheInputStream $stream) { - $this->_stream = $stream; + $this->stream = $stream; } /** @@ -52,16 +50,16 @@ public function __construct(Swift_KeyCache_KeyCacheInputStream $stream) */ public function setString($nsKey, $itemKey, $string, $mode) { - $this->_prepareCache($nsKey); + $this->prepareCache($nsKey); switch ($mode) { case self::MODE_WRITE: - $this->_contents[$nsKey][$itemKey] = $string; + $this->contents[$nsKey][$itemKey] = $string; break; case self::MODE_APPEND: if (!$this->hasKey($nsKey, $itemKey)) { - $this->_contents[$nsKey][$itemKey] = ''; + $this->contents[$nsKey][$itemKey] = ''; } - $this->_contents[$nsKey][$itemKey] .= $string; + $this->contents[$nsKey][$itemKey] .= $string; break; default: throw new Swift_SwiftException( @@ -76,23 +74,23 @@ public function setString($nsKey, $itemKey, $string, $mode) * * @see MODE_WRITE, MODE_APPEND * - * @param string $nsKey - * @param string $itemKey - * @param Swift_OutputByteStream $os - * @param int $mode + * @param string $nsKey + * @param string $itemKey + * @param int $mode */ public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) { - $this->_prepareCache($nsKey); + $this->prepareCache($nsKey); switch ($mode) { case self::MODE_WRITE: $this->clearKey($nsKey, $itemKey); + // no break case self::MODE_APPEND: if (!$this->hasKey($nsKey, $itemKey)) { - $this->_contents[$nsKey][$itemKey] = ''; + $this->contents[$nsKey][$itemKey] = ''; } while (false !== $bytes = $os->read(8192)) { - $this->_contents[$nsKey][$itemKey] .= $bytes; + $this->contents[$nsKey][$itemKey] .= $bytes; } break; default: @@ -108,15 +106,14 @@ public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $o * * NOTE: The stream will always write in append mode. * - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $writeThrough + * @param string $nsKey + * @param string $itemKey * * @return Swift_InputByteStream */ public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) { - $is = clone $this->_stream; + $is = clone $this->stream; $is->setKeyCache($this); $is->setNsKey($nsKey); $is->setItemKey($itemKey); @@ -137,9 +134,9 @@ public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writ */ public function getString($nsKey, $itemKey) { - $this->_prepareCache($nsKey); + $this->prepareCache($nsKey); if ($this->hasKey($nsKey, $itemKey)) { - return $this->_contents[$nsKey][$itemKey]; + return $this->contents[$nsKey][$itemKey]; } } @@ -152,7 +149,7 @@ public function getString($nsKey, $itemKey) */ public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) { - $this->_prepareCache($nsKey); + $this->prepareCache($nsKey); $is->write($this->getString($nsKey, $itemKey)); } @@ -166,9 +163,9 @@ public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) */ public function hasKey($nsKey, $itemKey) { - $this->_prepareCache($nsKey); + $this->prepareCache($nsKey); - return array_key_exists($itemKey, $this->_contents[$nsKey]); + return array_key_exists($itemKey, $this->contents[$nsKey]); } /** @@ -179,7 +176,7 @@ public function hasKey($nsKey, $itemKey) */ public function clearKey($nsKey, $itemKey) { - unset($this->_contents[$nsKey][$itemKey]); + unset($this->contents[$nsKey][$itemKey]); } /** @@ -189,7 +186,7 @@ public function clearKey($nsKey, $itemKey) */ public function clearAll($nsKey) { - unset($this->_contents[$nsKey]); + unset($this->contents[$nsKey]); } /** @@ -197,10 +194,10 @@ public function clearAll($nsKey) * * @param string $nsKey */ - private function _prepareCache($nsKey) + private function prepareCache($nsKey) { - if (!array_key_exists($nsKey, $this->_contents)) { - $this->_contents[$nsKey] = array(); + if (!array_key_exists($nsKey, $this->contents)) { + $this->contents[$nsKey] = []; } } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php index 453f50a..7dc2886 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php @@ -29,44 +29,32 @@ class Swift_KeyCache_DiskKeyCache implements Swift_KeyCache * * @var Swift_KeyCache_KeyCacheInputStream */ - private $_stream; + private $stream; /** * A path to write to. * * @var string */ - private $_path; + private $path; /** * Stored keys. * * @var array */ - private $_keys = array(); - - /** - * Will be true if magic_quotes_runtime is turned on. - * - * @var bool - */ - private $_quotes = false; + private $keys = []; /** * Create a new DiskKeyCache with the given $stream for cloning to make * InputByteStreams, and the given $path to save to. * - * @param Swift_KeyCache_KeyCacheInputStream $stream - * @param string $path to save to + * @param string $path to save to */ public function __construct(Swift_KeyCache_KeyCacheInputStream $stream, $path) { - $this->_stream = $stream; - $this->_path = $path; - - if (function_exists('get_magic_quotes_runtime') && @get_magic_quotes_runtime() == 1) { - $this->_quotes = true; - } + $this->stream = $stream; + $this->path = $path; } /** @@ -83,13 +71,13 @@ public function __construct(Swift_KeyCache_KeyCacheInputStream $stream, $path) */ public function setString($nsKey, $itemKey, $string, $mode) { - $this->_prepareCache($nsKey); + $this->prepareCache($nsKey); switch ($mode) { case self::MODE_WRITE: - $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START); + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); break; case self::MODE_APPEND: - $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_END); + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_END); break; default: throw new Swift_SwiftException( @@ -99,7 +87,7 @@ public function setString($nsKey, $itemKey, $string, $mode) break; } fwrite($fp, $string); - $this->_freeHandle($nsKey, $itemKey); + $this->freeHandle($nsKey, $itemKey); } /** @@ -107,22 +95,21 @@ public function setString($nsKey, $itemKey, $string, $mode) * * @see MODE_WRITE, MODE_APPEND * - * @param string $nsKey - * @param string $itemKey - * @param Swift_OutputByteStream $os - * @param int $mode + * @param string $nsKey + * @param string $itemKey + * @param int $mode * * @throws Swift_IoException */ public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) { - $this->_prepareCache($nsKey); + $this->prepareCache($nsKey); switch ($mode) { case self::MODE_WRITE: - $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START); + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); break; case self::MODE_APPEND: - $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_END); + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_END); break; default: throw new Swift_SwiftException( @@ -134,7 +121,7 @@ public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $o while (false !== $bytes = $os->read(8192)) { fwrite($fp, $bytes); } - $this->_freeHandle($nsKey, $itemKey); + $this->freeHandle($nsKey, $itemKey); } /** @@ -142,15 +129,14 @@ public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $o * * NOTE: The stream will always write in append mode. * - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $writeThrough + * @param string $nsKey + * @param string $itemKey * * @return Swift_InputByteStream */ public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writeThrough = null) { - $is = clone $this->_stream; + $is = clone $this->stream; $is->setKeyCache($this); $is->setNsKey($nsKey); $is->setItemKey($itemKey); @@ -173,20 +159,14 @@ public function getInputByteStream($nsKey, $itemKey, Swift_InputByteStream $writ */ public function getString($nsKey, $itemKey) { - $this->_prepareCache($nsKey); + $this->prepareCache($nsKey); if ($this->hasKey($nsKey, $itemKey)) { - $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START); - if ($this->_quotes) { - ini_set('magic_quotes_runtime', 0); - } + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); $str = ''; while (!feof($fp) && false !== $bytes = fread($fp, 8192)) { $str .= $bytes; } - if ($this->_quotes) { - ini_set('magic_quotes_runtime', 1); - } - $this->_freeHandle($nsKey, $itemKey); + $this->freeHandle($nsKey, $itemKey); return $str; } @@ -202,17 +182,11 @@ public function getString($nsKey, $itemKey) public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) { if ($this->hasKey($nsKey, $itemKey)) { - $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START); - if ($this->_quotes) { - ini_set('magic_quotes_runtime', 0); - } + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_START); while (!feof($fp) && false !== $bytes = fread($fp, 8192)) { $is->write($bytes); } - if ($this->_quotes) { - ini_set('magic_quotes_runtime', 1); - } - $this->_freeHandle($nsKey, $itemKey); + $this->freeHandle($nsKey, $itemKey); } } @@ -226,7 +200,7 @@ public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) */ public function hasKey($nsKey, $itemKey) { - return is_file($this->_path.'/'.$nsKey.'/'.$itemKey); + return is_file($this->path.'/'.$nsKey.'/'.$itemKey); } /** @@ -238,8 +212,8 @@ public function hasKey($nsKey, $itemKey) public function clearKey($nsKey, $itemKey) { if ($this->hasKey($nsKey, $itemKey)) { - $this->_freeHandle($nsKey, $itemKey); - unlink($this->_path.'/'.$nsKey.'/'.$itemKey); + $this->freeHandle($nsKey, $itemKey); + unlink($this->path.'/'.$nsKey.'/'.$itemKey); } } @@ -250,14 +224,14 @@ public function clearKey($nsKey, $itemKey) */ public function clearAll($nsKey) { - if (array_key_exists($nsKey, $this->_keys)) { - foreach ($this->_keys[$nsKey] as $itemKey => $null) { + if (array_key_exists($nsKey, $this->keys)) { + foreach ($this->keys[$nsKey] as $itemKey => $null) { $this->clearKey($nsKey, $itemKey); } - if (is_dir($this->_path.'/'.$nsKey)) { - rmdir($this->_path.'/'.$nsKey); + if (is_dir($this->path.'/'.$nsKey)) { + rmdir($this->path.'/'.$nsKey); } - unset($this->_keys[$nsKey]); + unset($this->keys[$nsKey]); } } @@ -266,14 +240,14 @@ public function clearAll($nsKey) * * @param string $nsKey */ - private function _prepareCache($nsKey) + private function prepareCache($nsKey) { - $cacheDir = $this->_path.'/'.$nsKey; + $cacheDir = $this->path.'/'.$nsKey; if (!is_dir($cacheDir)) { if (!mkdir($cacheDir)) { throw new Swift_IoException('Failed to create cache directory '.$cacheDir); } - $this->_keys[$nsKey] = array(); + $this->keys[$nsKey] = []; } } @@ -286,27 +260,27 @@ private function _prepareCache($nsKey) * * @return resource */ - private function _getHandle($nsKey, $itemKey, $position) + private function getHandle($nsKey, $itemKey, $position) { - if (!isset($this->_keys[$nsKey][$itemKey])) { + if (!isset($this->keys[$nsKey][$itemKey])) { $openMode = $this->hasKey($nsKey, $itemKey) ? 'r+b' : 'w+b'; - $fp = fopen($this->_path.'/'.$nsKey.'/'.$itemKey, $openMode); - $this->_keys[$nsKey][$itemKey] = $fp; + $fp = fopen($this->path.'/'.$nsKey.'/'.$itemKey, $openMode); + $this->keys[$nsKey][$itemKey] = $fp; } if (self::POSITION_START == $position) { - fseek($this->_keys[$nsKey][$itemKey], 0, SEEK_SET); + fseek($this->keys[$nsKey][$itemKey], 0, SEEK_SET); } elseif (self::POSITION_END == $position) { - fseek($this->_keys[$nsKey][$itemKey], 0, SEEK_END); + fseek($this->keys[$nsKey][$itemKey], 0, SEEK_END); } - return $this->_keys[$nsKey][$itemKey]; + return $this->keys[$nsKey][$itemKey]; } - private function _freeHandle($nsKey, $itemKey) + private function freeHandle($nsKey, $itemKey) { - $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_CURRENT); + $fp = $this->getHandle($nsKey, $itemKey, self::POSITION_CURRENT); fclose($fp); - $this->_keys[$nsKey][$itemKey] = null; + $this->keys[$nsKey][$itemKey] = null; } /** @@ -314,7 +288,7 @@ private function _freeHandle($nsKey, $itemKey) */ public function __destruct() { - foreach ($this->_keys as $nsKey => $null) { + foreach ($this->keys as $nsKey => $null) { $this->clearAll($nsKey); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php index 4efe785..957b1b2 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php @@ -34,10 +34,9 @@ public function setString($nsKey, $itemKey, $string, $mode) * * @see MODE_WRITE, MODE_APPEND * - * @param string $nsKey - * @param string $itemKey - * @param Swift_OutputByteStream $os - * @param int $mode + * @param string $nsKey + * @param string $itemKey + * @param int $mode */ public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, $mode) { @@ -48,9 +47,8 @@ public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $o * * NOTE: The stream will always write in append mode. * - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $writeThrough + * @param string $nsKey + * @param string $itemKey * * @return Swift_InputByteStream */ diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php index b00d458..03bab48 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php @@ -16,35 +16,31 @@ class Swift_KeyCache_SimpleKeyCacheInputStream implements Swift_KeyCache_KeyCacheInputStream { /** The KeyCache being written to */ - private $_keyCache; + private $keyCache; /** The nsKey of the KeyCache being written to */ - private $_nsKey; + private $nsKey; /** The itemKey of the KeyCache being written to */ - private $_itemKey; + private $itemKey; /** A stream to write through on each write() */ - private $_writeThrough = null; + private $writeThrough = null; /** * Set the KeyCache to wrap. - * - * @param Swift_KeyCache $keyCache */ public function setKeyCache(Swift_KeyCache $keyCache) { - $this->_keyCache = $keyCache; + $this->keyCache = $keyCache; } /** * Specify a stream to write through for each write(). - * - * @param Swift_InputByteStream $is */ public function setWriteThroughStream(Swift_InputByteStream $is) { - $this->_writeThrough = $is; + $this->writeThrough = $is; } /** @@ -55,14 +51,14 @@ public function setWriteThroughStream(Swift_InputByteStream $is) */ public function write($bytes, Swift_InputByteStream $is = null) { - $this->_keyCache->setString( - $this->_nsKey, $this->_itemKey, $bytes, Swift_KeyCache::MODE_APPEND + $this->keyCache->setString( + $this->nsKey, $this->itemKey, $bytes, Swift_KeyCache::MODE_APPEND ); if (isset($is)) { $is->write($bytes); } - if (isset($this->_writeThrough)) { - $this->_writeThrough->write($bytes); + if (isset($this->writeThrough)) { + $this->writeThrough->write($bytes); } } @@ -93,7 +89,7 @@ public function unbind(Swift_InputByteStream $is) */ public function flushBuffers() { - $this->_keyCache->clearKey($this->_nsKey, $this->_itemKey); + $this->keyCache->clearKey($this->nsKey, $this->itemKey); } /** @@ -103,7 +99,7 @@ public function flushBuffers() */ public function setNsKey($nsKey) { - $this->_nsKey = $nsKey; + $this->nsKey = $nsKey; } /** @@ -113,7 +109,7 @@ public function setNsKey($nsKey) */ public function setItemKey($itemKey) { - $this->_itemKey = $itemKey; + $this->itemKey = $itemKey; } /** @@ -122,6 +118,6 @@ public function setItemKey($itemKey) */ public function __clone() { - $this->_writeThrough = null; + $this->writeThrough = null; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php index e151b8a..ce732af 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php @@ -20,26 +20,14 @@ class Swift_LoadBalancedTransport extends Swift_Transport_LoadBalancedTransport * * @param array $transports */ - public function __construct($transports = array()) + public function __construct($transports = []) { call_user_func_array( - array($this, 'Swift_Transport_LoadBalancedTransport::__construct'), + [$this, 'Swift_Transport_LoadBalancedTransport::__construct'], Swift_DependencyContainer::getInstance() ->createDependenciesFor('transport.loadbalanced') ); $this->setTransports($transports); } - - /** - * Create a new LoadBalancedTransport instance. - * - * @param array $transports - * - * @return self - */ - public static function newInstance($transports = array()) - { - return new self($transports); - } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MailTransport.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MailTransport.php deleted file mode 100644 index 1855698..0000000 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MailTransport.php +++ /dev/null @@ -1,47 +0,0 @@ -createDependenciesFor('transport.mail') - ); - - $this->setExtraParams($extraParams); - } - - /** - * Create a new MailTransport instance. - * - * @param string $extraParams To be passed to mail() - * - * @return self - */ - public static function newInstance($extraParams = '-f%s') - { - return new self($extraParams); - } -} diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php index 8314fe8..5763007 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer.php @@ -16,28 +16,14 @@ class Swift_Mailer { /** The Transport used to send messages */ - private $_transport; + private $transport; /** * Create a new Mailer using $transport for delivery. - * - * @param Swift_Transport $transport */ public function __construct(Swift_Transport $transport) { - $this->_transport = $transport; - } - - /** - * Create a new Mailer instance. - * - * @param Swift_Transport $transport - * - * @return self - */ - public static function newInstance(Swift_Transport $transport) - { - return new self($transport); + $this->transport = $transport; } /** @@ -66,23 +52,23 @@ public function createMessage($service = 'message') * The return value is the number of recipients who were accepted for * delivery. * - * @param Swift_Mime_Message $message - * @param array $failedRecipients An array of failures by-reference + * @param array $failedRecipients An array of failures by-reference * * @return int The number of successful recipients. Can be 0 which indicates failure */ - public function send(Swift_Mime_Message $message, &$failedRecipients = null) + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) { $failedRecipients = (array) $failedRecipients; - if (!$this->_transport->isStarted()) { - $this->_transport->start(); + // FIXME: to be removed in 7.0 (as transport must now start itself on send) + if (!$this->transport->isStarted()) { + $this->transport->start(); } $sent = 0; try { - $sent = $this->_transport->send($message, $failedRecipients); + $sent = $this->transport->send($message, $failedRecipients); } catch (Swift_RfcComplianceException $e) { foreach ($message->getTo() as $address => $name) { $failedRecipients[] = $address; @@ -94,12 +80,10 @@ public function send(Swift_Mime_Message $message, &$failedRecipients = null) /** * Register a plugin using a known unique key (e.g. myPlugin). - * - * @param Swift_Events_EventListener $plugin */ public function registerPlugin(Swift_Events_EventListener $plugin) { - $this->_transport->registerPlugin($plugin); + $this->transport->registerPlugin($plugin); } /** @@ -109,6 +93,6 @@ public function registerPlugin(Swift_Events_EventListener $plugin) */ public function getTransport() { - return $this->_transport; + return $this->transport; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php index e3e6cad..19aa82a 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php @@ -20,16 +20,14 @@ class Swift_Mailer_ArrayRecipientIterator implements Swift_Mailer_RecipientItera * * @var array */ - private $_recipients = array(); + private $recipients = []; /** * Create a new ArrayRecipientIterator from $recipients. - * - * @param array $recipients */ public function __construct(array $recipients) { - $this->_recipients = $recipients; + $this->recipients = $recipients; } /** @@ -39,7 +37,7 @@ public function __construct(array $recipients) */ public function hasNext() { - return !empty($this->_recipients); + return !empty($this->recipients); } /** @@ -50,6 +48,6 @@ public function hasNext() */ public function nextRecipient() { - return array_splice($this->_recipients, 0, 1); + return array_splice($this->recipients, 0, 1); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MemorySpool.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MemorySpool.php index 2cafb67..e3b0894 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MemorySpool.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MemorySpool.php @@ -15,7 +15,7 @@ */ class Swift_MemorySpool implements Swift_Spool { - protected $messages = array(); + protected $messages = []; private $flushRetries = 3; /** @@ -53,11 +53,11 @@ public function setFlushRetries($retries) /** * Stores a message in the queue. * - * @param Swift_Mime_Message $message The message to store + * @param Swift_Mime_SimpleMessage $message The message to store * * @return bool Whether the operation has succeeded */ - public function queueMessage(Swift_Mime_Message $message) + public function queueMessage(Swift_Mime_SimpleMessage $message) { //clone the message to make sure it is not changed while in the queue $this->messages[] = clone $message; diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Message.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Message.php index 242cbf3..42b861f 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Message.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Message.php @@ -18,17 +18,17 @@ class Swift_Message extends Swift_Mime_SimpleMessage /** * @var Swift_Signers_HeaderSigner[] */ - private $headerSigners = array(); + private $headerSigners = []; /** * @var Swift_Signers_BodySigner[] */ - private $bodySigners = array(); + private $bodySigners = []; /** * @var array */ - private $savedMessage = array(); + private $savedMessage = []; /** * Create a new Message. @@ -43,7 +43,7 @@ class Swift_Message extends Swift_Mime_SimpleMessage public function __construct($subject = null, $body = null, $contentType = null, $charset = null) { call_user_func_array( - array($this, 'Swift_Mime_SimpleMessage::__construct'), + [$this, 'Swift_Mime_SimpleMessage::__construct'], Swift_DependencyContainer::getInstance() ->createDependenciesFor('mime.message') ); @@ -60,21 +60,6 @@ public function __construct($subject = null, $body = null, $contentType = null, } } - /** - * Create a new Message. - * - * @param string $subject - * @param string $body - * @param string $contentType - * @param string $charset - * - * @return $this - */ - public static function newInstance($subject = null, $body = null, $contentType = null, $charset = null) - { - return new self($subject, $body, $contentType, $charset); - } - /** * Add a MimePart to this Message. * @@ -86,13 +71,11 @@ public static function newInstance($subject = null, $body = null, $contentType = */ public function addPart($body, $contentType = null, $charset = null) { - return $this->attach(Swift_MimePart::newInstance($body, $contentType, $charset)->setEncoder($this->getEncoder())); + return $this->attach((new Swift_MimePart($body, $contentType, $charset))->setEncoder($this->getEncoder())); } /** - * Detach a signature handler from a message. - * - * @param Swift_Signer $signer + * Attach a new signature handler to the message. * * @return $this */ @@ -108,9 +91,7 @@ public function attachSigner(Swift_Signer $signer) } /** - * Attach a new signature handler to the message. - * - * @param Swift_Signer $signer + * Detach a signature handler from a message. * * @return $this */ @@ -137,6 +118,19 @@ public function detachSigner(Swift_Signer $signer) return $this; } + /** + * Clear all signature handlers attached to the message. + * + * @return $this + */ + public function clearSigners() + { + $this->headerSigners = []; + $this->bodySigners = []; + + return $this; + } + /** * Get this message as a complete string. * @@ -161,8 +155,6 @@ public function toString() /** * Write this message to a {@link Swift_InputByteStream}. - * - * @param Swift_InputByteStream $is */ public function toByteStream(Swift_InputByteStream $is) { @@ -205,7 +197,7 @@ protected function doSign() $signer->setHeaders($this->getHeaders()); $signer->startBody(); - $this->_bodyToByteStream($signer); + $this->bodyToByteStream($signer); $signer->endBody(); $signer->addSignature($this->getHeaders()); @@ -217,19 +209,17 @@ protected function doSign() */ protected function saveMessage() { - $this->savedMessage = array('headers' => array()); + $this->savedMessage = ['headers' => []]; $this->savedMessage['body'] = $this->getBody(); $this->savedMessage['children'] = $this->getChildren(); - if (count($this->savedMessage['children']) > 0 && $this->getBody() != '') { - $this->setChildren(array_merge(array($this->_becomeMimePart()), $this->savedMessage['children'])); + if (count($this->savedMessage['children']) > 0 && '' != $this->getBody()) { + $this->setChildren(array_merge([$this->becomeMimePart()], $this->savedMessage['children'])); $this->setBody(''); } } /** * save the original headers. - * - * @param array $altered */ protected function saveHeaders(array $altered) { @@ -267,7 +257,7 @@ protected function restoreMessage() $this->setChildren($this->savedMessage['children']); $this->restoreHeaders(); - $this->savedMessage = array(); + $this->savedMessage = []; } /** diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Attachment.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Attachment.php index d5ba14b..917007e 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Attachment.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Attachment.php @@ -16,23 +16,19 @@ class Swift_Mime_Attachment extends Swift_Mime_SimpleMimeEntity { /** Recognized MIME types */ - private $_mimeTypes = array(); + private $mimeTypes = []; /** * Create a new Attachment with $headers, $encoder and $cache. * - * @param Swift_Mime_HeaderSet $headers - * @param Swift_Mime_ContentEncoder $encoder - * @param Swift_KeyCache $cache - * @param Swift_Mime_Grammar $grammar - * @param array $mimeTypes optional + * @param array $mimeTypes */ - public function __construct(Swift_Mime_HeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_Mime_Grammar $grammar, $mimeTypes = array()) + public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $mimeTypes = []) { - parent::__construct($headers, $encoder, $cache, $grammar); + parent::__construct($headers, $encoder, $cache, $idGenerator); $this->setDisposition('attachment'); $this->setContentType('application/octet-stream'); - $this->_mimeTypes = $mimeTypes; + $this->mimeTypes = $mimeTypes; } /** @@ -56,7 +52,7 @@ public function getNestingLevel() */ public function getDisposition() { - return $this->_getHeaderFieldModel('Content-Disposition'); + return $this->getHeaderFieldModel('Content-Disposition'); } /** @@ -68,7 +64,7 @@ public function getDisposition() */ public function setDisposition($disposition) { - if (!$this->_setHeaderFieldModel('Content-Disposition', $disposition)) { + if (!$this->setHeaderFieldModel('Content-Disposition', $disposition)) { $this->getHeaders()->addParameterizedHeader('Content-Disposition', $disposition); } @@ -82,7 +78,7 @@ public function setDisposition($disposition) */ public function getFilename() { - return $this->_getHeaderParameter('Content-Disposition', 'filename'); + return $this->getHeaderParameter('Content-Disposition', 'filename'); } /** @@ -94,8 +90,8 @@ public function getFilename() */ public function setFilename($filename) { - $this->_setHeaderParameter('Content-Disposition', 'filename', $filename); - $this->_setHeaderParameter('Content-Type', 'name', $filename); + $this->setHeaderParameter('Content-Disposition', 'filename', $filename); + $this->setHeaderParameter('Content-Type', 'name', $filename); return $this; } @@ -107,7 +103,7 @@ public function setFilename($filename) */ public function getSize() { - return $this->_getHeaderParameter('Content-Disposition', 'size'); + return $this->getHeaderParameter('Content-Disposition', 'size'); } /** @@ -119,7 +115,7 @@ public function getSize() */ public function setSize($size) { - $this->_setHeaderParameter('Content-Disposition', 'size', $size); + $this->setHeaderParameter('Content-Disposition', 'size', $size); return $this; } @@ -127,8 +123,7 @@ public function setSize($size) /** * Set the file that this attachment is for. * - * @param Swift_FileStream $file - * @param string $contentType optional + * @param string $contentType optional * * @return $this */ @@ -139,8 +134,8 @@ public function setFile(Swift_FileStream $file, $contentType = null) if (!isset($contentType)) { $extension = strtolower(substr($file->getPath(), strrpos($file->getPath(), '.') + 1)); - if (array_key_exists($extension, $this->_mimeTypes)) { - $this->setContentType($this->_mimeTypes[$extension]); + if (array_key_exists($extension, $this->mimeTypes)) { + $this->setContentType($this->mimeTypes[$extension]); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php index 8f76d70..8c4e226 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php @@ -18,10 +18,7 @@ class Swift_Mime_ContentEncoder_Base64ContentEncoder extends Swift_Encoder_Base6 /** * Encode stream $in to stream $out. * - * @param Swift_OutputByteStream $os - * @param Swift_InputByteStream $is - * @param int $firstLineOffset - * @param int $maxLineLength, optional, 0 indicates the default of 76 bytes + * @param int $firstLineOffset */ public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) { @@ -41,7 +38,7 @@ public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStre // When the OutputStream is empty, we must flush any remainder bytes. while (true) { $readBytes = $os->read(8192); - $atEOF = ($readBytes === false); + $atEOF = (false === $readBytes); if ($atEOF) { $streamTheseBytes = $base64ReadBufferRemainderBytes; @@ -51,7 +48,7 @@ public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStre $base64ReadBufferRemainderBytes = null; $bytesLength = strlen($streamTheseBytes); - if ($bytesLength === 0) { // no data left to encode + if (0 === $bytesLength) { // no data left to encode break; } @@ -59,7 +56,7 @@ public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStre // and carry over remainder 1-2 bytes to the next loop iteration if (!$atEOF) { $excessBytes = $bytesLength % 3; - if ($excessBytes !== 0) { + if (0 !== $excessBytes) { $base64ReadBufferRemainderBytes = substr($streamTheseBytes, -$excessBytes); $streamTheseBytes = substr($streamTheseBytes, 0, $bytesLength - $excessBytes); } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php index 710b5ac..9aae487 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/NativeQpContentEncoder.php @@ -50,7 +50,7 @@ public function charsetChanged($charset) */ public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) { - if ($this->charset !== 'utf-8') { + if ('utf-8' !== $this->charset) { throw new RuntimeException( sprintf('Charset "%s" not supported. NativeQpContentEncoder only supports "utf-8"', $this->charset)); } @@ -87,12 +87,12 @@ public function getName() */ public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) { - if ($this->charset !== 'utf-8') { + if ('utf-8' !== $this->charset) { throw new RuntimeException( sprintf('Charset "%s" not supported. NativeQpContentEncoder only supports "utf-8"', $this->charset)); } - return $this->_standardize(quoted_printable_encode($string)); + return $this->standardize(quoted_printable_encode($string)); } /** @@ -102,14 +102,14 @@ public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) * * @return string */ - protected function _standardize($string) + protected function standardize($string) { // transform CR or LF to CRLF $string = preg_replace('~=0D(?!=0A)|(? + */ +class Swift_Mime_ContentEncoder_NullContentEncoder implements Swift_Mime_ContentEncoder +{ + /** + * The name of this encoding scheme (probably 7bit or 8bit). + * + * @var string + */ + private $_name; + + /** + * Creates a new NullContentEncoder with $name (probably 7bit or 8bit). + * + * @param string $name + */ + public function __construct($name) + { + $this->_name = $name; + } + + /** + * Encode a given string to produce an encoded string. + * + * @param string $string + * @param int $firstLineOffset ignored + * @param int $maxLineLength ignored + * + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) + { + return $string; + } + + /** + * Encode stream $in to stream $out. + * + * @param int $firstLineOffset ignored + * @param int $maxLineLength ignored + */ + public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) + { + while (false !== ($bytes = $os->read(8192))) { + $is->write($bytes); + } + } + + /** + * Get the name of this encoding scheme. + * + * @return string + */ + public function getName() + { + return $this->_name; + } + + /** + * Not used. + */ + public function charsetChanged($charset) + { + } +} diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php index 219f482..aa634f5 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php @@ -11,6 +11,10 @@ /** * Handles binary/7/8-bit Transfer Encoding in Swift Mailer. * + * When sending 8-bit content over SMTP, you should use + * Swift_Transport_Esmtp_EightBitMimeHandler to enable the 8BITMIME SMTP + * extension. + * * @author Chris Corbyn */ class Swift_Mime_ContentEncoder_PlainContentEncoder implements Swift_Mime_ContentEncoder @@ -20,14 +24,14 @@ class Swift_Mime_ContentEncoder_PlainContentEncoder implements Swift_Mime_Conten * * @var string */ - private $_name; + private $name; /** * True if canonical transformations should be done. * * @var bool */ - private $_canonical; + private $canonical; /** * Creates a new PlainContentEncoder with $name (probably 7bit or 8bit). @@ -37,8 +41,8 @@ class Swift_Mime_ContentEncoder_PlainContentEncoder implements Swift_Mime_Conten */ public function __construct($name, $canonical = false) { - $this->_name = $name; - $this->_canonical = $canonical; + $this->name = $name; + $this->canonical = $canonical; } /** @@ -52,30 +56,28 @@ public function __construct($name, $canonical = false) */ public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) { - if ($this->_canonical) { - $string = $this->_canonicalize($string); + if ($this->canonical) { + $string = $this->canonicalize($string); } - return $this->_safeWordWrap($string, $maxLineLength, "\r\n"); + return $this->safeWordwrap($string, $maxLineLength, "\r\n"); } /** * Encode stream $in to stream $out. * - * @param Swift_OutputByteStream $os - * @param Swift_InputByteStream $is - * @param int $firstLineOffset ignored - * @param int $maxLineLength optional, 0 means no wrapping will occur + * @param int $firstLineOffset ignored + * @param int $maxLineLength optional, 0 means no wrapping will occur */ public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) { $leftOver = ''; while (false !== $bytes = $os->read(8192)) { $toencode = $leftOver.$bytes; - if ($this->_canonical) { - $toencode = $this->_canonicalize($toencode); + if ($this->canonical) { + $toencode = $this->canonicalize($toencode); } - $wrapped = $this->_safeWordWrap($toencode, $maxLineLength, "\r\n"); + $wrapped = $this->safeWordwrap($toencode, $maxLineLength, "\r\n"); $lastLinePos = strrpos($wrapped, "\r\n"); $leftOver = substr($wrapped, $lastLinePos); $wrapped = substr($wrapped, 0, $lastLinePos); @@ -94,7 +96,7 @@ public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStre */ public function getName() { - return $this->_name; + return $this->name; } /** @@ -113,7 +115,7 @@ public function charsetChanged($charset) * * @return string */ - private function _safeWordwrap($string, $length = 75, $le = "\r\n") + private function safeWordwrap($string, $length = 75, $le = "\r\n") { if (0 >= $length) { return $string; @@ -121,7 +123,7 @@ private function _safeWordwrap($string, $length = 75, $le = "\r\n") $originalLines = explode($le, $string); - $lines = array(); + $lines = []; $lineCount = 0; foreach ($originalLines as $originalLine) { @@ -151,11 +153,11 @@ private function _safeWordwrap($string, $length = 75, $le = "\r\n") * * @return string */ - private function _canonicalize($string) + private function canonicalize($string) { return str_replace( - array("\r\n", "\r", "\n"), - array("\n", "\n", "\r\n"), + ["\r\n", "\r", "\n"], + ["\n", "\n", "\r\n"], $string ); } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php index 5cc907b..84e3d24 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php @@ -11,11 +11,11 @@ /** * Handles Quoted Printable (QP) Transfer Encoding in Swift Mailer. * - * @author Chris Corbyn + * @author Chris Corbyn */ class Swift_Mime_ContentEncoder_QpContentEncoder extends Swift_Encoder_QpEncoder implements Swift_Mime_ContentEncoder { - protected $_dotEscape; + protected $dotEscape; /** * Creates a new QpContentEncoder for the given CharacterStream. @@ -26,26 +26,26 @@ class Swift_Mime_ContentEncoder_QpContentEncoder extends Swift_Encoder_QpEncoder */ public function __construct(Swift_CharacterStream $charStream, Swift_StreamFilter $filter = null, $dotEscape = false) { - $this->_dotEscape = $dotEscape; + $this->dotEscape = $dotEscape; parent::__construct($charStream, $filter); } public function __sleep() { - return array('_charStream', '_filter', '_dotEscape'); + return ['charStream', 'filter', 'dotEscape']; } protected function getSafeMapShareId() { - return get_class($this).($this->_dotEscape ? '.dotEscape' : ''); + return get_class($this).($this->dotEscape ? '.dotEscape' : ''); } protected function initSafeMap() { parent::initSafeMap(); - if ($this->_dotEscape) { + if ($this->dotEscape) { /* Encode . as =2e for buggy remote servers */ - unset($this->_safeMap[0x2e]); + unset($this->safeMap[0x2e]); } } @@ -69,20 +69,20 @@ public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStre $thisLineLength = $maxLineLength - $firstLineOffset; - $this->_charStream->flushContents(); - $this->_charStream->importByteStream($os); + $this->charStream->flushContents(); + $this->charStream->importByteStream($os); $currentLine = ''; $prepend = ''; $size = $lineLen = 0; - while (false !== $bytes = $this->_nextSequence()) { + while (false !== $bytes = $this->nextSequence()) { // If we're filtering the input - if (isset($this->_filter)) { + if (isset($this->filter)) { // If we can't filter because we need more bytes - while ($this->_filter->shouldBuffer($bytes)) { + while ($this->filter->shouldBuffer($bytes)) { // Then collect bytes into the buffer - if (false === $moreBytes = $this->_nextSequence(1)) { + if (false === $moreBytes = $this->nextSequence(1)) { break; } @@ -91,16 +91,16 @@ public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStre } } // And filter them - $bytes = $this->_filter->filter($bytes); + $bytes = $this->filter->filter($bytes); } - $enc = $this->_encodeByteSequence($bytes, $size); + $enc = $this->encodeByteSequence($bytes, $size); $i = strpos($enc, '=0D=0A'); - $newLineLength = $lineLen + ($i === false ? $size : $i); + $newLineLength = $lineLen + (false === $i ? $size : $i); if ($currentLine && $newLineLength >= $thisLineLength) { - $is->write($prepend.$this->_standardize($currentLine)); + $is->write($prepend.$this->standardize($currentLine)); $currentLine = ''; $prepend = "=\r\n"; $thisLineLength = $maxLineLength; @@ -109,7 +109,7 @@ public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStre $currentLine .= $enc; - if ($i === false) { + if (false === $i) { $lineLen += $size; } else { // 6 is the length of '=0D=0A'. @@ -117,7 +117,7 @@ public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStre } } if (strlen($currentLine)) { - $is->write($prepend.$this->_standardize($currentLine)); + $is->write($prepend.$this->standardize($currentLine)); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php index 3214e1c..1b06da8 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoderProxy.php @@ -35,9 +35,7 @@ class Swift_Mime_ContentEncoder_QpContentEncoderProxy implements Swift_Mime_Cont /** * Constructor. * - * @param Swift_Mime_ContentEncoder_QpContentEncoder $safeEncoder - * @param Swift_Mime_ContentEncoder_NativeQpContentEncoder $nativeEncoder - * @param string|null $charset + * @param string|null $charset */ public function __construct(Swift_Mime_ContentEncoder_QpContentEncoder $safeEncoder, Swift_Mime_ContentEncoder_NativeQpContentEncoder $nativeEncoder, $charset) { diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php index 0b8526e..870e7f4 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/RawContentEncoder.php @@ -11,6 +11,9 @@ /** * Handles raw Transfer Encoding in Swift Mailer. * + * When sending 8-bit content over SMTP, you should use + * Swift_Transport_Esmtp_EightBitMimeHandler to enable the 8BITMIME SMTP + * extension. * * @author Sebastiaan Stok */ @@ -33,10 +36,8 @@ public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) /** * Encode stream $in to stream $out. * - * @param Swift_OutputByteStream $in - * @param Swift_InputByteStream $out - * @param int $firstLineOffset ignored - * @param int $maxLineLength ignored + * @param int $firstLineOffset ignored + * @param int $maxLineLength ignored */ public function encodeByteStream(Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, $maxLineLength = 0) { diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php index 6af7571..42a5177 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php @@ -18,15 +18,11 @@ class Swift_Mime_EmbeddedFile extends Swift_Mime_Attachment /** * Creates a new Attachment with $headers and $encoder. * - * @param Swift_Mime_HeaderSet $headers - * @param Swift_Mime_ContentEncoder $encoder - * @param Swift_KeyCache $cache - * @param Swift_Mime_Grammar $grammar - * @param array $mimeTypes optional + * @param array $mimeTypes optional */ - public function __construct(Swift_Mime_HeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_Mime_Grammar $grammar, $mimeTypes = array()) + public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $mimeTypes = []) { - parent::__construct($headers, $encoder, $cache, $grammar, $mimeTypes); + parent::__construct($headers, $encoder, $cache, $idGenerator, $mimeTypes); $this->setDisposition('inline'); $this->setId($this->getId()); } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Grammar.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Grammar.php deleted file mode 100644 index a09f338..0000000 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Grammar.php +++ /dev/null @@ -1,176 +0,0 @@ -init(); - } - - public function __wakeup() - { - $this->init(); - } - - protected function init() - { - if (count(self::$_specials) > 0) { - return; - } - - self::$_specials = array( - '(', ')', '<', '>', '[', ']', - ':', ';', '@', ',', '.', '"', - ); - - /*** Refer to RFC 2822 for ABNF grammar ***/ - - // All basic building blocks - self::$_grammar['NO-WS-CTL'] = '[\x01-\x08\x0B\x0C\x0E-\x19\x7F]'; - self::$_grammar['WSP'] = '[ \t]'; - self::$_grammar['CRLF'] = '(?:\r\n)'; - self::$_grammar['FWS'] = '(?:(?:'.self::$_grammar['WSP'].'*'. - self::$_grammar['CRLF'].')?'.self::$_grammar['WSP'].')'; - self::$_grammar['text'] = '[\x00-\x08\x0B\x0C\x0E-\x7F]'; - self::$_grammar['quoted-pair'] = '(?:\\\\'.self::$_grammar['text'].')'; - self::$_grammar['ctext'] = '(?:'.self::$_grammar['NO-WS-CTL']. - '|[\x21-\x27\x2A-\x5B\x5D-\x7E])'; - // Uses recursive PCRE (?1) -- could be a weak point?? - self::$_grammar['ccontent'] = '(?:'.self::$_grammar['ctext'].'|'. - self::$_grammar['quoted-pair'].'|(?1))'; - self::$_grammar['comment'] = '(\((?:'.self::$_grammar['FWS'].'|'. - self::$_grammar['ccontent'].')*'.self::$_grammar['FWS'].'?\))'; - self::$_grammar['CFWS'] = '(?:(?:'.self::$_grammar['FWS'].'?'. - self::$_grammar['comment'].')*(?:(?:'.self::$_grammar['FWS'].'?'. - self::$_grammar['comment'].')|'.self::$_grammar['FWS'].'))'; - self::$_grammar['qtext'] = '(?:'.self::$_grammar['NO-WS-CTL']. - '|[\x21\x23-\x5B\x5D-\x7E])'; - self::$_grammar['qcontent'] = '(?:'.self::$_grammar['qtext'].'|'. - self::$_grammar['quoted-pair'].')'; - self::$_grammar['quoted-string'] = '(?:'.self::$_grammar['CFWS'].'?"'. - '('.self::$_grammar['FWS'].'?'.self::$_grammar['qcontent'].')*'. - self::$_grammar['FWS'].'?"'.self::$_grammar['CFWS'].'?)'; - self::$_grammar['atext'] = '[a-zA-Z0-9!#\$%&\'\*\+\-\/=\?\^_`\{\}\|~]'; - self::$_grammar['atom'] = '(?:'.self::$_grammar['CFWS'].'?'. - self::$_grammar['atext'].'+'.self::$_grammar['CFWS'].'?)'; - self::$_grammar['dot-atom-text'] = '(?:'.self::$_grammar['atext'].'+'. - '(\.'.self::$_grammar['atext'].'+)*)'; - self::$_grammar['dot-atom'] = '(?:'.self::$_grammar['CFWS'].'?'. - self::$_grammar['dot-atom-text'].'+'.self::$_grammar['CFWS'].'?)'; - self::$_grammar['word'] = '(?:'.self::$_grammar['atom'].'|'. - self::$_grammar['quoted-string'].')'; - self::$_grammar['phrase'] = '(?:'.self::$_grammar['word'].'+?)'; - self::$_grammar['no-fold-quote'] = '(?:"(?:'.self::$_grammar['qtext']. - '|'.self::$_grammar['quoted-pair'].')*")'; - self::$_grammar['dtext'] = '(?:'.self::$_grammar['NO-WS-CTL']. - '|[\x21-\x5A\x5E-\x7E])'; - self::$_grammar['no-fold-literal'] = '(?:\[(?:'.self::$_grammar['dtext']. - '|'.self::$_grammar['quoted-pair'].')*\])'; - - // Message IDs - self::$_grammar['id-left'] = '(?:'.self::$_grammar['dot-atom-text'].'|'. - self::$_grammar['no-fold-quote'].')'; - self::$_grammar['id-right'] = '(?:'.self::$_grammar['dot-atom-text'].'|'. - self::$_grammar['no-fold-literal'].')'; - - // Addresses, mailboxes and paths - self::$_grammar['local-part'] = '(?:'.self::$_grammar['dot-atom'].'|'. - self::$_grammar['quoted-string'].')'; - self::$_grammar['dcontent'] = '(?:'.self::$_grammar['dtext'].'|'. - self::$_grammar['quoted-pair'].')'; - self::$_grammar['domain-literal'] = '(?:'.self::$_grammar['CFWS'].'?\[('. - self::$_grammar['FWS'].'?'.self::$_grammar['dcontent'].')*?'. - self::$_grammar['FWS'].'?\]'.self::$_grammar['CFWS'].'?)'; - self::$_grammar['domain'] = '(?:'.self::$_grammar['dot-atom'].'|'. - self::$_grammar['domain-literal'].')'; - self::$_grammar['addr-spec'] = '(?:'.self::$_grammar['local-part'].'@'. - self::$_grammar['domain'].')'; - } - - /** - * Get the grammar defined for $name token. - * - * @param string $name exactly as written in the RFC - * - * @return string - */ - public function getDefinition($name) - { - if (array_key_exists($name, self::$_grammar)) { - return self::$_grammar[$name]; - } - - throw new Swift_RfcComplianceException( - "No such grammar '".$name."' defined." - ); - } - - /** - * Returns the tokens defined in RFC 2822 (and some related RFCs). - * - * @return array - */ - public function getGrammarDefinitions() - { - return self::$_grammar; - } - - /** - * Returns the current special characters used in the syntax which need to be escaped. - * - * @return array - */ - public function getSpecials() - { - return self::$_specials; - } - - /** - * Escape special characters in a string (convert to quoted-pairs). - * - * @param string $token - * @param string[] $include additional chars to escape - * @param string[] $exclude chars from escaping - * - * @return string - */ - public function escapeSpecials($token, $include = array(), $exclude = array()) - { - foreach (array_merge(array('\\'), array_diff(self::$_specials, $exclude), $include) as $char) { - $token = str_replace($char, '\\'.$char, $token); - } - - return $token; - } -} diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Header.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Header.php index a8ddd27..ca712f3 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Header.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Header.php @@ -85,7 +85,7 @@ public function getFieldName(); public function getFieldBody(); /** - * Get this Header rendered as a compliant string. + * Get this Header rendered as a compliant string, including trailing CRLF. * * @return string */ diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php index 83a4f2f..c440357 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php @@ -41,7 +41,7 @@ public function getName() */ public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0, $charset = 'utf-8') { - if (strtolower($charset) === 'iso-2022-jp') { + if ('iso-2022-jp' === strtolower($charset)) { $old = mb_internal_encoding(); mb_internal_encoding('utf-8'); $newstring = mb_encode_mimeheader($string, $charset, $this->getName(), "\r\n"); diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php index 510dd66..0eef3e1 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php @@ -29,9 +29,9 @@ protected function initSafeMap() { foreach (array_merge( range(0x61, 0x7A), range(0x41, 0x5A), - range(0x30, 0x39), array(0x20, 0x21, 0x2A, 0x2B, 0x2D, 0x2F) + range(0x30, 0x39), [0x20, 0x21, 0x2A, 0x2B, 0x2D, 0x2F] ) as $byte) { - $this->_safeMap[$byte] = chr($byte); + $this->safeMap[$byte] = chr($byte); } } @@ -58,7 +58,7 @@ public function getName() */ public function encodeString($string, $firstLineOffset = 0, $maxLineLength = 0) { - return str_replace(array(' ', '=20', "=\r\n"), array('_', '_', "\r\n"), + return str_replace([' ', '=20', "=\r\n"], ['_', '_', "\r\n"], parent::encodeString($string, $firstLineOffset, $maxLineLength) ); } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderFactory.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderFactory.php deleted file mode 100644 index c65f26d..0000000 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/HeaderFactory.php +++ /dev/null @@ -1,78 +0,0 @@ -setGrammar($grammar); - } + private $cachedValue = null; /** * Set the character set used in this Header. @@ -81,10 +66,10 @@ public function __construct(Swift_Mime_Grammar $grammar) */ public function setCharset($charset) { - $this->clearCachedValueIf($charset != $this->_charset); - $this->_charset = $charset; - if (isset($this->_encoder)) { - $this->_encoder->charsetChanged($charset); + $this->clearCachedValueIf($charset != $this->charset); + $this->charset = $charset; + if (isset($this->encoder)) { + $this->encoder->charsetChanged($charset); } } @@ -95,7 +80,7 @@ public function setCharset($charset) */ public function getCharset() { - return $this->_charset; + return $this->charset; } /** @@ -108,8 +93,8 @@ public function getCharset() */ public function setLanguage($lang) { - $this->clearCachedValueIf($this->_lang != $lang); - $this->_lang = $lang; + $this->clearCachedValueIf($this->lang != $lang); + $this->lang = $lang; } /** @@ -119,17 +104,15 @@ public function setLanguage($lang) */ public function getLanguage() { - return $this->_lang; + return $this->lang; } /** * Set the encoder used for encoding the header. - * - * @param Swift_Mime_HeaderEncoder $encoder */ public function setEncoder(Swift_Mime_HeaderEncoder $encoder) { - $this->_encoder = $encoder; + $this->encoder = $encoder; $this->setCachedValue(null); } @@ -140,28 +123,7 @@ public function setEncoder(Swift_Mime_HeaderEncoder $encoder) */ public function getEncoder() { - return $this->_encoder; - } - - /** - * Set the grammar used for the header. - * - * @param Swift_Mime_Grammar $grammar - */ - public function setGrammar(Swift_Mime_Grammar $grammar) - { - $this->_grammar = $grammar; - $this->setCachedValue(null); - } - - /** - * Get the grammar used for this Header. - * - * @return Swift_Mime_Grammar - */ - public function getGrammar() - { - return $this->_grammar; + return $this->encoder; } /** @@ -171,7 +133,7 @@ public function getGrammar() */ public function getFieldName() { - return $this->_name; + return $this->name; } /** @@ -181,8 +143,8 @@ public function getFieldName() */ public function setMaxLineLength($lineLength) { - $this->clearCachedValueIf($this->_lineLength != $lineLength); - $this->_lineLength = $lineLength; + $this->clearCachedValueIf($this->lineLength != $lineLength); + $this->lineLength = $lineLength; } /** @@ -192,19 +154,19 @@ public function setMaxLineLength($lineLength) */ public function getMaxLineLength() { - return $this->_lineLength; + return $this->lineLength; } /** * Get this Header rendered as a RFC 2822 compliant string. * - * @throws Swift_RfcComplianceException - * * @return string + * + * @throws Swift_RfcComplianceException */ public function toString() { - return $this->_tokensToString($this->toTokens()); + return $this->tokensToString($this->toTokens()); } /** @@ -226,17 +188,15 @@ public function __toString() */ protected function setFieldName($name) { - $this->_name = $name; + $this->name = $name; } /** * Produces a compliant, formatted RFC 2822 'phrase' based on the string given. * - * @param Swift_Mime_Header $header - * @param string $string as displayed - * @param string $charset of the text - * @param Swift_Mime_HeaderEncoder $encoder - * @param bool $shorten the first line to make remove for header name + * @param string $string as displayed + * @param string $charset of the text + * @param bool $shorten the first line to make remove for header name * * @return string */ @@ -245,13 +205,12 @@ protected function createPhrase(Swift_Mime_Header $header, $string, $charset, Sw // Treat token as exactly what was given $phraseStr = $string; // If it's not valid - if (!preg_match('/^'.$this->getGrammar()->getDefinition('phrase').'$/D', $phraseStr)) { + + if (!preg_match('/^'.self::PHRASE_PATTERN.'$/D', $phraseStr)) { // .. but it is just ascii text, try escaping some characters // and make it a quoted-string - if (preg_match('/^'.$this->getGrammar()->getDefinition('text').'*$/D', $phraseStr)) { - $phraseStr = $this->getGrammar()->escapeSpecials( - $phraseStr, array('"'), $this->getGrammar()->getSpecials() - ); + if (preg_match('/^[\x00-\x08\x0B\x0C\x0E-\x7F]*$/D', $phraseStr)) { + $phraseStr = $this->escapeSpecials($phraseStr, ['"']); $phraseStr = '"'.$phraseStr.'"'; } else { // ... otherwise it needs encoding @@ -268,12 +227,28 @@ protected function createPhrase(Swift_Mime_Header $header, $string, $charset, Sw return $phraseStr; } + /** + * Escape special characters in a string (convert to quoted-pairs). + * + * @param string $token + * @param string[] $include additional chars to escape + * + * @return string + */ + private function escapeSpecials($token, $include = []) + { + foreach (array_merge(['\\'], $include) as $char) { + $token = str_replace($char, '\\'.$char, $token); + } + + return $token; + } + /** * Encode needed word tokens within a string of input. * - * @param Swift_Mime_Header $header - * @param string $input - * @param string $usedLength optional + * @param string $input + * @param string $usedLength optional * * @return string */ @@ -330,7 +305,7 @@ protected function tokenNeedsEncoding($token) */ protected function getEncodableWordTokens($string) { - $tokens = array(); + $tokens = []; $encodedToken = ''; // Split at all whitespace boundaries @@ -363,12 +338,12 @@ protected function getEncodableWordTokens($string) protected function getTokenAsEncodedWord($token, $firstLineOffset = 0) { // Adjust $firstLineOffset to account for space needed for syntax - $charsetDecl = $this->_charset; - if (isset($this->_lang)) { - $charsetDecl .= '*'.$this->_lang; + $charsetDecl = $this->charset; + if (isset($this->lang)) { + $charsetDecl .= '*'.$this->lang; } $encodingWrapperLength = strlen( - '=?'.$charsetDecl.'?'.$this->_encoder->getName().'??=' + '=?'.$charsetDecl.'?'.$this->encoder->getName().'??=' ); if ($firstLineOffset >= 75) { @@ -377,16 +352,16 @@ protected function getTokenAsEncodedWord($token, $firstLineOffset = 0) } $encodedTextLines = explode("\r\n", - $this->_encoder->encodeString( - $token, $firstLineOffset, 75 - $encodingWrapperLength, $this->_charset + $this->encoder->encodeString( + $token, $firstLineOffset, 75 - $encodingWrapperLength, $this->charset ) ); - if (strtolower($this->_charset) !== 'iso-2022-jp') { + if ('iso-2022-jp' !== strtolower($this->charset)) { // special encoding for iso-2022-jp using mb_encode_mimeheader foreach ($encodedTextLines as $lineNum => $line) { $encodedTextLines[$lineNum] = '=?'.$charsetDecl. - '?'.$this->_encoder->getName(). + '?'.$this->encoder->getName(). '?'.$line.'?='; } } @@ -413,7 +388,7 @@ protected function generateTokenLines($token) */ protected function setCachedValue($value) { - $this->_cachedValue = $value; + $this->cachedValue = $value; } /** @@ -423,7 +398,7 @@ protected function setCachedValue($value) */ protected function getCachedValue() { - return $this->_cachedValue; + return $this->cachedValue; } /** @@ -451,7 +426,7 @@ protected function toTokens($string = null) $string = $this->getFieldBody(); } - $tokens = array(); + $tokens = []; // Generate atoms; split at all invisible boundaries followed by WSP foreach (preg_split('~(?=[ \t])~', $string) as $token) { @@ -472,18 +447,18 @@ protected function toTokens($string = null) * * @return string */ - private function _tokensToString(array $tokens) + private function tokensToString(array $tokens) { $lineCount = 0; - $headerLines = array(); - $headerLines[] = $this->_name.': '; + $headerLines = []; + $headerLines[] = $this->name.': '; $currentLine = &$headerLines[$lineCount++]; // Build all tokens back into compliant header foreach ($tokens as $i => $token) { // Line longer than specified maximum or token was just a new line if (("\r\n" == $token) || - ($i > 0 && strlen($currentLine.$token) > $this->_lineLength) + ($i > 0 && strlen($currentLine.$token) > $this->lineLength) && 0 < strlen($currentLine)) { $headerLines[] = ''; $currentLine = &$headerLines[$lineCount++]; diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php index 4075cbf..efe1dad 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php @@ -16,29 +16,20 @@ class Swift_Mime_Headers_DateHeader extends Swift_Mime_Headers_AbstractHeader { /** - * The UNIX timestamp value of this Header. + * Date-time value of this Header. * - * @var int + * @var DateTimeImmutable */ - private $_timestamp; + private $dateTime; /** - * Creates a new DateHeader with $name and $timestamp. + * Creates a new DateHeader with $name. * - * Example: - * - * - * - * - * @param string $name of Header - * @param Swift_Mime_Grammar $grammar + * @param string $name of Header */ - public function __construct($name, Swift_Mime_Grammar $grammar) + public function __construct($name) { $this->setFieldName($name); - parent::__construct($grammar); } /** @@ -57,49 +48,46 @@ public function getFieldType() /** * Set the model for the field body. * - * This method takes a UNIX timestamp. - * - * @param int $model + * @param DateTimeInterface $model */ public function setFieldBodyModel($model) { - $this->setTimestamp($model); + $this->setDateTime($model); } /** * Get the model for the field body. * - * This method returns a UNIX timestamp. - * - * @return mixed + * @return DateTimeImmutable */ public function getFieldBodyModel() { - return $this->getTimestamp(); + return $this->getDateTime(); } /** - * Get the UNIX timestamp of the Date in this Header. + * Get the date-time representing the Date in this Header. * - * @return int + * @return DateTimeImmutable */ - public function getTimestamp() + public function getDateTime() { - return $this->_timestamp; + return $this->dateTime; } /** - * Set the UNIX timestamp of the Date in this Header. + * Set the date-time of the Date in this Header. * - * @param int $timestamp + * If a DateTime instance is provided, it is converted to DateTimeImmutable. */ - public function setTimestamp($timestamp) + public function setDateTime(DateTimeInterface $dateTime) { - if (null !== $timestamp) { - $timestamp = (int) $timestamp; + $this->clearCachedValueIf($this->getCachedValue() != $dateTime->format(DateTime::RFC2822)); + if ($dateTime instanceof DateTime) { + $immutable = new DateTimeImmutable('@'.$dateTime->getTimestamp()); + $dateTime = $immutable->setTimezone($dateTime->getTimezone()); } - $this->clearCachedValueIf($this->_timestamp != $timestamp); - $this->_timestamp = $timestamp; + $this->dateTime = $dateTime; } /** @@ -115,8 +103,8 @@ public function setTimestamp($timestamp) public function getFieldBody() { if (!$this->getCachedValue()) { - if (isset($this->_timestamp)) { - $this->setCachedValue(date('r', $this->_timestamp)); + if (isset($this->dateTime)) { + $this->setCachedValue($this->dateTime->format(DateTime::RFC2822)); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php index b114506..cadc63f 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php @@ -8,6 +8,9 @@ * file that was distributed with this source code. */ +use Egulias\EmailValidator\EmailValidator; +use Egulias\EmailValidator\Validation\RFCValidation; + /** * An ID MIME Header for something like Message-ID or Content-ID. * @@ -22,18 +25,27 @@ class Swift_Mime_Headers_IdentificationHeader extends Swift_Mime_Headers_Abstrac * * @var string[] */ - private $_ids = array(); + private $ids = []; + + /** + * The strict EmailValidator. + * + * @var EmailValidator + */ + private $emailValidator; + + private $addressEncoder; /** * Creates a new IdentificationHeader with the given $name and $id. * - * @param string $name - * @param Swift_Mime_Grammar $grammar + * @param string $name */ - public function __construct($name, Swift_Mime_Grammar $grammar) + public function __construct($name, EmailValidator $emailValidator, Swift_AddressEncoder $addressEncoder = null) { $this->setFieldName($name); - parent::__construct($grammar); + $this->emailValidator = $emailValidator; + $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); } /** @@ -84,7 +96,7 @@ public function getFieldBodyModel() */ public function setId($id) { - $this->setIds(is_array($id) ? $id : array($id)); + $this->setIds(is_array($id) ? $id : [$id]); } /** @@ -96,8 +108,8 @@ public function setId($id) */ public function getId() { - if (count($this->_ids) > 0) { - return $this->_ids[0]; + if (count($this->ids) > 0) { + return $this->ids[0]; } } @@ -110,15 +122,15 @@ public function getId() */ public function setIds(array $ids) { - $actualIds = array(); + $actualIds = []; foreach ($ids as $id) { - $this->_assertValidId($id); + $this->assertValidId($id); $actualIds[] = $id; } - $this->clearCachedValueIf($this->_ids != $actualIds); - $this->_ids = $actualIds; + $this->clearCachedValueIf($this->ids != $actualIds); + $this->ids = $actualIds; } /** @@ -128,7 +140,7 @@ public function setIds(array $ids) */ public function getIds() { - return $this->_ids; + return $this->ids; } /** @@ -146,10 +158,10 @@ public function getIds() public function getFieldBody() { if (!$this->getCachedValue()) { - $angleAddrs = array(); + $angleAddrs = []; - foreach ($this->_ids as $id) { - $angleAddrs[] = '<'.$id.'>'; + foreach ($this->ids as $id) { + $angleAddrs[] = '<'.$this->addressEncoder->encodeString($id).'>'; } $this->setCachedValue(implode(' ', $angleAddrs)); @@ -165,16 +177,10 @@ public function getFieldBody() * * @throws Swift_RfcComplianceException */ - private function _assertValidId($id) + private function assertValidId($id) { - if (!preg_match( - '/^'.$this->getGrammar()->getDefinition('id-left').'@'. - $this->getGrammar()->getDefinition('id-right').'$/D', - $id - )) { - throw new Swift_RfcComplianceException( - 'Invalid ID given <'.$id.'>' - ); + if (!$this->emailValidator->isValid($id, new RFCValidation())) { + throw new Swift_RfcComplianceException('Invalid ID given <'.$id.'>'); } } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php index e4567fc..9f1fe17 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php @@ -8,6 +8,9 @@ * file that was distributed with this source code. */ +use Egulias\EmailValidator\EmailValidator; +use Egulias\EmailValidator\Validation\RFCValidation; + /** * A Mailbox Address MIME Header for something like From or Sender. * @@ -20,20 +23,28 @@ class Swift_Mime_Headers_MailboxHeader extends Swift_Mime_Headers_AbstractHeader * * @var string[] */ - private $_mailboxes = array(); + private $mailboxes = []; + + /** + * The strict EmailValidator. + * + * @var EmailValidator + */ + private $emailValidator; + + private $addressEncoder; /** * Creates a new MailboxHeader with $name. * - * @param string $name of Header - * @param Swift_Mime_HeaderEncoder $encoder - * @param Swift_Mime_Grammar $grammar + * @param string $name of Header */ - public function __construct($name, Swift_Mime_HeaderEncoder $encoder, Swift_Mime_Grammar $grammar) + public function __construct($name, Swift_Mime_HeaderEncoder $encoder, EmailValidator $emailValidator, Swift_AddressEncoder $addressEncoder = null) { $this->setFieldName($name); $this->setEncoder($encoder); - parent::__construct($grammar); + $this->emailValidator = $emailValidator; + $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); } /** @@ -103,7 +114,7 @@ public function getFieldBodyModel() */ public function setNameAddresses($mailboxes) { - $this->_mailboxes = $this->normalizeMailboxes((array) $mailboxes); + $this->mailboxes = $this->normalizeMailboxes((array) $mailboxes); $this->setCachedValue(null); //Clear any cached value } @@ -134,7 +145,7 @@ public function setNameAddresses($mailboxes) */ public function getNameAddressStrings() { - return $this->_createNameAddressStrings($this->getNameAddresses()); + return $this->createNameAddressStrings($this->getNameAddresses()); } /** @@ -163,7 +174,7 @@ public function getNameAddressStrings() */ public function getNameAddresses() { - return $this->_mailboxes; + return $this->mailboxes; } /** @@ -200,7 +211,7 @@ public function setAddresses($addresses) */ public function getAddresses() { - return array_keys($this->_mailboxes); + return array_keys($this->mailboxes); } /** @@ -212,7 +223,7 @@ public function removeAddresses($addresses) { $this->setCachedValue(null); foreach ((array) $addresses as $address) { - unset($this->_mailboxes[$address]); + unset($this->mailboxes[$address]); } } @@ -232,7 +243,7 @@ public function getFieldBody() { // Compute the string value of the header only if needed if (null === $this->getCachedValue()) { - $this->setCachedValue($this->createMailboxListString($this->_mailboxes)); + $this->setCachedValue($this->createMailboxListString($this->mailboxes)); } return $this->getCachedValue(); @@ -247,7 +258,7 @@ public function getFieldBody() */ protected function normalizeMailboxes(array $mailboxes) { - $actualMailboxes = array(); + $actualMailboxes = []; foreach ($mailboxes as $key => $value) { if (is_string($key)) { @@ -258,7 +269,7 @@ protected function normalizeMailboxes(array $mailboxes) $address = $value; $name = null; } - $this->_assertValidAddress($address); + $this->assertValidAddress($address); $actualMailboxes[$address] = $name; } @@ -289,7 +300,7 @@ protected function createDisplayNameString($displayName, $shorten = false) */ protected function createMailboxListString(array $mailboxes) { - return implode(', ', $this->_createNameAddressStrings($mailboxes)); + return implode(', ', $this->createNameAddressStrings($mailboxes)); } /** @@ -315,12 +326,12 @@ protected function tokenNeedsEncoding($token) * * @return string[] */ - private function _createNameAddressStrings(array $mailboxes) + private function createNameAddressStrings(array $mailboxes) { - $strings = array(); + $strings = []; foreach ($mailboxes as $email => $name) { - $mailboxStr = $email; + $mailboxStr = $this->addressEncoder->encodeString($email); if (null !== $name) { $nameStr = $this->createDisplayNameString($name, empty($strings)); $mailboxStr = $nameStr.' <'.$mailboxStr.'>'; @@ -338,14 +349,12 @@ private function _createNameAddressStrings(array $mailboxes) * * @throws Swift_RfcComplianceException If invalid. */ - private function _assertValidAddress($address) + private function assertValidAddress($address) { - if (!preg_match('/^'.$this->getGrammar()->getDefinition('addr-spec').'$/D', - $address)) { + if (!$this->emailValidator->isValid($address, new RFCValidation())) { throw new Swift_RfcComplianceException( - 'Address in mailbox given ['.$address. - '] does not comply with RFC 2822, 3.6.2.' - ); + 'Address in mailbox given ['.$address.'] does not comply with RFC 2822, 3.6.2.' + ); } } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php index d749550..fafb5ba 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/OpenDKIMHeader.php @@ -12,6 +12,8 @@ * An OpenDKIM Specific Header using only raw header datas without encoding. * * @author De Cock Xavier + * + * @deprecated since SwiftMailer 6.1.0; use Swift_Signers_DKIMSigner instead. */ class Swift_Mime_Headers_OpenDKIMHeader implements Swift_Mime_Header { @@ -20,21 +22,21 @@ class Swift_Mime_Headers_OpenDKIMHeader implements Swift_Mime_Header * * @var string */ - private $_value; + private $value; /** * The name of this Header. * * @var string */ - private $_fieldName; + private $fieldName; /** * @param string $name */ public function __construct($name) { - $this->_fieldName = $name; + $this->fieldName = $name; } /** @@ -81,7 +83,7 @@ public function getFieldBodyModel() */ public function getValue() { - return $this->_value; + return $this->value; } /** @@ -91,7 +93,7 @@ public function getValue() */ public function setValue($value) { - $this->_value = $value; + $this->value = $value; } /** @@ -101,7 +103,7 @@ public function setValue($value) */ public function getFieldBody() { - return $this->_value; + return $this->value; } /** @@ -111,7 +113,7 @@ public function getFieldBody() */ public function toString() { - return $this->_fieldName.': '.$this->_value; + return $this->fieldName.': '.$this->value."\r\n"; } /** @@ -121,7 +123,7 @@ public function toString() */ public function getFieldName() { - return $this->_fieldName; + return $this->fieldName; } /** diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php index c1777d3..02933c4 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php @@ -13,7 +13,7 @@ * * @author Chris Corbyn */ -class Swift_Mime_Headers_ParameterizedHeader extends Swift_Mime_Headers_UnstructuredHeader implements Swift_Mime_ParameterizedHeader +class Swift_Mime_Headers_ParameterizedHeader extends Swift_Mime_Headers_UnstructuredHeader { /** * RFC 2231's definition of a token. @@ -27,27 +27,24 @@ class Swift_Mime_Headers_ParameterizedHeader extends Swift_Mime_Headers_Unstruct * * @var Swift_Encoder */ - private $_paramEncoder; + private $paramEncoder; /** * The parameters as an associative array. * * @var string[] */ - private $_params = array(); + private $params = []; /** * Creates a new ParameterizedHeader with $name. * - * @param string $name - * @param Swift_Mime_HeaderEncoder $encoder - * @param Swift_Encoder $paramEncoder, optional - * @param Swift_Mime_Grammar $grammar + * @param string $name */ - public function __construct($name, Swift_Mime_HeaderEncoder $encoder, Swift_Encoder $paramEncoder = null, Swift_Mime_Grammar $grammar) + public function __construct($name, Swift_Mime_HeaderEncoder $encoder, Swift_Encoder $paramEncoder = null) { - parent::__construct($name, $encoder, $grammar); - $this->_paramEncoder = $paramEncoder; + parent::__construct($name, $encoder); + $this->paramEncoder = $paramEncoder; } /** @@ -71,8 +68,8 @@ public function getFieldType() public function setCharset($charset) { parent::setCharset($charset); - if (isset($this->_paramEncoder)) { - $this->_paramEncoder->charsetChanged($charset); + if (isset($this->paramEncoder)) { + $this->paramEncoder->charsetChanged($charset); } } @@ -84,7 +81,7 @@ public function setCharset($charset) */ public function setParameter($parameter, $value) { - $this->setParameters(array_merge($this->getParameters(), array($parameter => $value))); + $this->setParameters(array_merge($this->getParameters(), [$parameter => $value])); } /** @@ -98,7 +95,7 @@ public function getParameter($parameter) { $params = $this->getParameters(); - return array_key_exists($parameter, $params) ? $params[$parameter] : null; + return $params[$parameter] ?? null; } /** @@ -108,8 +105,8 @@ public function getParameter($parameter) */ public function setParameters(array $parameters) { - $this->clearCachedValueIf($this->_params != $parameters); - $this->_params = $parameters; + $this->clearCachedValueIf($this->params != $parameters); + $this->params = $parameters; } /** @@ -119,7 +116,7 @@ public function setParameters(array $parameters) */ public function getParameters() { - return $this->_params; + return $this->params; } /** @@ -130,10 +127,10 @@ public function getParameters() public function getFieldBody() //TODO: Check caching here { $body = parent::getFieldBody(); - foreach ($this->_params as $name => $value) { + foreach ($this->params as $name => $value) { if (null !== $value) { // Add the parameter - $body .= '; '.$this->_createParameter($name, $value); + $body .= '; '.$this->createParameter($name, $value); } } @@ -155,12 +152,12 @@ protected function toTokens($string = null) $tokens = parent::toTokens(parent::getFieldBody()); // Try creating any parameters - foreach ($this->_params as $name => $value) { + foreach ($this->params as $name => $value) { if (null !== $value) { // Add the semi-colon separator $tokens[count($tokens) - 1] .= ';'; $tokens = array_merge($tokens, $this->generateTokenLines( - ' '.$this->_createParameter($name, $value) + ' '.$this->createParameter($name, $value) )); } } @@ -176,7 +173,7 @@ protected function toTokens($string = null) * * @return string */ - private function _createParameter($name, $value) + private function createParameter($name, $value) { $origValue = $value; @@ -189,7 +186,7 @@ private function _createParameter($name, $value) if (!preg_match('/^'.self::TOKEN_REGEX.'$/D', $value)) { // TODO: text, or something else?? // ... and it's not ascii - if (!preg_match('/^'.$this->getGrammar()->getDefinition('text').'*$/D', $value)) { + if (!preg_match('/^[\x00-\x08\x0B\x0C\x0E-\x7F]*$/D', $value)) { $encoded = true; // Allow space for the indices, charset and language $maxValueLength = $this->getMaxLineLength() - strlen($name.'*N*="";') - 1; @@ -201,8 +198,8 @@ private function _createParameter($name, $value) // Encode if we need to if ($encoded || strlen($value) > $maxValueLength) { - if (isset($this->_paramEncoder)) { - $value = $this->_paramEncoder->encodeString( + if (isset($this->paramEncoder)) { + $value = $this->paramEncoder->encodeString( $origValue, $firstLineOffset, $maxValueLength, $this->getCharset() ); } else { @@ -212,19 +209,19 @@ private function _createParameter($name, $value) } } - $valueLines = isset($this->_paramEncoder) ? explode("\r\n", $value) : array($value); + $valueLines = isset($this->paramEncoder) ? explode("\r\n", $value) : [$value]; // Need to add indices if (count($valueLines) > 1) { - $paramLines = array(); + $paramLines = []; foreach ($valueLines as $i => $line) { $paramLines[] = $name.'*'.$i. - $this->_getEndOfParameterValue($line, true, $i == 0); + $this->getEndOfParameterValue($line, true, 0 == $i); } return implode(";\r\n ", $paramLines); } else { - return $name.$this->_getEndOfParameterValue( + return $name.$this->getEndOfParameterValue( $valueLines[0], $encoded, true ); } @@ -239,7 +236,7 @@ private function _createParameter($name, $value) * * @return string */ - private function _getEndOfParameterValue($value, $encoded = false, $firstLine = false) + private function getEndOfParameterValue($value, $encoded = false, $firstLine = false) { if (!preg_match('/^'.self::TOKEN_REGEX.'$/D', $value)) { $value = '"'.$value.'"'; diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php index 4a814b1..d22afbf 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php @@ -8,6 +8,9 @@ * file that was distributed with this source code. */ +use Egulias\EmailValidator\EmailValidator; +use Egulias\EmailValidator\Validation\RFCValidation; + /** * A Path Header in Swift Mailer, such a Return-Path. * @@ -20,18 +23,27 @@ class Swift_Mime_Headers_PathHeader extends Swift_Mime_Headers_AbstractHeader * * @var string */ - private $_address; + private $address; + + /** + * The strict EmailValidator. + * + * @var EmailValidator + */ + private $emailValidator; + + private $addressEncoder; /** * Creates a new PathHeader with the given $name. * - * @param string $name - * @param Swift_Mime_Grammar $grammar + * @param string $name */ - public function __construct($name, Swift_Mime_Grammar $grammar) + public function __construct($name, EmailValidator $emailValidator, Swift_AddressEncoder $addressEncoder = null) { $this->setFieldName($name); - parent::__construct($grammar); + $this->emailValidator = $emailValidator; + $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); } /** @@ -81,12 +93,12 @@ public function getFieldBodyModel() public function setAddress($address) { if (null === $address) { - $this->_address = null; + $this->address = null; } elseif ('' == $address) { - $this->_address = ''; + $this->address = ''; } else { - $this->_assertValidAddress($address); - $this->_address = $address; + $this->assertValidAddress($address); + $this->address = $address; } $this->setCachedValue(null); } @@ -100,7 +112,7 @@ public function setAddress($address) */ public function getAddress() { - return $this->_address; + return $this->address; } /** @@ -116,8 +128,9 @@ public function getAddress() public function getFieldBody() { if (!$this->getCachedValue()) { - if (isset($this->_address)) { - $this->setCachedValue('<'.$this->_address.'>'); + if (isset($this->address)) { + $address = $this->addressEncoder->encodeString($this->address); + $this->setCachedValue('<'.$address.'>'); } } @@ -131,13 +144,12 @@ public function getFieldBody() * * @throws Swift_RfcComplianceException If address is invalid */ - private function _assertValidAddress($address) + private function assertValidAddress($address) { - if (!preg_match('/^'.$this->getGrammar()->getDefinition('addr-spec').'$/D', - $address)) { + if (!$this->emailValidator->isValid($address, new RFCValidation())) { throw new Swift_RfcComplianceException( 'Address set in PathHeader does not comply with addr-spec of RFC 2822.' - ); + ); } } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php index 86177f1..64f160d 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php @@ -20,20 +20,17 @@ class Swift_Mime_Headers_UnstructuredHeader extends Swift_Mime_Headers_AbstractH * * @var string */ - private $_value; + private $value; /** * Creates a new SimpleHeader with $name. * - * @param string $name - * @param Swift_Mime_HeaderEncoder $encoder - * @param Swift_Mime_Grammar $grammar + * @param string $name */ - public function __construct($name, Swift_Mime_HeaderEncoder $encoder, Swift_Mime_Grammar $grammar) + public function __construct($name, Swift_Mime_HeaderEncoder $encoder) { $this->setFieldName($name); $this->setEncoder($encoder); - parent::__construct($grammar); } /** @@ -80,7 +77,7 @@ public function getFieldBodyModel() */ public function getValue() { - return $this->_value; + return $this->value; } /** @@ -90,8 +87,8 @@ public function getValue() */ public function setValue($value) { - $this->clearCachedValueIf($this->_value != $value); - $this->_value = $value; + $this->clearCachedValueIf($this->value != $value); + $this->value = $value; } /** @@ -103,7 +100,7 @@ public function getFieldBody() { if (!$this->getCachedValue()) { $this->setCachedValue( - $this->encodeWords($this, $this->_value) + $this->encodeWords($this, $this->value) ); } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php new file mode 100644 index 0000000..3ce35f2 --- /dev/null +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/IdGenerator.php @@ -0,0 +1,54 @@ +idRight = $idRight; + } + + /** + * Returns the right-hand side of the "@" used in all generated IDs. + * + * @return string + */ + public function getIdRight() + { + return $this->idRight; + } + + /** + * Sets the right-hand side of the "@" to use in all generated IDs. + * + * @param string $idRight + */ + public function setIdRight($idRight) + { + $this->idRight = $idRight; + } + + /** + * @return string + */ + public function generateId() + { + // 32 hex values for the left part + return bin2hex(random_bytes(16)).'@'.$this->idRight; + } +} diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Message.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Message.php deleted file mode 100644 index 9b36d21..0000000 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/Message.php +++ /dev/null @@ -1,223 +0,0 @@ - 'Real Name'). - * - * If the second parameter is provided and the first is a string, then $name - * is associated with the address. - * - * @param mixed $address - * @param string $name optional - */ - public function setSender($address, $name = null); - - /** - * Get the sender address for this message. - * - * This has a higher significance than the From address. - * - * @return string - */ - public function getSender(); - - /** - * Set the From address of this message. - * - * It is permissible for multiple From addresses to be set using an array. - * - * If multiple From addresses are used, you SHOULD set the Sender address and - * according to RFC 2822, MUST set the sender address. - * - * An array can be used if display names are to be provided: i.e. - * array('email@address.com' => 'Real Name'). - * - * If the second parameter is provided and the first is a string, then $name - * is associated with the address. - * - * @param mixed $addresses - * @param string $name optional - */ - public function setFrom($addresses, $name = null); - - /** - * Get the From address(es) of this message. - * - * This method always returns an associative array where the keys are the - * addresses. - * - * @return string[] - */ - public function getFrom(); - - /** - * Set the Reply-To address(es). - * - * Any replies from the receiver will be sent to this address. - * - * It is permissible for multiple reply-to addresses to be set using an array. - * - * This method has the same synopsis as {@link setFrom()} and {@link setTo()}. - * - * If the second parameter is provided and the first is a string, then $name - * is associated with the address. - * - * @param mixed $addresses - * @param string $name optional - */ - public function setReplyTo($addresses, $name = null); - - /** - * Get the Reply-To addresses for this message. - * - * This method always returns an associative array where the keys provide the - * email addresses. - * - * @return string[] - */ - public function getReplyTo(); - - /** - * Set the To address(es). - * - * Recipients set in this field will receive a copy of this message. - * - * This method has the same synopsis as {@link setFrom()} and {@link setCc()}. - * - * If the second parameter is provided and the first is a string, then $name - * is associated with the address. - * - * @param mixed $addresses - * @param string $name optional - */ - public function setTo($addresses, $name = null); - - /** - * Get the To addresses for this message. - * - * This method always returns an associative array, whereby the keys provide - * the actual email addresses. - * - * @return string[] - */ - public function getTo(); - - /** - * Set the Cc address(es). - * - * Recipients set in this field will receive a 'carbon-copy' of this message. - * - * This method has the same synopsis as {@link setFrom()} and {@link setTo()}. - * - * @param mixed $addresses - * @param string $name optional - */ - public function setCc($addresses, $name = null); - - /** - * Get the Cc addresses for this message. - * - * This method always returns an associative array, whereby the keys provide - * the actual email addresses. - * - * @return string[] - */ - public function getCc(); - - /** - * Set the Bcc address(es). - * - * Recipients set in this field will receive a 'blind-carbon-copy' of this - * message. - * - * In other words, they will get the message, but any other recipients of the - * message will have no such knowledge of their receipt of it. - * - * This method has the same synopsis as {@link setFrom()} and {@link setTo()}. - * - * @param mixed $addresses - * @param string $name optional - */ - public function setBcc($addresses, $name = null); - - /** - * Get the Bcc addresses for this message. - * - * This method always returns an associative array, whereby the keys provide - * the actual email addresses. - * - * @return string[] - */ - public function getBcc(); -} diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php deleted file mode 100644 index 30f460c..0000000 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php +++ /dev/null @@ -1,117 +0,0 @@ -setContentType('text/plain'); if (null !== $charset) { $this->setCharset($charset); @@ -60,7 +56,7 @@ public function setBody($body, $contentType = null, $charset = null) if (isset($charset)) { $this->setCharset($charset); } - $body = $this->_convertString($body); + $body = $this->convertString($body); parent::setBody($body, $contentType); @@ -74,7 +70,7 @@ public function setBody($body, $contentType = null, $charset = null) */ public function getCharset() { - return $this->_getHeaderParameter('Content-Type', 'charset'); + return $this->getHeaderParameter('Content-Type', 'charset'); } /** @@ -86,11 +82,11 @@ public function getCharset() */ public function setCharset($charset) { - $this->_setHeaderParameter('Content-Type', 'charset', $charset); - if ($charset !== $this->_userCharset) { - $this->_clearCache(); + $this->setHeaderParameter('Content-Type', 'charset', $charset); + if ($charset !== $this->userCharset) { + $this->clearCache(); } - $this->_userCharset = $charset; + $this->userCharset = $charset; parent::charsetChanged($charset); return $this; @@ -103,7 +99,7 @@ public function setCharset($charset) */ public function getFormat() { - return $this->_getHeaderParameter('Content-Type', 'format'); + return $this->getHeaderParameter('Content-Type', 'format'); } /** @@ -115,8 +111,8 @@ public function getFormat() */ public function setFormat($format) { - $this->_setHeaderParameter('Content-Type', 'format', $format); - $this->_userFormat = $format; + $this->setHeaderParameter('Content-Type', 'format', $format); + $this->userFormat = $format; return $this; } @@ -128,7 +124,7 @@ public function setFormat($format) */ public function getDelSp() { - return 'yes' == $this->_getHeaderParameter('Content-Type', 'delsp') ? true : false; + return 'yes' === $this->getHeaderParameter('Content-Type', 'delsp'); } /** @@ -140,8 +136,8 @@ public function getDelSp() */ public function setDelSp($delsp = true) { - $this->_setHeaderParameter('Content-Type', 'delsp', $delsp ? 'yes' : null); - $this->_userDelSp = $delsp; + $this->setHeaderParameter('Content-Type', 'delsp', $delsp ? 'yes' : null); + $this->userDelSp = $delsp; return $this; } @@ -155,7 +151,7 @@ public function setDelSp($delsp = true) */ public function getNestingLevel() { - return $this->_nestingLevel; + return $this->nestingLevel; } /** @@ -170,41 +166,32 @@ public function charsetChanged($charset) } /** Fix the content-type and encoding of this entity */ - protected function _fixHeaders() + protected function fixHeaders() { - parent::_fixHeaders(); + parent::fixHeaders(); if (count($this->getChildren())) { - $this->_setHeaderParameter('Content-Type', 'charset', null); - $this->_setHeaderParameter('Content-Type', 'format', null); - $this->_setHeaderParameter('Content-Type', 'delsp', null); + $this->setHeaderParameter('Content-Type', 'charset', null); + $this->setHeaderParameter('Content-Type', 'format', null); + $this->setHeaderParameter('Content-Type', 'delsp', null); } else { - $this->setCharset($this->_userCharset); - $this->setFormat($this->_userFormat); - $this->setDelSp($this->_userDelSp); + $this->setCharset($this->userCharset); + $this->setFormat($this->userFormat); + $this->setDelSp($this->userDelSp); } } /** Set the nesting level of this entity */ - protected function _setNestingLevel($level) + protected function setNestingLevel($level) { - $this->_nestingLevel = $level; + $this->nestingLevel = $level; } /** Encode charset when charset is not utf-8 */ - protected function _convertString($string) + protected function convertString($string) { $charset = strtolower($this->getCharset()); - if (!in_array($charset, array('utf-8', 'iso-8859-1', 'iso-8859-15', ''))) { - // mb_convert_encoding must be the first one to check, since iconv cannot convert some words. - if (function_exists('mb_convert_encoding')) { - $string = mb_convert_encoding($string, $charset, 'utf-8'); - } elseif (function_exists('iconv')) { - $string = iconv('utf-8//TRANSLIT//IGNORE', $charset, $string); - } else { - throw new Swift_SwiftException('No suitable convert encoding function (use UTF-8 as your charset or install the mbstring or iconv extension).'); - } - - return $string; + if (!in_array($charset, ['utf-8', 'iso-8859-1', 'iso-8859-15', ''])) { + return mb_convert_encoding($string, $charset, 'utf-8'); } return $string; diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php deleted file mode 100644 index e15c6ef..0000000 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php +++ /dev/null @@ -1,34 +0,0 @@ -_encoder = $encoder; - $this->_paramEncoder = $paramEncoder; - $this->_grammar = $grammar; - $this->_charset = $charset; + $this->encoder = $encoder; + $this->paramEncoder = $paramEncoder; + $this->emailValidator = $emailValidator; + $this->charset = $charset; + $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); } /** @@ -53,30 +56,30 @@ public function __construct(Swift_Mime_HeaderEncoder $encoder, Swift_Encoder $pa */ public function createMailboxHeader($name, $addresses = null) { - $header = new Swift_Mime_Headers_MailboxHeader($name, $this->_encoder, $this->_grammar); + $header = new Swift_Mime_Headers_MailboxHeader($name, $this->encoder, $this->emailValidator, $this->addressEncoder); if (isset($addresses)) { $header->setFieldBodyModel($addresses); } - $this->_setHeaderCharset($header); + $this->setHeaderCharset($header); return $header; } /** - * Create a new Date header using $timestamp (UNIX time). + * Create a new Date header using $dateTime. * - * @param string $name - * @param int|null $timestamp + * @param string $name + * @param DateTimeInterface|null $dateTime * * @return Swift_Mime_Header */ - public function createDateHeader($name, $timestamp = null) + public function createDateHeader($name, DateTimeInterface $dateTime = null) { - $header = new Swift_Mime_Headers_DateHeader($name, $this->_grammar); - if (isset($timestamp)) { - $header->setFieldBodyModel($timestamp); + $header = new Swift_Mime_Headers_DateHeader($name); + if (isset($dateTime)) { + $header->setFieldBodyModel($dateTime); } - $this->_setHeaderCharset($header); + $this->setHeaderCharset($header); return $header; } @@ -91,11 +94,11 @@ public function createDateHeader($name, $timestamp = null) */ public function createTextHeader($name, $value = null) { - $header = new Swift_Mime_Headers_UnstructuredHeader($name, $this->_encoder, $this->_grammar); + $header = new Swift_Mime_Headers_UnstructuredHeader($name, $this->encoder); if (isset($value)) { $header->setFieldBodyModel($value); } - $this->_setHeaderCharset($header); + $this->setHeaderCharset($header); return $header; } @@ -107,19 +110,18 @@ public function createTextHeader($name, $value = null) * @param string $value * @param array $params * - * @return Swift_Mime_ParameterizedHeader + * @return Swift_Mime_Headers_ParameterizedHeader */ - public function createParameterizedHeader($name, $value = null, - $params = array()) + public function createParameterizedHeader($name, $value = null, $params = []) { - $header = new Swift_Mime_Headers_ParameterizedHeader($name, $this->_encoder, strtolower($name) == 'content-disposition' ? $this->_paramEncoder : null, $this->_grammar); + $header = new Swift_Mime_Headers_ParameterizedHeader($name, $this->encoder, ('content-disposition' == strtolower($name)) ? $this->paramEncoder : null); if (isset($value)) { $header->setFieldBodyModel($value); } foreach ($params as $k => $v) { $header->setParameter($k, $v); } - $this->_setHeaderCharset($header); + $this->setHeaderCharset($header); return $header; } @@ -134,11 +136,11 @@ public function createParameterizedHeader($name, $value = null, */ public function createIdHeader($name, $ids = null) { - $header = new Swift_Mime_Headers_IdentificationHeader($name, $this->_grammar); + $header = new Swift_Mime_Headers_IdentificationHeader($name, $this->emailValidator); if (isset($ids)) { $header->setFieldBodyModel($ids); } - $this->_setHeaderCharset($header); + $this->setHeaderCharset($header); return $header; } @@ -153,11 +155,11 @@ public function createIdHeader($name, $ids = null) */ public function createPathHeader($name, $path = null) { - $header = new Swift_Mime_Headers_PathHeader($name, $this->_grammar); + $header = new Swift_Mime_Headers_PathHeader($name, $this->emailValidator); if (isset($path)) { $header->setFieldBodyModel($path); } - $this->_setHeaderCharset($header); + $this->setHeaderCharset($header); return $header; } @@ -169,9 +171,9 @@ public function createPathHeader($name, $path = null) */ public function charsetChanged($charset) { - $this->_charset = $charset; - $this->_encoder->charsetChanged($charset); - $this->_paramEncoder->charsetChanged($charset); + $this->charset = $charset; + $this->encoder->charsetChanged($charset); + $this->paramEncoder->charsetChanged($charset); } /** @@ -179,15 +181,15 @@ public function charsetChanged($charset) */ public function __clone() { - $this->_encoder = clone $this->_encoder; - $this->_paramEncoder = clone $this->_paramEncoder; + $this->encoder = clone $this->encoder; + $this->paramEncoder = clone $this->paramEncoder; } /** Apply the charset to the Header */ - private function _setHeaderCharset(Swift_Mime_Header $header) + private function setHeaderCharset(Swift_Mime_Header $header) { - if (isset($this->_charset)) { - $header->setCharset($this->_charset); + if (isset($this->charset)) { + $header->setCharset($this->charset); } } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php index a06ce72..a2c3191 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php @@ -13,37 +13,41 @@ * * @author Chris Corbyn */ -class Swift_Mime_SimpleHeaderSet implements Swift_Mime_HeaderSet +class Swift_Mime_SimpleHeaderSet implements Swift_Mime_CharsetObserver { /** HeaderFactory */ - private $_factory; + private $factory; /** Collection of set Headers */ - private $_headers = array(); + private $headers = []; /** Field ordering details */ - private $_order = array(); + private $order = []; /** List of fields which are required to be displayed */ - private $_required = array(); + private $required = []; /** The charset used by Headers */ - private $_charset; + private $charset; /** * Create a new SimpleHeaderSet with the given $factory. * - * @param Swift_Mime_HeaderFactory $factory - * @param string $charset + * @param string $charset */ - public function __construct(Swift_Mime_HeaderFactory $factory, $charset = null) + public function __construct(Swift_Mime_SimpleHeaderFactory $factory, $charset = null) { - $this->_factory = $factory; + $this->factory = $factory; if (isset($charset)) { $this->setCharset($charset); } } + public function newInstance() + { + return new self($this->factory); + } + /** * Set the charset used by these headers. * @@ -51,9 +55,9 @@ public function __construct(Swift_Mime_HeaderFactory $factory, $charset = null) */ public function setCharset($charset) { - $this->_charset = $charset; - $this->_factory->charsetChanged($charset); - $this->_notifyHeadersOfCharset($charset); + $this->charset = $charset; + $this->factory->charsetChanged($charset); + $this->notifyHeadersOfCharset($charset); } /** @@ -64,20 +68,17 @@ public function setCharset($charset) */ public function addMailboxHeader($name, $addresses = null) { - $this->_storeHeader($name, - $this->_factory->createMailboxHeader($name, $addresses)); + $this->storeHeader($name, $this->factory->createMailboxHeader($name, $addresses)); } /** - * Add a new Date header using $timestamp (UNIX time). + * Add a new Date header using $dateTime. * * @param string $name - * @param int $timestamp */ - public function addDateHeader($name, $timestamp = null) + public function addDateHeader($name, DateTimeInterface $dateTime = null) { - $this->_storeHeader($name, - $this->_factory->createDateHeader($name, $timestamp)); + $this->storeHeader($name, $this->factory->createDateHeader($name, $dateTime)); } /** @@ -88,8 +89,7 @@ public function addDateHeader($name, $timestamp = null) */ public function addTextHeader($name, $value = null) { - $this->_storeHeader($name, - $this->_factory->createTextHeader($name, $value)); + $this->storeHeader($name, $this->factory->createTextHeader($name, $value)); } /** @@ -99,9 +99,9 @@ public function addTextHeader($name, $value = null) * @param string $value * @param array $params */ - public function addParameterizedHeader($name, $value = null, $params = array()) + public function addParameterizedHeader($name, $value = null, $params = []) { - $this->_storeHeader($name, $this->_factory->createParameterizedHeader($name, $value, $params)); + $this->storeHeader($name, $this->factory->createParameterizedHeader($name, $value, $params)); } /** @@ -112,7 +112,7 @@ public function addParameterizedHeader($name, $value = null, $params = array()) */ public function addIdHeader($name, $ids = null) { - $this->_storeHeader($name, $this->_factory->createIdHeader($name, $ids)); + $this->storeHeader($name, $this->factory->createIdHeader($name, $ids)); } /** @@ -123,7 +123,7 @@ public function addIdHeader($name, $ids = null) */ public function addPathHeader($name, $path = null) { - $this->_storeHeader($name, $this->_factory->createPathHeader($name, $path)); + $this->storeHeader($name, $this->factory->createPathHeader($name, $path)); } /** @@ -140,16 +140,16 @@ public function has($name, $index = 0) { $lowerName = strtolower($name); - if (!array_key_exists($lowerName, $this->_headers)) { + if (!array_key_exists($lowerName, $this->headers)) { return false; } if (func_num_args() < 2) { // index was not specified, so we only need to check that there is at least one header value set - return (bool) count($this->_headers[$lowerName]); + return (bool) count($this->headers[$lowerName]); } - return array_key_exists($index, $this->_headers[$lowerName]); + return array_key_exists($index, $this->headers[$lowerName]); } /** @@ -161,12 +161,11 @@ public function has($name, $index = 0) * If $index is specified, the header will be inserted into the set at this * offset. * - * @param Swift_Mime_Header $header - * @param int $index + * @param int $index */ public function set(Swift_Mime_Header $header, $index = 0) { - $this->_storeHeader($header->getFieldName(), $header, $index); + $this->storeHeader($header->getFieldName(), $header, $index); } /** @@ -186,13 +185,13 @@ public function get($name, $index = 0) if (func_num_args() < 2) { if ($this->has($name)) { - $values = array_values($this->_headers[$name]); + $values = array_values($this->headers[$name]); return array_shift($values); } } else { if ($this->has($name, $index)) { - return $this->_headers[$name][$index]; + return $this->headers[$name][$index]; } } } @@ -207,8 +206,8 @@ public function get($name, $index = 0) public function getAll($name = null) { if (!isset($name)) { - $headers = array(); - foreach ($this->_headers as $collection) { + $headers = []; + foreach ($this->headers as $collection) { $headers = array_merge($headers, $collection); } @@ -216,11 +215,11 @@ public function getAll($name = null) } $lowerName = strtolower($name); - if (!array_key_exists($lowerName, $this->_headers)) { - return array(); + if (!array_key_exists($lowerName, $this->headers)) { + return []; } - return $this->_headers[$lowerName]; + return $this->headers[$lowerName]; } /** @@ -230,9 +229,9 @@ public function getAll($name = null) */ public function listAll() { - $headers = $this->_headers; - if ($this->_canSort()) { - uksort($headers, array($this, '_sortHeaders')); + $headers = $this->headers; + if ($this->canSort()) { + uksort($headers, [$this, 'sortHeaders']); } return array_keys($headers); @@ -249,7 +248,7 @@ public function listAll() public function remove($name, $index = 0) { $lowerName = strtolower($name); - unset($this->_headers[$lowerName][$index]); + unset($this->headers[$lowerName][$index]); } /** @@ -260,41 +259,27 @@ public function remove($name, $index = 0) public function removeAll($name) { $lowerName = strtolower($name); - unset($this->_headers[$lowerName]); - } - - /** - * Create a new instance of this HeaderSet. - * - * @return self - */ - public function newInstance() - { - return new self($this->_factory); + unset($this->headers[$lowerName]); } /** * Define a list of Header names as an array in the correct order. * * These Headers will be output in the given order where present. - * - * @param array $sequence */ public function defineOrdering(array $sequence) { - $this->_order = array_flip(array_map('strtolower', $sequence)); + $this->order = array_flip(array_map('strtolower', $sequence)); } /** * Set a list of header names which must always be displayed when set. * * Usually headers without a field value won't be output unless set here. - * - * @param array $names */ public function setAlwaysDisplayed(array $names) { - $this->_required = array_flip(array_map('strtolower', $names)); + $this->required = array_flip(array_map('strtolower', $names)); } /** @@ -315,13 +300,13 @@ public function charsetChanged($charset) public function toString() { $string = ''; - $headers = $this->_headers; - if ($this->_canSort()) { - uksort($headers, array($this, '_sortHeaders')); + $headers = $this->headers; + if ($this->canSort()) { + uksort($headers, [$this, 'sortHeaders']); } foreach ($headers as $collection) { foreach ($collection as $header) { - if ($this->_isDisplayed($header) || $header->getFieldBody() != '') { + if ($this->isDisplayed($header) || '' != $header->getFieldBody()) { $string .= $header->toString(); } } @@ -343,40 +328,40 @@ public function __toString() } /** Save a Header to the internal collection */ - private function _storeHeader($name, Swift_Mime_Header $header, $offset = null) + private function storeHeader($name, Swift_Mime_Header $header, $offset = null) { - if (!isset($this->_headers[strtolower($name)])) { - $this->_headers[strtolower($name)] = array(); + if (!isset($this->headers[strtolower($name)])) { + $this->headers[strtolower($name)] = []; } if (!isset($offset)) { - $this->_headers[strtolower($name)][] = $header; + $this->headers[strtolower($name)][] = $header; } else { - $this->_headers[strtolower($name)][$offset] = $header; + $this->headers[strtolower($name)][$offset] = $header; } } /** Test if the headers can be sorted */ - private function _canSort() + private function canSort() { - return count($this->_order) > 0; + return count($this->order) > 0; } /** uksort() algorithm for Header ordering */ - private function _sortHeaders($a, $b) + private function sortHeaders($a, $b) { $lowerA = strtolower($a); $lowerB = strtolower($b); - $aPos = array_key_exists($lowerA, $this->_order) ? $this->_order[$lowerA] : -1; - $bPos = array_key_exists($lowerB, $this->_order) ? $this->_order[$lowerB] : -1; + $aPos = array_key_exists($lowerA, $this->order) ? $this->order[$lowerA] : -1; + $bPos = array_key_exists($lowerB, $this->order) ? $this->order[$lowerB] : -1; if (-1 === $aPos && -1 === $bPos) { // just be sure to be determinist here return $a > $b ? -1 : 1; } - if ($aPos == -1) { + if (-1 == $aPos) { return 1; - } elseif ($bPos == -1) { + } elseif (-1 == $bPos) { return -1; } @@ -384,15 +369,15 @@ private function _sortHeaders($a, $b) } /** Test if the given Header is always displayed */ - private function _isDisplayed(Swift_Mime_Header $header) + private function isDisplayed(Swift_Mime_Header $header) { - return array_key_exists(strtolower($header->getFieldName()), $this->_required); + return array_key_exists(strtolower($header->getFieldName()), $this->required); } /** Notify all Headers of the new charset */ - private function _notifyHeadersOfCharset($charset) + private function notifyHeadersOfCharset($charset) { - foreach ($this->_headers as $headerGroup) { + foreach ($this->headers as $headerGroup) { foreach ($headerGroup as $header) { $header->setCharset($charset); } @@ -404,10 +389,10 @@ private function _notifyHeadersOfCharset($charset) */ public function __clone() { - $this->_factory = clone $this->_factory; - foreach ($this->_headers as $groupKey => $headerGroup) { + $this->factory = clone $this->factory; + foreach ($this->headers as $groupKey => $headerGroup) { foreach ($headerGroup as $key => $header) { - $this->_headers[$groupKey][$key] = clone $header; + $this->headers[$groupKey][$key] = clone $header; } } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php index 72d40ce..ab32f63 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php @@ -13,7 +13,7 @@ * * @author Chris Corbyn */ -class Swift_Mime_SimpleMessage extends Swift_Mime_MimePart implements Swift_Mime_Message +class Swift_Mime_SimpleMessage extends Swift_Mime_MimePart { const PRIORITY_HIGHEST = 1; const PRIORITY_HIGH = 2; @@ -24,16 +24,12 @@ class Swift_Mime_SimpleMessage extends Swift_Mime_MimePart implements Swift_Mime /** * Create a new SimpleMessage with $headers, $encoder and $cache. * - * @param Swift_Mime_HeaderSet $headers - * @param Swift_Mime_ContentEncoder $encoder - * @param Swift_KeyCache $cache - * @param Swift_Mime_Grammar $grammar - * @param string $charset + * @param string $charset */ - public function __construct(Swift_Mime_HeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_Mime_Grammar $grammar, $charset = null) + public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator, $charset = null) { - parent::__construct($headers, $encoder, $cache, $grammar, $charset); - $this->getHeaders()->defineOrdering(array( + parent::__construct($headers, $encoder, $cache, $idGenerator, $charset); + $this->getHeaders()->defineOrdering([ 'Return-Path', 'Received', 'DKIM-Signature', @@ -50,10 +46,10 @@ public function __construct(Swift_Mime_HeaderSet $headers, Swift_Mime_ContentEnc 'MIME-Version', 'Content-Type', 'Content-Transfer-Encoding', - )); - $this->getHeaders()->setAlwaysDisplayed(array('Date', 'Message-ID', 'From')); + ]); + $this->getHeaders()->setAlwaysDisplayed(['Date', 'Message-ID', 'From']); $this->getHeaders()->addTextHeader('MIME-Version', '1.0'); - $this->setDate(time()); + $this->setDate(new DateTimeImmutable()); $this->setId($this->getId()); $this->getHeaders()->addMailboxHeader('From'); } @@ -77,7 +73,7 @@ public function getNestingLevel() */ public function setSubject($subject) { - if (!$this->_setHeaderFieldModel('Subject', $subject)) { + if (!$this->setHeaderFieldModel('Subject', $subject)) { $this->getHeaders()->addTextHeader('Subject', $subject); } @@ -91,20 +87,18 @@ public function setSubject($subject) */ public function getSubject() { - return $this->_getHeaderFieldModel('Subject'); + return $this->getHeaderFieldModel('Subject'); } /** * Set the date at which this message was created. * - * @param int $date - * * @return $this */ - public function setDate($date) + public function setDate(DateTimeInterface $dateTime) { - if (!$this->_setHeaderFieldModel('Date', $date)) { - $this->getHeaders()->addDateHeader('Date', $date); + if (!$this->setHeaderFieldModel('Date', $dateTime)) { + $this->getHeaders()->addDateHeader('Date', $dateTime); } return $this; @@ -113,11 +107,11 @@ public function setDate($date) /** * Get the date at which this message was created. * - * @return int + * @return DateTimeInterface */ public function getDate() { - return $this->_getHeaderFieldModel('Date'); + return $this->getHeaderFieldModel('Date'); } /** @@ -129,7 +123,7 @@ public function getDate() */ public function setReturnPath($address) { - if (!$this->_setHeaderFieldModel('Return-Path', $address)) { + if (!$this->setHeaderFieldModel('Return-Path', $address)) { $this->getHeaders()->addPathHeader('Return-Path', $address); } @@ -143,7 +137,7 @@ public function setReturnPath($address) */ public function getReturnPath() { - return $this->_getHeaderFieldModel('Return-Path'); + return $this->getHeaderFieldModel('Return-Path'); } /** @@ -159,10 +153,10 @@ public function getReturnPath() public function setSender($address, $name = null) { if (!is_array($address) && isset($name)) { - $address = array($address => $name); + $address = [$address => $name]; } - if (!$this->_setHeaderFieldModel('Sender', (array) $address)) { + if (!$this->setHeaderFieldModel('Sender', (array) $address)) { $this->getHeaders()->addMailboxHeader('Sender', (array) $address); } @@ -176,7 +170,7 @@ public function setSender($address, $name = null) */ public function getSender() { - return $this->_getHeaderFieldModel('Sender'); + return $this->getHeaderFieldModel('Sender'); } /** @@ -213,10 +207,10 @@ public function addFrom($address, $name = null) public function setFrom($addresses, $name = null) { if (!is_array($addresses) && isset($name)) { - $addresses = array($addresses => $name); + $addresses = [$addresses => $name]; } - if (!$this->_setHeaderFieldModel('From', (array) $addresses)) { + if (!$this->setHeaderFieldModel('From', (array) $addresses)) { $this->getHeaders()->addMailboxHeader('From', (array) $addresses); } @@ -230,7 +224,7 @@ public function setFrom($addresses, $name = null) */ public function getFrom() { - return $this->_getHeaderFieldModel('From'); + return $this->getHeaderFieldModel('From'); } /** @@ -267,10 +261,10 @@ public function addReplyTo($address, $name = null) public function setReplyTo($addresses, $name = null) { if (!is_array($addresses) && isset($name)) { - $addresses = array($addresses => $name); + $addresses = [$addresses => $name]; } - if (!$this->_setHeaderFieldModel('Reply-To', (array) $addresses)) { + if (!$this->setHeaderFieldModel('Reply-To', (array) $addresses)) { $this->getHeaders()->addMailboxHeader('Reply-To', (array) $addresses); } @@ -284,7 +278,7 @@ public function setReplyTo($addresses, $name = null) */ public function getReplyTo() { - return $this->_getHeaderFieldModel('Reply-To'); + return $this->getHeaderFieldModel('Reply-To'); } /** @@ -322,10 +316,10 @@ public function addTo($address, $name = null) public function setTo($addresses, $name = null) { if (!is_array($addresses) && isset($name)) { - $addresses = array($addresses => $name); + $addresses = [$addresses => $name]; } - if (!$this->_setHeaderFieldModel('To', (array) $addresses)) { + if (!$this->setHeaderFieldModel('To', (array) $addresses)) { $this->getHeaders()->addMailboxHeader('To', (array) $addresses); } @@ -339,7 +333,7 @@ public function setTo($addresses, $name = null) */ public function getTo() { - return $this->_getHeaderFieldModel('To'); + return $this->getHeaderFieldModel('To'); } /** @@ -374,10 +368,10 @@ public function addCc($address, $name = null) public function setCc($addresses, $name = null) { if (!is_array($addresses) && isset($name)) { - $addresses = array($addresses => $name); + $addresses = [$addresses => $name]; } - if (!$this->_setHeaderFieldModel('Cc', (array) $addresses)) { + if (!$this->setHeaderFieldModel('Cc', (array) $addresses)) { $this->getHeaders()->addMailboxHeader('Cc', (array) $addresses); } @@ -391,7 +385,7 @@ public function setCc($addresses, $name = null) */ public function getCc() { - return $this->_getHeaderFieldModel('Cc'); + return $this->getHeaderFieldModel('Cc'); } /** @@ -426,10 +420,10 @@ public function addBcc($address, $name = null) public function setBcc($addresses, $name = null) { if (!is_array($addresses) && isset($name)) { - $addresses = array($addresses => $name); + $addresses = [$addresses => $name]; } - if (!$this->_setHeaderFieldModel('Bcc', (array) $addresses)) { + if (!$this->setHeaderFieldModel('Bcc', (array) $addresses)) { $this->getHeaders()->addMailboxHeader('Bcc', (array) $addresses); } @@ -443,7 +437,7 @@ public function setBcc($addresses, $name = null) */ public function getBcc() { - return $this->_getHeaderFieldModel('Bcc'); + return $this->getHeaderFieldModel('Bcc'); } /** @@ -457,20 +451,20 @@ public function getBcc() */ public function setPriority($priority) { - $priorityMap = array( + $priorityMap = [ self::PRIORITY_HIGHEST => 'Highest', self::PRIORITY_HIGH => 'High', self::PRIORITY_NORMAL => 'Normal', self::PRIORITY_LOW => 'Low', self::PRIORITY_LOWEST => 'Lowest', - ); + ]; $pMapKeys = array_keys($priorityMap); if ($priority > max($pMapKeys)) { $priority = max($pMapKeys); } elseif ($priority < min($pMapKeys)) { $priority = min($pMapKeys); } - if (!$this->_setHeaderFieldModel('X-Priority', + if (!$this->setHeaderFieldModel('X-Priority', sprintf('%d (%s)', $priority, $priorityMap[$priority]))) { $this->getHeaders()->addTextHeader('X-Priority', sprintf('%d (%s)', $priority, $priorityMap[$priority])); @@ -489,11 +483,11 @@ public function setPriority($priority) */ public function getPriority() { - list($priority) = sscanf($this->_getHeaderFieldModel('X-Priority'), + list($priority) = sscanf($this->getHeaderFieldModel('X-Priority'), '%[1-5]' ); - return isset($priority) ? $priority : 3; + return $priority ?? 3; } /** @@ -505,7 +499,7 @@ public function getPriority() */ public function setReadReceiptTo($addresses) { - if (!$this->_setHeaderFieldModel('Disposition-Notification-To', $addresses)) { + if (!$this->setHeaderFieldModel('Disposition-Notification-To', $addresses)) { $this->getHeaders() ->addMailboxHeader('Disposition-Notification-To', $addresses); } @@ -520,19 +514,17 @@ public function setReadReceiptTo($addresses) */ public function getReadReceiptTo() { - return $this->_getHeaderFieldModel('Disposition-Notification-To'); + return $this->getHeaderFieldModel('Disposition-Notification-To'); } /** - * Attach a {@link Swift_Mime_MimeEntity} such as an Attachment or MimePart. - * - * @param Swift_Mime_MimeEntity $entity + * Attach a {@link Swift_Mime_SimpleMimeEntity} such as an Attachment or MimePart. * * @return $this */ - public function attach(Swift_Mime_MimeEntity $entity) + public function attach(Swift_Mime_SimpleMimeEntity $entity) { - $this->setChildren(array_merge($this->getChildren(), array($entity))); + $this->setChildren(array_merge($this->getChildren(), [$entity])); return $this; } @@ -540,13 +532,11 @@ public function attach(Swift_Mime_MimeEntity $entity) /** * Remove an already attached entity. * - * @param Swift_Mime_MimeEntity $entity - * * @return $this */ - public function detach(Swift_Mime_MimeEntity $entity) + public function detach(Swift_Mime_SimpleMimeEntity $entity) { - $newChildren = array(); + $newChildren = []; foreach ($this->getChildren() as $child) { if ($entity !== $child) { $newChildren[] = $child; @@ -558,14 +548,13 @@ public function detach(Swift_Mime_MimeEntity $entity) } /** - * Attach a {@link Swift_Mime_MimeEntity} and return it's CID source. - * This method should be used when embedding images or other data in a message. + * Attach a {@link Swift_Mime_SimpleMimeEntity} and return it's CID source. * - * @param Swift_Mime_MimeEntity $entity + * This method should be used when embedding images or other data in a message. * * @return string */ - public function embed(Swift_Mime_MimeEntity $entity) + public function embed(Swift_Mime_SimpleMimeEntity $entity) { $this->attach($entity); @@ -579,8 +568,8 @@ public function embed(Swift_Mime_MimeEntity $entity) */ public function toString() { - if (count($children = $this->getChildren()) > 0 && $this->getBody() != '') { - $this->setChildren(array_merge(array($this->_becomeMimePart()), $children)); + if (count($children = $this->getChildren()) > 0 && '' != $this->getBody()) { + $this->setChildren(array_merge([$this->becomeMimePart()], $children)); $string = parent::toString(); $this->setChildren($children); } else { @@ -604,13 +593,11 @@ public function __toString() /** * Write this message to a {@link Swift_InputByteStream}. - * - * @param Swift_InputByteStream $is */ public function toByteStream(Swift_InputByteStream $is) { - if (count($children = $this->getChildren()) > 0 && $this->getBody() != '') { - $this->setChildren(array_merge(array($this->_becomeMimePart()), $children)); + if (count($children = $this->getChildren()) > 0 && '' != $this->getBody()) { + $this->setChildren(array_merge([$this->becomeMimePart()], $children)); parent::toByteStream($is); $this->setChildren($children); } else { @@ -618,29 +605,29 @@ public function toByteStream(Swift_InputByteStream $is) } } - /** @see Swift_Mime_SimpleMimeEntity::_getIdField() */ - protected function _getIdField() + /** @see Swift_Mime_SimpleMimeEntity::getIdField() */ + protected function getIdField() { return 'Message-ID'; } /** Turn the body of this message into a child of itself if needed */ - protected function _becomeMimePart() + protected function becomeMimePart() { $part = new parent($this->getHeaders()->newInstance(), $this->getEncoder(), - $this->_getCache(), $this->_getGrammar(), $this->_userCharset + $this->getCache(), $this->getIdGenerator(), $this->userCharset ); - $part->setContentType($this->_userContentType); + $part->setContentType($this->userContentType); $part->setBody($this->getBody()); - $part->setFormat($this->_userFormat); - $part->setDelSp($this->_userDelSp); - $part->_setNestingLevel($this->_getTopNestingLevel()); + $part->setFormat($this->userFormat); + $part->setDelSp($this->userDelSp); + $part->setNestingLevel($this->getTopNestingLevel()); return $part; } /** Get the highest nesting level nested inside this message */ - private function _getTopNestingLevel() + private function getTopNestingLevel() { $highestLevel = $this->getNestingLevel(); foreach ($this->getChildren() as $child) { diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php index a13f1b2..63dda3d 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php @@ -13,79 +13,86 @@ * * @author Chris Corbyn */ -class Swift_Mime_SimpleMimeEntity implements Swift_Mime_MimeEntity +class Swift_Mime_SimpleMimeEntity implements Swift_Mime_CharsetObserver, Swift_Mime_EncodingObserver { + /** Main message document; there can only be one of these */ + const LEVEL_TOP = 16; + + /** An entity which nests with the same precedence as an attachment */ + const LEVEL_MIXED = 256; + + /** An entity which nests with the same precedence as a mime part */ + const LEVEL_ALTERNATIVE = 4096; + + /** An entity which nests with the same precedence as embedded content */ + const LEVEL_RELATED = 65536; + /** A collection of Headers for this mime entity */ - private $_headers; + private $headers; /** The body as a string, or a stream */ - private $_body; + private $body; /** The encoder that encodes the body into a streamable format */ - private $_encoder; + private $encoder; - /** The grammar to use for id validation */ - private $_grammar; + /** Message ID generator */ + private $idGenerator; /** A mime boundary, if any is used */ - private $_boundary; + private $boundary; /** Mime types to be used based on the nesting level */ - private $_compositeRanges = array( - 'multipart/mixed' => array(self::LEVEL_TOP, self::LEVEL_MIXED), - 'multipart/alternative' => array(self::LEVEL_MIXED, self::LEVEL_ALTERNATIVE), - 'multipart/related' => array(self::LEVEL_ALTERNATIVE, self::LEVEL_RELATED), - ); + private $compositeRanges = [ + 'multipart/mixed' => [self::LEVEL_TOP, self::LEVEL_MIXED], + 'multipart/alternative' => [self::LEVEL_MIXED, self::LEVEL_ALTERNATIVE], + 'multipart/related' => [self::LEVEL_ALTERNATIVE, self::LEVEL_RELATED], + ]; /** A set of filter rules to define what level an entity should be nested at */ - private $_compoundLevelFilters = array(); + private $compoundLevelFilters = []; /** The nesting level of this entity */ - private $_nestingLevel = self::LEVEL_ALTERNATIVE; + private $nestingLevel = self::LEVEL_ALTERNATIVE; /** A KeyCache instance used during encoding and streaming */ - private $_cache; + private $cache; /** Direct descendants of this entity */ - private $_immediateChildren = array(); + private $immediateChildren = []; /** All descendants of this entity */ - private $_children = array(); + private $children = []; /** The maximum line length of the body of this entity */ - private $_maxLineLength = 78; + private $maxLineLength = 78; /** The order in which alternative mime types should appear */ - private $_alternativePartOrder = array( + private $alternativePartOrder = [ 'text/plain' => 1, 'text/html' => 2, 'multipart/related' => 3, - ); + ]; /** The CID of this entity */ - private $_id; + private $id; /** The key used for accessing the cache */ - private $_cacheKey; + private $cacheKey; - protected $_userContentType; + protected $userContentType; /** * Create a new SimpleMimeEntity with $headers, $encoder and $cache. - * - * @param Swift_Mime_HeaderSet $headers - * @param Swift_Mime_ContentEncoder $encoder - * @param Swift_KeyCache $cache - * @param Swift_Mime_Grammar $grammar */ - public function __construct(Swift_Mime_HeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_Mime_Grammar $grammar) + public function __construct(Swift_Mime_SimpleHeaderSet $headers, Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache, Swift_IdGenerator $idGenerator) { - $this->_cacheKey = md5(uniqid(getmypid().mt_rand(), true)); - $this->_cache = $cache; - $this->_headers = $headers; - $this->_grammar = $grammar; + $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values + $this->cache = $cache; + $this->headers = $headers; + $this->idGenerator = $idGenerator; $this->setEncoder($encoder); - $this->_headers->defineOrdering(array('Content-Type', 'Content-Transfer-Encoding')); + $this->headers->defineOrdering(['Content-Type', 'Content-Transfer-Encoding']); // This array specifies that, when the entire MIME document contains // $compoundLevel, then for each child within $level, if its Content-Type @@ -100,16 +107,16 @@ public function __construct(Swift_Mime_HeaderSet $headers, Swift_Mime_ContentEnc // ) // ) - $this->_compoundLevelFilters = array( - (self::LEVEL_ALTERNATIVE + self::LEVEL_RELATED) => array( - self::LEVEL_ALTERNATIVE => array( + $this->compoundLevelFilters = [ + (self::LEVEL_ALTERNATIVE + self::LEVEL_RELATED) => [ + self::LEVEL_ALTERNATIVE => [ 'text/plain' => self::LEVEL_ALTERNATIVE, 'text/html' => self::LEVEL_RELATED, - ), - ), - ); + ], + ], + ]; - $this->_id = $this->getRandomId(); + $this->id = $this->idGenerator->generateId(); } /** @@ -119,19 +126,19 @@ public function __construct(Swift_Mime_HeaderSet $headers, Swift_Mime_ContentEnc */ public function generateId() { - $this->setId($this->getRandomId()); + $this->setId($this->idGenerator->generateId()); - return $this->_id; + return $this->id; } /** - * Get the {@link Swift_Mime_HeaderSet} for this entity. + * Get the {@link Swift_Mime_SimpleHeaderSet} for this entity. * - * @return Swift_Mime_HeaderSet + * @return Swift_Mime_SimpleHeaderSet */ public function getHeaders() { - return $this->_headers; + return $this->headers; } /** @@ -143,7 +150,7 @@ public function getHeaders() */ public function getNestingLevel() { - return $this->_nestingLevel; + return $this->nestingLevel; } /** @@ -153,7 +160,17 @@ public function getNestingLevel() */ public function getContentType() { - return $this->_getHeaderFieldModel('Content-Type'); + return $this->getHeaderFieldModel('Content-Type'); + } + + /** + * Get the Body Content-type of this entity. + * + * @return string + */ + public function getBodyContentType() + { + return $this->userContentType; } /** @@ -165,10 +182,10 @@ public function getContentType() */ public function setContentType($type) { - $this->_setContentTypeInHeaders($type); + $this->setContentTypeInHeaders($type); // Keep track of the value so that if the content-type changes automatically // due to added child entities, it can be restored if they are later removed - $this->_userContentType = $type; + $this->userContentType = $type; return $this; } @@ -182,9 +199,9 @@ public function setContentType($type) */ public function getId() { - $tmp = (array) $this->_getHeaderFieldModel($this->_getIdField()); + $tmp = (array) $this->getHeaderFieldModel($this->getIdField()); - return $this->_headers->has($this->_getIdField()) ? current($tmp) : $this->_id; + return $this->headers->has($this->getIdField()) ? current($tmp) : $this->id; } /** @@ -196,10 +213,10 @@ public function getId() */ public function setId($id) { - if (!$this->_setHeaderFieldModel($this->_getIdField(), $id)) { - $this->_headers->addIdHeader($this->_getIdField(), $id); + if (!$this->setHeaderFieldModel($this->getIdField(), $id)) { + $this->headers->addIdHeader($this->getIdField(), $id); } - $this->_id = $id; + $this->id = $id; return $this; } @@ -213,7 +230,7 @@ public function setId($id) */ public function getDescription() { - return $this->_getHeaderFieldModel('Content-Description'); + return $this->getHeaderFieldModel('Content-Description'); } /** @@ -227,8 +244,8 @@ public function getDescription() */ public function setDescription($description) { - if (!$this->_setHeaderFieldModel('Content-Description', $description)) { - $this->_headers->addTextHeader('Content-Description', $description); + if (!$this->setHeaderFieldModel('Content-Description', $description)) { + $this->headers->addTextHeader('Content-Description', $description); } return $this; @@ -241,7 +258,7 @@ public function setDescription($description) */ public function getMaxLineLength() { - return $this->_maxLineLength; + return $this->maxLineLength; } /** @@ -255,7 +272,7 @@ public function getMaxLineLength() */ public function setMaxLineLength($length) { - $this->_maxLineLength = $length; + $this->maxLineLength = $length; return $this; } @@ -263,44 +280,43 @@ public function setMaxLineLength($length) /** * Get all children added to this entity. * - * @return Swift_Mime_MimeEntity[] + * @return Swift_Mime_SimpleMimeEntity[] */ public function getChildren() { - return $this->_children; + return $this->children; } /** * Set all children of this entity. * - * @param Swift_Mime_MimeEntity[] $children - * @param int $compoundLevel For internal use only + * @param Swift_Mime_SimpleMimeEntity[] $children + * @param int $compoundLevel For internal use only * * @return $this */ public function setChildren(array $children, $compoundLevel = null) { // TODO: Try to refactor this logic - - $compoundLevel = isset($compoundLevel) ? $compoundLevel : $this->_getCompoundLevel($children); - $immediateChildren = array(); - $grandchildren = array(); - $newContentType = $this->_userContentType; + $compoundLevel = $compoundLevel ?? $this->getCompoundLevel($children); + $immediateChildren = []; + $grandchildren = []; + $newContentType = $this->userContentType; foreach ($children as $child) { - $level = $this->_getNeededChildLevel($child, $compoundLevel); + $level = $this->getNeededChildLevel($child, $compoundLevel); if (empty($immediateChildren)) { //first iteration - $immediateChildren = array($child); + $immediateChildren = [$child]; } else { - $nextLevel = $this->_getNeededChildLevel($immediateChildren[0], $compoundLevel); + $nextLevel = $this->getNeededChildLevel($immediateChildren[0], $compoundLevel); if ($nextLevel == $level) { $immediateChildren[] = $child; } elseif ($level < $nextLevel) { // Re-assign immediateChildren to grandchildren $grandchildren = array_merge($grandchildren, $immediateChildren); // Set new children - $immediateChildren = array($child); + $immediateChildren = [$child]; } else { $grandchildren[] = $child; } @@ -308,11 +324,11 @@ public function setChildren(array $children, $compoundLevel = null) } if ($immediateChildren) { - $lowestLevel = $this->_getNeededChildLevel($immediateChildren[0], $compoundLevel); + $lowestLevel = $this->getNeededChildLevel($immediateChildren[0], $compoundLevel); // Determine which composite media type is needed to accommodate the // immediate children - foreach ($this->_compositeRanges as $mediaType => $range) { + foreach ($this->compositeRanges as $mediaType => $range) { if ($lowestLevel > $range[0] && $lowestLevel <= $range[1]) { $newContentType = $mediaType; @@ -322,18 +338,18 @@ public function setChildren(array $children, $compoundLevel = null) // Put any grandchildren in a subpart if (!empty($grandchildren)) { - $subentity = $this->_createChild(); - $subentity->_setNestingLevel($lowestLevel); + $subentity = $this->createChild(); + $subentity->setNestingLevel($lowestLevel); $subentity->setChildren($grandchildren, $compoundLevel); array_unshift($immediateChildren, $subentity); } } - $this->_immediateChildren = $immediateChildren; - $this->_children = $children; - $this->_setContentTypeInHeaders($newContentType); - $this->_fixHeaders(); - $this->_sortChildren(); + $this->immediateChildren = $immediateChildren; + $this->children = $children; + $this->setContentTypeInHeaders($newContentType); + $this->fixHeaders(); + $this->sortChildren(); return $this; } @@ -345,7 +361,7 @@ public function setChildren(array $children, $compoundLevel = null) */ public function getBody() { - return $this->_body instanceof Swift_OutputByteStream ? $this->_readStream($this->_body) : $this->_body; + return $this->body instanceof Swift_OutputByteStream ? $this->readStream($this->body) : $this->body; } /** @@ -359,12 +375,12 @@ public function getBody() */ public function setBody($body, $contentType = null) { - if ($body !== $this->_body) { - $this->_clearCache(); + if ($body !== $this->body) { + $this->clearCache(); } - $this->_body = $body; - if (isset($contentType)) { + $this->body = $body; + if (null !== $contentType) { $this->setContentType($contentType); } @@ -378,25 +394,23 @@ public function setBody($body, $contentType = null) */ public function getEncoder() { - return $this->_encoder; + return $this->encoder; } /** * Set the encoder used for the body of this entity. * - * @param Swift_Mime_ContentEncoder $encoder - * * @return $this */ public function setEncoder(Swift_Mime_ContentEncoder $encoder) { - if ($encoder !== $this->_encoder) { - $this->_clearCache(); + if ($encoder !== $this->encoder) { + $this->clearCache(); } - $this->_encoder = $encoder; - $this->_setEncoding($encoder->getName()); - $this->_notifyEncoderChanged($encoder); + $this->encoder = $encoder; + $this->setEncoding($encoder->getName()); + $this->notifyEncoderChanged($encoder); return $this; } @@ -408,11 +422,11 @@ public function setEncoder(Swift_Mime_ContentEncoder $encoder) */ public function getBoundary() { - if (!isset($this->_boundary)) { - $this->_boundary = '_=_swift_v4_'.time().'_'.md5(getmypid().mt_rand().uniqid('', true)).'_=_'; + if (!isset($this->boundary)) { + $this->boundary = '_=_swift_'.time().'_'.bin2hex(random_bytes(16)).'_=_'; } - return $this->_boundary; + return $this->boundary; } /** @@ -426,8 +440,8 @@ public function getBoundary() */ public function setBoundary($boundary) { - $this->_assertValidBoundary($boundary); - $this->_boundary = $boundary; + $this->assertValidBoundary($boundary); + $this->boundary = $boundary; return $this; } @@ -440,18 +454,16 @@ public function setBoundary($boundary) */ public function charsetChanged($charset) { - $this->_notifyCharsetChanged($charset); + $this->notifyCharsetChanged($charset); } /** * Receive notification that the encoder of this entity or a parent entity * has changed. - * - * @param Swift_Mime_ContentEncoder $encoder */ public function encoderChanged(Swift_Mime_ContentEncoder $encoder) { - $this->_notifyEncoderChanged($encoder); + $this->notifyEncoderChanged($encoder); } /** @@ -461,8 +473,8 @@ public function encoderChanged(Swift_Mime_ContentEncoder $encoder) */ public function toString() { - $string = $this->_headers->toString(); - $string .= $this->_bodyToString(); + $string = $this->headers->toString(); + $string .= $this->bodyToString(); return $string; } @@ -472,22 +484,22 @@ public function toString() * * @return string */ - protected function _bodyToString() + protected function bodyToString() { $string = ''; - if (isset($this->_body) && empty($this->_immediateChildren)) { - if ($this->_cache->hasKey($this->_cacheKey, 'body')) { - $body = $this->_cache->getString($this->_cacheKey, 'body'); + if (isset($this->body) && empty($this->immediateChildren)) { + if ($this->cache->hasKey($this->cacheKey, 'body')) { + $body = $this->cache->getString($this->cacheKey, 'body'); } else { - $body = "\r\n".$this->_encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength()); - $this->_cache->setString($this->_cacheKey, 'body', $body, Swift_KeyCache::MODE_WRITE); + $body = "\r\n".$this->encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength()); + $this->cache->setString($this->cacheKey, 'body', $body, Swift_KeyCache::MODE_WRITE); } $string .= $body; } - if (!empty($this->_immediateChildren)) { - foreach ($this->_immediateChildren as $child) { + if (!empty($this->immediateChildren)) { + foreach ($this->immediateChildren as $child) { $string .= "\r\n\r\n--".$this->getBoundary()."\r\n"; $string .= $child->toString(); } @@ -511,42 +523,38 @@ public function __toString() /** * Write this entire entity to a {@see Swift_InputByteStream}. - * - * @param Swift_InputByteStream */ public function toByteStream(Swift_InputByteStream $is) { - $is->write($this->_headers->toString()); + $is->write($this->headers->toString()); $is->commit(); - $this->_bodyToByteStream($is); + $this->bodyToByteStream($is); } /** * Write this entire entity to a {@link Swift_InputByteStream}. - * - * @param Swift_InputByteStream */ - protected function _bodyToByteStream(Swift_InputByteStream $is) + protected function bodyToByteStream(Swift_InputByteStream $is) { - if (empty($this->_immediateChildren)) { - if (isset($this->_body)) { - if ($this->_cache->hasKey($this->_cacheKey, 'body')) { - $this->_cache->exportToByteStream($this->_cacheKey, 'body', $is); + if (empty($this->immediateChildren)) { + if (isset($this->body)) { + if ($this->cache->hasKey($this->cacheKey, 'body')) { + $this->cache->exportToByteStream($this->cacheKey, 'body', $is); } else { - $cacheIs = $this->_cache->getInputByteStream($this->_cacheKey, 'body'); + $cacheIs = $this->cache->getInputByteStream($this->cacheKey, 'body'); if ($cacheIs) { $is->bind($cacheIs); } $is->write("\r\n"); - if ($this->_body instanceof Swift_OutputByteStream) { - $this->_body->setReadPointer(0); + if ($this->body instanceof Swift_OutputByteStream) { + $this->body->setReadPointer(0); - $this->_encoder->encodeByteStream($this->_body, $is, 0, $this->getMaxLineLength()); + $this->encoder->encodeByteStream($this->body, $is, 0, $this->getMaxLineLength()); } else { - $is->write($this->_encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength())); + $is->write($this->encoder->encodeString($this->getBody(), 0, $this->getMaxLineLength())); } if ($cacheIs) { @@ -556,8 +564,8 @@ protected function _bodyToByteStream(Swift_InputByteStream $is) } } - if (!empty($this->_immediateChildren)) { - foreach ($this->_immediateChildren as $child) { + if (!empty($this->immediateChildren)) { + foreach ($this->immediateChildren as $child) { $is->write("\r\n\r\n--".$this->getBoundary()."\r\n"); $child->toByteStream($is); } @@ -568,7 +576,7 @@ protected function _bodyToByteStream(Swift_InputByteStream $is) /** * Get the name of the header that provides the ID of this entity. */ - protected function _getIdField() + protected function getIdField() { return 'Content-ID'; } @@ -576,20 +584,20 @@ protected function _getIdField() /** * Get the model data (usually an array or a string) for $field. */ - protected function _getHeaderFieldModel($field) + protected function getHeaderFieldModel($field) { - if ($this->_headers->has($field)) { - return $this->_headers->get($field)->getFieldBodyModel(); + if ($this->headers->has($field)) { + return $this->headers->get($field)->getFieldBodyModel(); } } /** * Set the model data for $field. */ - protected function _setHeaderFieldModel($field, $model) + protected function setHeaderFieldModel($field, $model) { - if ($this->_headers->has($field)) { - $this->_headers->get($field)->setFieldBodyModel($model); + if ($this->headers->has($field)) { + $this->headers->get($field)->setFieldBodyModel($model); return true; } @@ -600,20 +608,20 @@ protected function _setHeaderFieldModel($field, $model) /** * Get the parameter value of $parameter on $field header. */ - protected function _getHeaderParameter($field, $parameter) + protected function getHeaderParameter($field, $parameter) { - if ($this->_headers->has($field)) { - return $this->_headers->get($field)->getParameter($parameter); + if ($this->headers->has($field)) { + return $this->headers->get($field)->getParameter($parameter); } } /** * Set the parameter value of $parameter on $field header. */ - protected function _setHeaderParameter($field, $parameter, $value) + protected function setHeaderParameter($field, $parameter, $value) { - if ($this->_headers->has($field)) { - $this->_headers->get($field)->setParameter($parameter, $value); + if ($this->headers->has($field)) { + $this->headers->get($field)->setParameter($parameter, $value); return true; } @@ -624,16 +632,16 @@ protected function _setHeaderParameter($field, $parameter, $value) /** * Re-evaluate what content type and encoding should be used on this entity. */ - protected function _fixHeaders() + protected function fixHeaders() { - if (count($this->_immediateChildren)) { - $this->_setHeaderParameter('Content-Type', 'boundary', + if (count($this->immediateChildren)) { + $this->setHeaderParameter('Content-Type', 'boundary', $this->getBoundary() ); - $this->_headers->remove('Content-Transfer-Encoding'); + $this->headers->remove('Content-Transfer-Encoding'); } else { - $this->_setHeaderParameter('Content-Type', 'boundary', null); - $this->_setEncoding($this->_encoder->getName()); + $this->setHeaderParameter('Content-Type', 'boundary', null); + $this->setEncoding($this->encoder->getName()); } } @@ -642,50 +650,30 @@ protected function _fixHeaders() * * @return Swift_KeyCache */ - protected function _getCache() + protected function getCache() { - return $this->_cache; + return $this->cache; } /** - * Get the grammar used for validation. + * Get the ID generator. * - * @return Swift_Mime_Grammar + * @return Swift_IdGenerator */ - protected function _getGrammar() + protected function getIdGenerator() { - return $this->_grammar; + return $this->idGenerator; } /** * Empty the KeyCache for this entity. */ - protected function _clearCache() + protected function clearCache() { - $this->_cache->clearKey($this->_cacheKey, 'body'); + $this->cache->clearKey($this->cacheKey, 'body'); } - /** - * Returns a random Content-ID or Message-ID. - * - * @return string - */ - protected function getRandomId() - { - $idLeft = md5(getmypid().'.'.time().'.'.uniqid(mt_rand(), true)); - $idRight = !empty($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'swift.generated'; - $id = $idLeft.'@'.$idRight; - - try { - $this->_assertValidId($id); - } catch (Swift_RfcComplianceException $e) { - $id = $idLeft.'@swift.generated'; - } - - return $id; - } - - private function _readStream(Swift_OutputByteStream $os) + private function readStream(Swift_OutputByteStream $os) { $string = ''; while (false !== $bytes = $os->read(8192)) { @@ -697,33 +685,33 @@ private function _readStream(Swift_OutputByteStream $os) return $string; } - private function _setEncoding($encoding) + private function setEncoding($encoding) { - if (!$this->_setHeaderFieldModel('Content-Transfer-Encoding', $encoding)) { - $this->_headers->addTextHeader('Content-Transfer-Encoding', $encoding); + if (!$this->setHeaderFieldModel('Content-Transfer-Encoding', $encoding)) { + $this->headers->addTextHeader('Content-Transfer-Encoding', $encoding); } } - private function _assertValidBoundary($boundary) + private function assertValidBoundary($boundary) { if (!preg_match('/^[a-z0-9\'\(\)\+_\-,\.\/:=\?\ ]{0,69}[a-z0-9\'\(\)\+_\-,\.\/:=\?]$/Di', $boundary)) { throw new Swift_RfcComplianceException('Mime boundary set is not RFC 2046 compliant.'); } } - private function _setContentTypeInHeaders($type) + private function setContentTypeInHeaders($type) { - if (!$this->_setHeaderFieldModel('Content-Type', $type)) { - $this->_headers->addParameterizedHeader('Content-Type', $type); + if (!$this->setHeaderFieldModel('Content-Type', $type)) { + $this->headers->addParameterizedHeader('Content-Type', $type); } } - private function _setNestingLevel($level) + private function setNestingLevel($level) { - $this->_nestingLevel = $level; + $this->nestingLevel = $level; } - private function _getCompoundLevel($children) + private function getCompoundLevel($children) { $level = 0; foreach ($children as $child) { @@ -733,10 +721,10 @@ private function _getCompoundLevel($children) return $level; } - private function _getNeededChildLevel($child, $compoundLevel) + private function getNeededChildLevel($child, $compoundLevel) { - $filter = array(); - foreach ($this->_compoundLevelFilters as $bitmask => $rules) { + $filter = []; + foreach ($this->compoundLevelFilters as $bitmask => $rules) { if (($compoundLevel & $bitmask) === $bitmask) { $filter = $rules + $filter; } @@ -752,33 +740,33 @@ private function _getNeededChildLevel($child, $compoundLevel) return $realLevel; } - private function _createChild() + private function createChild() { - return new self($this->_headers->newInstance(), $this->_encoder, $this->_cache, $this->_grammar); + return new self($this->headers->newInstance(), $this->encoder, $this->cache, $this->idGenerator); } - private function _notifyEncoderChanged(Swift_Mime_ContentEncoder $encoder) + private function notifyEncoderChanged(Swift_Mime_ContentEncoder $encoder) { - foreach ($this->_immediateChildren as $child) { + foreach ($this->immediateChildren as $child) { $child->encoderChanged($encoder); } } - private function _notifyCharsetChanged($charset) + private function notifyCharsetChanged($charset) { - $this->_encoder->charsetChanged($charset); - $this->_headers->charsetChanged($charset); - foreach ($this->_immediateChildren as $child) { + $this->encoder->charsetChanged($charset); + $this->headers->charsetChanged($charset); + foreach ($this->immediateChildren as $child) { $child->charsetChanged($charset); } } - private function _sortChildren() + private function sortChildren() { $shouldSort = false; - foreach ($this->_immediateChildren as $child) { + foreach ($this->immediateChildren as $child) { // NOTE: This include alternative parts moved into a related part - if ($child->getNestingLevel() == self::LEVEL_ALTERNATIVE) { + if (self::LEVEL_ALTERNATIVE == $child->getNestingLevel()) { $shouldSort = true; break; } @@ -787,13 +775,13 @@ private function _sortChildren() // Sort in order of preference, if there is one if ($shouldSort) { // Group the messages by order of preference - $sorted = array(); - foreach ($this->_immediateChildren as $child) { + $sorted = []; + foreach ($this->immediateChildren as $child) { $type = $child->getContentType(); - $level = array_key_exists($type, $this->_alternativePartOrder) ? $this->_alternativePartOrder[$type] : max($this->_alternativePartOrder) + 1; + $level = array_key_exists($type, $this->alternativePartOrder) ? $this->alternativePartOrder[$type] : max($this->alternativePartOrder) + 1; if (empty($sorted[$level])) { - $sorted[$level] = array(); + $sorted[$level] = []; } $sorted[$level][] = $child; @@ -801,7 +789,7 @@ private function _sortChildren() ksort($sorted); - $this->_immediateChildren = array_reduce($sorted, 'array_merge', array()); + $this->immediateChildren = array_reduce($sorted, 'array_merge', []); } } @@ -810,22 +798,8 @@ private function _sortChildren() */ public function __destruct() { - if ($this->_cache instanceof Swift_KeyCache) { - $this->_cache->clearAll($this->_cacheKey); - } - } - - /** - * Throws an Exception if the id passed does not comply with RFC 2822. - * - * @param string $id - * - * @throws Swift_RfcComplianceException - */ - private function _assertValidId($id) - { - if (!preg_match('/^'.$this->_grammar->getDefinition('id-left').'@'.$this->_grammar->getDefinition('id-right').'$/D', $id)) { - throw new Swift_RfcComplianceException('Invalid ID given <'.$id.'>'); + if ($this->cache instanceof Swift_KeyCache) { + $this->cache->clearAll($this->cacheKey); } } @@ -834,11 +808,11 @@ private function _assertValidId($id) */ public function __clone() { - $this->_headers = clone $this->_headers; - $this->_encoder = clone $this->_encoder; - $this->_cacheKey = md5(uniqid(getmypid().mt_rand(), true)); - $children = array(); - foreach ($this->_children as $pos => $child) { + $this->headers = clone $this->headers; + $this->encoder = clone $this->encoder; + $this->cacheKey = bin2hex(random_bytes(16)); // set 32 hex values + $children = []; + foreach ($this->children as $pos => $child) { $children[$pos] = clone $child; } $this->setChildren($children); diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MimePart.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MimePart.php index 525b7ec..14f8432 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MimePart.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/MimePart.php @@ -27,7 +27,7 @@ class Swift_MimePart extends Swift_Mime_MimePart public function __construct($body = null, $contentType = null, $charset = null) { call_user_func_array( - array($this, 'Swift_Mime_MimePart::__construct'), + [$this, 'Swift_Mime_MimePart::__construct'], Swift_DependencyContainer::getInstance() ->createDependenciesFor('mime.part') ); @@ -42,18 +42,4 @@ public function __construct($body = null, $contentType = null, $charset = null) $this->setContentType($contentType); } } - - /** - * Create a new MimePart. - * - * @param string $body - * @param string $contentType - * @param string $charset - * - * @return self - */ - public static function newInstance($body = null, $contentType = null, $charset = null) - { - return new self($body, $contentType, $charset); - } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/NullTransport.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/NullTransport.php index ddde335..eefb9a6 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/NullTransport.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/NullTransport.php @@ -18,19 +18,9 @@ class Swift_NullTransport extends Swift_Transport_NullTransport public function __construct() { call_user_func_array( - array($this, 'Swift_Transport_NullTransport::__construct'), + [$this, 'Swift_Transport_NullTransport::__construct'], Swift_DependencyContainer::getInstance() ->createDependenciesFor('transport.null') ); } - - /** - * Create a new NullTransport instance. - * - * @return self - */ - public static function newInstance() - { - return new self(); - } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php index a2ec2ab..5b1d7de 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php @@ -20,28 +20,28 @@ class Swift_Plugins_AntiFloodPlugin implements Swift_Events_SendListener, Swift_ * * @var int */ - private $_threshold; + private $threshold; /** * The number of seconds to sleep for during a restart. * * @var int */ - private $_sleep; + private $sleep; /** * The internal counter. * * @var int */ - private $_counter = 0; + private $counter = 0; /** * The Sleeper instance for sleeping. * * @var Swift_Plugins_Sleeper */ - private $_sleeper; + private $sleeper; /** * Create a new AntiFloodPlugin with $threshold and $sleep time. @@ -54,7 +54,7 @@ public function __construct($threshold = 99, $sleep = 0, Swift_Plugins_Sleeper $ { $this->setThreshold($threshold); $this->setSleepTime($sleep); - $this->_sleeper = $sleeper; + $this->sleeper = $sleeper; } /** @@ -64,7 +64,7 @@ public function __construct($threshold = 99, $sleep = 0, Swift_Plugins_Sleeper $ */ public function setThreshold($threshold) { - $this->_threshold = $threshold; + $this->threshold = $threshold; } /** @@ -74,7 +74,7 @@ public function setThreshold($threshold) */ public function getThreshold() { - return $this->_threshold; + return $this->threshold; } /** @@ -84,7 +84,7 @@ public function getThreshold() */ public function setSleepTime($sleep) { - $this->_sleep = $sleep; + $this->sleep = $sleep; } /** @@ -94,13 +94,11 @@ public function setSleepTime($sleep) */ public function getSleepTime() { - return $this->_sleep; + return $this->sleep; } /** * Invoked immediately before the Message is sent. - * - * @param Swift_Events_SendEvent $evt */ public function beforeSendPerformed(Swift_Events_SendEvent $evt) { @@ -108,20 +106,18 @@ public function beforeSendPerformed(Swift_Events_SendEvent $evt) /** * Invoked immediately after the Message is sent. - * - * @param Swift_Events_SendEvent $evt */ public function sendPerformed(Swift_Events_SendEvent $evt) { - ++$this->_counter; - if ($this->_counter >= $this->_threshold) { + ++$this->counter; + if ($this->counter >= $this->threshold) { $transport = $evt->getTransport(); $transport->stop(); - if ($this->_sleep) { - $this->sleep($this->_sleep); + if ($this->sleep) { + $this->sleep($this->sleep); } $transport->start(); - $this->_counter = 0; + $this->counter = 0; } } @@ -132,8 +128,8 @@ public function sendPerformed(Swift_Events_SendEvent $evt) */ public function sleep($seconds) { - if (isset($this->_sleeper)) { - $this->_sleeper->sleep($seconds); + if (isset($this->sleeper)) { + $this->sleeper->sleep($seconds); } else { sleep($seconds); } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php index f7e18d0..f7a24dd 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php @@ -20,17 +20,17 @@ class Swift_Plugins_BandwidthMonitorPlugin implements Swift_Events_SendListener, * * @var int */ - private $_out = 0; + private $out = 0; /** * The incoming traffic counter. * * @var int */ - private $_in = 0; + private $in = 0; /** Bound byte streams */ - private $_mirrors = array(); + private $mirrors = []; /** * Not used. @@ -41,8 +41,6 @@ public function beforeSendPerformed(Swift_Events_SendEvent $evt) /** * Invoked immediately after the Message is sent. - * - * @param Swift_Events_SendEvent $evt */ public function sendPerformed(Swift_Events_SendEvent $evt) { @@ -52,24 +50,20 @@ public function sendPerformed(Swift_Events_SendEvent $evt) /** * Invoked immediately following a command being sent. - * - * @param Swift_Events_CommandEvent $evt */ public function commandSent(Swift_Events_CommandEvent $evt) { $command = $evt->getCommand(); - $this->_out += strlen($command); + $this->out += strlen($command); } /** * Invoked immediately following a response coming back. - * - * @param Swift_Events_ResponseEvent $evt */ public function responseReceived(Swift_Events_ResponseEvent $evt) { $response = $evt->getResponse(); - $this->_in += strlen($response); + $this->in += strlen($response); } /** @@ -79,8 +73,8 @@ public function responseReceived(Swift_Events_ResponseEvent $evt) */ public function write($bytes) { - $this->_out += strlen($bytes); - foreach ($this->_mirrors as $stream) { + $this->out += strlen($bytes); + foreach ($this->mirrors as $stream) { $stream->write($bytes); } } @@ -97,12 +91,10 @@ public function commit() * * The stream acts as an observer, receiving all data that is written. * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - * - * @param Swift_InputByteStream $is */ public function bind(Swift_InputByteStream $is) { - $this->_mirrors[] = $is; + $this->mirrors[] = $is; } /** @@ -111,14 +103,12 @@ public function bind(Swift_InputByteStream $is) * If $is is not bound, no errors will be raised. * If the stream currently has any buffered data it will be written to $is * before unbinding occurs. - * - * @param Swift_InputByteStream $is */ public function unbind(Swift_InputByteStream $is) { - foreach ($this->_mirrors as $k => $stream) { + foreach ($this->mirrors as $k => $stream) { if ($is === $stream) { - unset($this->_mirrors[$k]); + unset($this->mirrors[$k]); } } } @@ -128,7 +118,7 @@ public function unbind(Swift_InputByteStream $is) */ public function flushBuffers() { - foreach ($this->_mirrors as $stream) { + foreach ($this->mirrors as $stream) { $stream->flushBuffers(); } } @@ -140,7 +130,7 @@ public function flushBuffers() */ public function getBytesOut() { - return $this->_out; + return $this->out; } /** @@ -150,7 +140,7 @@ public function getBytesOut() */ public function getBytesIn() { - return $this->_in; + return $this->in; } /** @@ -158,7 +148,7 @@ public function getBytesIn() */ public function reset() { - $this->_out = 0; - $this->_in = 0; + $this->out = 0; + $this->in = 0; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php index 0762b36..c4b6ee1 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php @@ -17,19 +17,19 @@ class Swift_Plugins_DecoratorPlugin implements Swift_Events_SendListener, Swift_Plugins_Decorator_Replacements { /** The replacement map */ - private $_replacements; + private $replacements; /** The body as it was before replacements */ - private $_originalBody; + private $originalBody; /** The original headers of the message, before replacements */ - private $_originalHeaders = array(); + private $originalHeaders = []; /** Bodies of children before they are replaced */ - private $_originalChildBodies = array(); + private $originalChildBodies = []; /** The Message that was last replaced */ - private $_lastMessage; + private $lastMessage; /** * Create a new DecoratorPlugin with $replacements. @@ -66,21 +66,19 @@ public function __construct($replacements) public function setReplacements($replacements) { if (!($replacements instanceof Swift_Plugins_Decorator_Replacements)) { - $this->_replacements = (array) $replacements; + $this->replacements = (array) $replacements; } else { - $this->_replacements = $replacements; + $this->replacements = $replacements; } } /** * Invoked immediately before the Message is sent. - * - * @param Swift_Events_SendEvent $evt */ public function beforeSendPerformed(Swift_Events_SendEvent $evt) { $message = $evt->getMessage(); - $this->_restoreMessage($message); + $this->restoreMessage($message); $to = array_keys($message->getTo()); $address = array_shift($to); if ($replacements = $this->getReplacementsFor($address)) { @@ -91,7 +89,7 @@ public function beforeSendPerformed(Swift_Events_SendEvent $evt) $search, $replace, $body ); if ($body != $bodyReplaced) { - $this->_originalBody = $body; + $this->originalBody = $body; $message->setBody($bodyReplaced); } @@ -99,7 +97,7 @@ public function beforeSendPerformed(Swift_Events_SendEvent $evt) $body = $header->getFieldBodyModel(); $count = 0; if (is_array($body)) { - $bodyReplaced = array(); + $bodyReplaced = []; foreach ($body as $key => $value) { $count1 = 0; $count2 = 0; @@ -111,12 +109,12 @@ public function beforeSendPerformed(Swift_Events_SendEvent $evt) $count = 1; } } - } else { + } elseif (is_string($body)) { $bodyReplaced = str_replace($search, $replace, $body, $count); } if ($count) { - $this->_originalHeaders[$header->getFieldName()] = $body; + $this->originalHeaders[$header->getFieldName()] = $body; $header->setFieldBodyModel($bodyReplaced); } } @@ -131,11 +129,11 @@ public function beforeSendPerformed(Swift_Events_SendEvent $evt) ); if ($body != $bodyReplaced) { $child->setBody($bodyReplaced); - $this->_originalChildBodies[$child->getId()] = $body; + $this->originalChildBodies[$child->getId()] = $body; } } } - $this->_lastMessage = $message; + $this->lastMessage = $message; } } @@ -155,50 +153,48 @@ public function beforeSendPerformed(Swift_Events_SendEvent $evt) */ public function getReplacementsFor($address) { - if ($this->_replacements instanceof Swift_Plugins_Decorator_Replacements) { - return $this->_replacements->getReplacementsFor($address); + if ($this->replacements instanceof Swift_Plugins_Decorator_Replacements) { + return $this->replacements->getReplacementsFor($address); } - return isset($this->_replacements[$address]) ? $this->_replacements[$address] : null; + return $this->replacements[$address] ?? null; } /** * Invoked immediately after the Message is sent. - * - * @param Swift_Events_SendEvent $evt */ public function sendPerformed(Swift_Events_SendEvent $evt) { - $this->_restoreMessage($evt->getMessage()); + $this->restoreMessage($evt->getMessage()); } /** Restore a changed message back to its original state */ - private function _restoreMessage(Swift_Mime_Message $message) + private function restoreMessage(Swift_Mime_SimpleMessage $message) { - if ($this->_lastMessage === $message) { - if (isset($this->_originalBody)) { - $message->setBody($this->_originalBody); - $this->_originalBody = null; + if ($this->lastMessage === $message) { + if (isset($this->originalBody)) { + $message->setBody($this->originalBody); + $this->originalBody = null; } - if (!empty($this->_originalHeaders)) { + if (!empty($this->originalHeaders)) { foreach ($message->getHeaders()->getAll() as $header) { - if (array_key_exists($header->getFieldName(), $this->_originalHeaders)) { - $header->setFieldBodyModel($this->_originalHeaders[$header->getFieldName()]); + if (array_key_exists($header->getFieldName(), $this->originalHeaders)) { + $header->setFieldBodyModel($this->originalHeaders[$header->getFieldName()]); } } - $this->_originalHeaders = array(); + $this->originalHeaders = []; } - if (!empty($this->_originalChildBodies)) { + if (!empty($this->originalChildBodies)) { $children = (array) $message->getChildren(); foreach ($children as $child) { $id = $child->getId(); - if (array_key_exists($id, $this->_originalChildBodies)) { - $child->setBody($this->_originalChildBodies[$id]); + if (array_key_exists($id, $this->originalChildBodies)) { + $child->setBody($this->originalChildBodies[$id]); } } - $this->_originalChildBodies = array(); + $this->originalChildBodies = []; } - $this->_lastMessage = null; + $this->lastMessage = null; } } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php index 5834440..3f4dbbf 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ImpersonatePlugin.php @@ -20,7 +20,7 @@ class Swift_Plugins_ImpersonatePlugin implements Swift_Events_SendListener * * @var string */ - private $_sender; + private $sender; /** * Create a new ImpersonatePlugin to impersonate $sender. @@ -29,13 +29,11 @@ class Swift_Plugins_ImpersonatePlugin implements Swift_Events_SendListener */ public function __construct($sender) { - $this->_sender = $sender; + $this->sender = $sender; } /** * Invoked immediately before the Message is sent. - * - * @param Swift_Events_SendEvent $evt */ public function beforeSendPerformed(Swift_Events_SendEvent $evt) { @@ -46,13 +44,11 @@ public function beforeSendPerformed(Swift_Events_SendEvent $evt) $headers->addPathHeader('X-Swift-Return-Path', $message->getReturnPath()); // replace them with the one to send to - $message->setReturnPath($this->_sender); + $message->setReturnPath($this->sender); } /** * Invoked immediately after the Message is sent. - * - * @param Swift_Events_SendEvent $evt */ public function sendPerformed(Swift_Events_SendEvent $evt) { diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php index 64db438..c70a038 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php @@ -11,21 +11,19 @@ /** * Does real time logging of Transport level information. * - * @author Chris Corbyn + * @author Chris Corbyn */ class Swift_Plugins_LoggerPlugin implements Swift_Events_CommandListener, Swift_Events_ResponseListener, Swift_Events_TransportChangeListener, Swift_Events_TransportExceptionListener, Swift_Plugins_Logger { /** The logger which is delegated to */ - private $_logger; + private $logger; /** * Create a new LoggerPlugin using $logger. - * - * @param Swift_Plugins_Logger $logger */ public function __construct(Swift_Plugins_Logger $logger) { - $this->_logger = $logger; + $this->logger = $logger; } /** @@ -35,7 +33,7 @@ public function __construct(Swift_Plugins_Logger $logger) */ public function add($entry) { - $this->_logger->add($entry); + $this->logger->add($entry); } /** @@ -43,7 +41,7 @@ public function add($entry) */ public function clear() { - $this->_logger->clear(); + $this->logger->clear(); } /** @@ -53,89 +51,75 @@ public function clear() */ public function dump() { - return $this->_logger->dump(); + return $this->logger->dump(); } /** * Invoked immediately following a command being sent. - * - * @param Swift_Events_CommandEvent $evt */ public function commandSent(Swift_Events_CommandEvent $evt) { $command = $evt->getCommand(); - $this->_logger->add(sprintf('>> %s', $command)); + $this->logger->add(sprintf('>> %s', $command)); } /** * Invoked immediately following a response coming back. - * - * @param Swift_Events_ResponseEvent $evt */ public function responseReceived(Swift_Events_ResponseEvent $evt) { $response = $evt->getResponse(); - $this->_logger->add(sprintf('<< %s', $response)); + $this->logger->add(sprintf('<< %s', $response)); } /** * Invoked just before a Transport is started. - * - * @param Swift_Events_TransportChangeEvent $evt */ public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) { $transportName = get_class($evt->getSource()); - $this->_logger->add(sprintf('++ Starting %s', $transportName)); + $this->logger->add(sprintf('++ Starting %s', $transportName)); } /** * Invoked immediately after the Transport is started. - * - * @param Swift_Events_TransportChangeEvent $evt */ public function transportStarted(Swift_Events_TransportChangeEvent $evt) { $transportName = get_class($evt->getSource()); - $this->_logger->add(sprintf('++ %s started', $transportName)); + $this->logger->add(sprintf('++ %s started', $transportName)); } /** * Invoked just before a Transport is stopped. - * - * @param Swift_Events_TransportChangeEvent $evt */ public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) { $transportName = get_class($evt->getSource()); - $this->_logger->add(sprintf('++ Stopping %s', $transportName)); + $this->logger->add(sprintf('++ Stopping %s', $transportName)); } /** * Invoked immediately after the Transport is stopped. - * - * @param Swift_Events_TransportChangeEvent $evt */ public function transportStopped(Swift_Events_TransportChangeEvent $evt) { $transportName = get_class($evt->getSource()); - $this->_logger->add(sprintf('++ %s stopped', $transportName)); + $this->logger->add(sprintf('++ %s stopped', $transportName)); } /** * Invoked as a TransportException is thrown in the Transport system. - * - * @param Swift_Events_TransportExceptionEvent $evt */ public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt) { $e = $evt->getException(); $message = $e->getMessage(); $code = $e->getCode(); - $this->_logger->add(sprintf('!! %s (code: %s)', $message, $code)); + $this->logger->add(sprintf('!! %s (code: %s)', $message, $code)); $message .= PHP_EOL; $message .= 'Log data:'.PHP_EOL; - $message .= $this->_logger->dump(); + $message .= $this->logger->dump(); $evt->cancelBubble(); throw new Swift_TransportException($message, $code, $e->getPrevious()); } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php index 865bb0a..b00bcaa 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php @@ -20,14 +20,14 @@ class Swift_Plugins_Loggers_ArrayLogger implements Swift_Plugins_Logger * * @var array */ - private $_log = array(); + private $log = []; /** * Max size of the log. * * @var int */ - private $_size = 0; + private $size = 0; /** * Create a new ArrayLogger with a maximum of $size entries. @@ -36,7 +36,7 @@ class Swift_Plugins_Loggers_ArrayLogger implements Swift_Plugins_Logger */ public function __construct($size = 50) { - $this->_size = $size; + $this->size = $size; } /** @@ -46,9 +46,9 @@ public function __construct($size = 50) */ public function add($entry) { - $this->_log[] = $entry; - while (count($this->_log) > $this->_size) { - array_shift($this->_log); + $this->log[] = $entry; + while (count($this->log) > $this->size) { + array_shift($this->log); } } @@ -57,7 +57,7 @@ public function add($entry) */ public function clear() { - $this->_log = array(); + $this->log = []; } /** @@ -67,6 +67,6 @@ public function clear() */ public function dump() { - return implode(PHP_EOL, $this->_log); + return implode(PHP_EOL, $this->log); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php index 3583297..40a53d2 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php @@ -16,7 +16,7 @@ class Swift_Plugins_Loggers_EchoLogger implements Swift_Plugins_Logger { /** Whether or not HTML should be output */ - private $_isHtml; + private $isHtml; /** * Create a new EchoLogger. @@ -25,7 +25,7 @@ class Swift_Plugins_Loggers_EchoLogger implements Swift_Plugins_Logger */ public function __construct($isHtml = true) { - $this->_isHtml = $isHtml; + $this->isHtml = $isHtml; } /** @@ -35,7 +35,7 @@ public function __construct($isHtml = true) */ public function add($entry) { - if ($this->_isHtml) { + if ($this->isHtml) { printf('%s%s%s', htmlspecialchars($entry, ENT_QUOTES), '
', PHP_EOL); } else { printf('%s%s', $entry, PHP_EOL); diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php index 5ff1d93..3b4de80 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/MessageLogger.php @@ -16,19 +16,19 @@ class Swift_Plugins_MessageLogger implements Swift_Events_SendListener { /** - * @var Swift_Mime_Message[] + * @var Swift_Mime_SimpleMessage[] */ private $messages; public function __construct() { - $this->messages = array(); + $this->messages = []; } /** * Get the message list. * - * @return Swift_Mime_Message[] + * @return Swift_Mime_SimpleMessage[] */ public function getMessages() { @@ -50,13 +50,11 @@ public function countMessages() */ public function clear() { - $this->messages = array(); + $this->messages = []; } /** * Invoked immediately before the Message is sent. - * - * @param Swift_Events_SendEvent $evt */ public function beforeSendPerformed(Swift_Events_SendEvent $evt) { @@ -65,8 +63,6 @@ public function beforeSendPerformed(Swift_Events_SendEvent $evt) /** * Invoked immediately after the Message is sent. - * - * @param Swift_Events_SendEvent $evt */ public function sendPerformed(Swift_Events_SendEvent $evt) { diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php index 3146152..1d5da1c 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php @@ -11,87 +11,70 @@ /** * Makes sure a connection to a POP3 host has been established prior to connecting to SMTP. * - * @author Chris Corbyn + * @author Chris Corbyn */ class Swift_Plugins_PopBeforeSmtpPlugin implements Swift_Events_TransportChangeListener, Swift_Plugins_Pop_Pop3Connection { /** A delegate connection to use (mostly a test hook) */ - private $_connection; + private $connection; /** Hostname of the POP3 server */ - private $_host; + private $host; /** Port number to connect on */ - private $_port; + private $port; /** Encryption type to use (if any) */ - private $_crypto; + private $crypto; /** Username to use (if any) */ - private $_username; + private $username; /** Password to use (if any) */ - private $_password; + private $password; /** Established connection via TCP socket */ - private $_socket; + private $socket; /** Connect timeout in seconds */ - private $_timeout = 10; + private $timeout = 10; /** SMTP Transport to bind to */ - private $_transport; + private $transport; /** * Create a new PopBeforeSmtpPlugin for $host and $port. * - * @param string $host + * @param string $host Hostname or IP. Literal IPv6 addresses should be + * wrapped in square brackets. * @param int $port * @param string $crypto as "tls" or "ssl" */ public function __construct($host, $port = 110, $crypto = null) { - $this->_host = $host; - $this->_port = $port; - $this->_crypto = $crypto; - } - - /** - * Create a new PopBeforeSmtpPlugin for $host and $port. - * - * @param string $host - * @param int $port - * @param string $crypto as "tls" or "ssl" - * - * @return self - */ - public static function newInstance($host, $port = 110, $crypto = null) - { - return new self($host, $port, $crypto); + $this->host = $host; + $this->port = $port; + $this->crypto = $crypto; } /** * Set a Pop3Connection to delegate to instead of connecting directly. * - * @param Swift_Plugins_Pop_Pop3Connection $connection - * * @return $this */ public function setConnection(Swift_Plugins_Pop_Pop3Connection $connection) { - $this->_connection = $connection; + $this->connection = $connection; return $this; } /** * Bind this plugin to a specific SMTP transport instance. - * - * @param Swift_Transport */ public function bindSmtp(Swift_Transport $smtp) { - $this->_transport = $smtp; + $this->transport = $smtp; } /** @@ -103,7 +86,7 @@ public function bindSmtp(Swift_Transport $smtp) */ public function setTimeout($timeout) { - $this->_timeout = (int) $timeout; + $this->timeout = (int) $timeout; return $this; } @@ -117,7 +100,7 @@ public function setTimeout($timeout) */ public function setUsername($username) { - $this->_username = $username; + $this->username = $username; return $this; } @@ -131,7 +114,7 @@ public function setUsername($username) */ public function setPassword($password) { - $this->_password = $password; + $this->password = $password; return $this; } @@ -143,29 +126,29 @@ public function setPassword($password) */ public function connect() { - if (isset($this->_connection)) { - $this->_connection->connect(); + if (isset($this->connection)) { + $this->connection->connect(); } else { - if (!isset($this->_socket)) { + if (!isset($this->socket)) { if (!$socket = fsockopen( - $this->_getHostString(), $this->_port, $errno, $errstr, $this->_timeout)) { + $this->getHostString(), $this->port, $errno, $errstr, $this->timeout)) { throw new Swift_Plugins_Pop_Pop3Exception( - sprintf('Failed to connect to POP3 host [%s]: %s', $this->_host, $errstr) + sprintf('Failed to connect to POP3 host [%s]: %s', $this->host, $errstr) ); } - $this->_socket = $socket; + $this->socket = $socket; - if (false === $greeting = fgets($this->_socket)) { + if (false === $greeting = fgets($this->socket)) { throw new Swift_Plugins_Pop_Pop3Exception( sprintf('Failed to connect to POP3 host [%s]', trim($greeting)) ); } - $this->_assertOk($greeting); + $this->assertOk($greeting); - if ($this->_username) { - $this->_command(sprintf("USER %s\r\n", $this->_username)); - $this->_command(sprintf("PASS %s\r\n", $this->_password)); + if ($this->username) { + $this->command(sprintf("USER %s\r\n", $this->username)); + $this->command(sprintf("PASS %s\r\n", $this->password)); } } } @@ -176,28 +159,26 @@ public function connect() */ public function disconnect() { - if (isset($this->_connection)) { - $this->_connection->disconnect(); + if (isset($this->connection)) { + $this->connection->disconnect(); } else { - $this->_command("QUIT\r\n"); - if (!fclose($this->_socket)) { + $this->command("QUIT\r\n"); + if (!fclose($this->socket)) { throw new Swift_Plugins_Pop_Pop3Exception( - sprintf('POP3 host [%s] connection could not be stopped', $this->_host) + sprintf('POP3 host [%s] connection could not be stopped', $this->host) ); } - $this->_socket = null; + $this->socket = null; } } /** * Invoked just before a Transport is started. - * - * @param Swift_Events_TransportChangeEvent $evt */ public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) { - if (isset($this->_transport)) { - if ($this->_transport !== $evt->getTransport()) { + if (isset($this->transport)) { + if ($this->transport !== $evt->getTransport()) { return; } } @@ -227,38 +208,38 @@ public function transportStopped(Swift_Events_TransportChangeEvent $evt) { } - private function _command($command) + private function command($command) { - if (!fwrite($this->_socket, $command)) { + if (!fwrite($this->socket, $command)) { throw new Swift_Plugins_Pop_Pop3Exception( sprintf('Failed to write command [%s] to POP3 host', trim($command)) ); } - if (false === $response = fgets($this->_socket)) { + if (false === $response = fgets($this->socket)) { throw new Swift_Plugins_Pop_Pop3Exception( sprintf('Failed to read from POP3 host after command [%s]', trim($command)) ); } - $this->_assertOk($response); + $this->assertOk($response); return $response; } - private function _assertOk($response) + private function assertOk($response) { - if (substr($response, 0, 3) != '+OK') { + if ('+OK' != substr($response, 0, 3)) { throw new Swift_Plugins_Pop_Pop3Exception( sprintf('POP3 command failed [%s]', trim($response)) ); } } - private function _getHostString() + private function getHostString() { - $host = $this->_host; - switch (strtolower($this->_crypto)) { + $host = $this->host; + switch (strtolower($this->crypto)) { case 'ssl': $host = 'ssl://'.$host; break; diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php index c3a1f86..b0cb519 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/RedirectingPlugin.php @@ -11,7 +11,7 @@ /** * Redirects all email to a single recipient. * - * @author Fabien Potencier + * @author Fabien Potencier */ class Swift_Plugins_RedirectingPlugin implements Swift_Events_SendListener { @@ -20,25 +20,24 @@ class Swift_Plugins_RedirectingPlugin implements Swift_Events_SendListener * * @var mixed */ - private $_recipient; + private $recipient; /** * List of regular expression for recipient whitelisting. * * @var array */ - private $_whitelist = array(); + private $whitelist = []; /** * Create a new RedirectingPlugin. * * @param mixed $recipient - * @param array $whitelist */ - public function __construct($recipient, array $whitelist = array()) + public function __construct($recipient, array $whitelist = []) { - $this->_recipient = $recipient; - $this->_whitelist = $whitelist; + $this->recipient = $recipient; + $this->whitelist = $whitelist; } /** @@ -48,7 +47,7 @@ public function __construct($recipient, array $whitelist = array()) */ public function setRecipient($recipient) { - $this->_recipient = $recipient; + $this->recipient = $recipient; } /** @@ -58,17 +57,15 @@ public function setRecipient($recipient) */ public function getRecipient() { - return $this->_recipient; + return $this->recipient; } /** * Set a list of regular expressions to whitelist certain recipients. - * - * @param array $whitelist */ public function setWhitelist(array $whitelist) { - $this->_whitelist = $whitelist; + $this->whitelist = $whitelist; } /** @@ -78,13 +75,11 @@ public function setWhitelist(array $whitelist) */ public function getWhitelist() { - return $this->_whitelist; + return $this->whitelist; } /** * Invoked immediately before the Message is sent. - * - * @param Swift_Events_SendEvent $evt */ public function beforeSendPerformed(Swift_Events_SendEvent $evt) { @@ -106,17 +101,17 @@ public function beforeSendPerformed(Swift_Events_SendEvent $evt) } // Filter remaining headers against whitelist - $this->_filterHeaderSet($headers, 'To'); - $this->_filterHeaderSet($headers, 'Cc'); - $this->_filterHeaderSet($headers, 'Bcc'); + $this->filterHeaderSet($headers, 'To'); + $this->filterHeaderSet($headers, 'Cc'); + $this->filterHeaderSet($headers, 'Bcc'); // Add each hard coded recipient $to = $message->getTo(); if (null === $to) { - $to = array(); + $to = []; } - foreach ((array) $this->_recipient as $recipient) { + foreach ((array) $this->recipient as $recipient) { if (!array_key_exists($recipient, $to)) { $message->addTo($recipient); } @@ -126,29 +121,26 @@ public function beforeSendPerformed(Swift_Events_SendEvent $evt) /** * Filter header set against a whitelist of regular expressions. * - * @param Swift_Mime_HeaderSet $headerSet - * @param string $type + * @param string $type */ - private function _filterHeaderSet(Swift_Mime_HeaderSet $headerSet, $type) + private function filterHeaderSet(Swift_Mime_SimpleHeaderSet $headerSet, $type) { foreach ($headerSet->getAll($type) as $headers) { - $headers->setNameAddresses($this->_filterNameAddresses($headers->getNameAddresses())); + $headers->setNameAddresses($this->filterNameAddresses($headers->getNameAddresses())); } } /** * Filtered list of addresses => name pairs. * - * @param array $recipients - * * @return array */ - private function _filterNameAddresses(array $recipients) + private function filterNameAddresses(array $recipients) { - $filtered = array(); + $filtered = []; foreach ($recipients as $address => $name) { - if ($this->_isWhitelisted($address)) { + if ($this->isWhitelisted($address)) { $filtered[$address] = $name; } } @@ -159,17 +151,15 @@ private function _filterNameAddresses(array $recipients) /** * Matches address against whitelist of regular expressions. * - * @param $recipient - * * @return bool */ - protected function _isWhitelisted($recipient) + protected function isWhitelisted($recipient) { - if (in_array($recipient, (array) $this->_recipient)) { + if (in_array($recipient, (array) $this->recipient)) { return true; } - foreach ($this->_whitelist as $pattern) { + foreach ($this->whitelist as $pattern) { if (preg_match($pattern, $recipient)) { return true; } @@ -180,15 +170,13 @@ protected function _isWhitelisted($recipient) /** * Invoked immediately after the Message is sent. - * - * @param Swift_Events_SendEvent $evt */ public function sendPerformed(Swift_Events_SendEvent $evt) { - $this->_restoreMessage($evt->getMessage()); + $this->restoreMessage($evt->getMessage()); } - private function _restoreMessage(Swift_Mime_Message $message) + private function restoreMessage(Swift_Mime_SimpleMessage $message) { // restore original headers $headers = $message->getHeaders(); diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporter.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporter.php index 0f21b7d..3a2b665 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporter.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporter.php @@ -24,9 +24,9 @@ interface Swift_Plugins_Reporter /** * Notifies this ReportNotifier that $address failed or succeeded. * - * @param Swift_Mime_Message $message - * @param string $address - * @param int $result from {@link RESULT_PASS, RESULT_FAIL} + * @param Swift_Mime_SimpleMessage $message + * @param string $address + * @param int $result from {@link RESULT_PASS, RESULT_FAIL} */ - public function notify(Swift_Mime_Message $message, $address, $result); + public function notify(Swift_Mime_SimpleMessage $message, $address, $result); } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php index a37901f..ae070eb 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php @@ -20,16 +20,14 @@ class Swift_Plugins_ReporterPlugin implements Swift_Events_SendListener * * @var Swift_Plugins_Reporter */ - private $_reporter; + private $reporter; /** * Create a new ReporterPlugin using $reporter. - * - * @param Swift_Plugins_Reporter $reporter */ public function __construct(Swift_Plugins_Reporter $reporter) { - $this->_reporter = $reporter; + $this->reporter = $reporter; } /** @@ -41,21 +39,19 @@ public function beforeSendPerformed(Swift_Events_SendEvent $evt) /** * Invoked immediately after the Message is sent. - * - * @param Swift_Events_SendEvent $evt */ public function sendPerformed(Swift_Events_SendEvent $evt) { $message = $evt->getMessage(); $failures = array_flip($evt->getFailedRecipients()); foreach ((array) $message->getTo() as $address => $null) { - $this->_reporter->notify($message, $address, array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS); + $this->reporter->notify($message, $address, (array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); } foreach ((array) $message->getCc() as $address => $null) { - $this->_reporter->notify($message, $address, array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS); + $this->reporter->notify($message, $address, (array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); } foreach ((array) $message->getBcc() as $address => $null) { - $this->_reporter->notify($message, $address, array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS); + $this->reporter->notify($message, $address, (array_key_exists($address, $failures) ? Swift_Plugins_Reporter::RESULT_FAIL : Swift_Plugins_Reporter::RESULT_PASS)); } } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php index cad9d16..249cffb 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php @@ -20,22 +20,21 @@ class Swift_Plugins_Reporters_HitReporter implements Swift_Plugins_Reporter * * @var array */ - private $_failures = array(); + private $failures = []; - private $_failures_cache = array(); + private $failures_cache = []; /** * Notifies this ReportNotifier that $address failed or succeeded. * - * @param Swift_Mime_Message $message - * @param string $address - * @param int $result from {@link RESULT_PASS, RESULT_FAIL} + * @param string $address + * @param int $result from {@link RESULT_PASS, RESULT_FAIL} */ - public function notify(Swift_Mime_Message $message, $address, $result) + public function notify(Swift_Mime_SimpleMessage $message, $address, $result) { - if (self::RESULT_FAIL == $result && !isset($this->_failures_cache[$address])) { - $this->_failures[] = $address; - $this->_failures_cache[$address] = true; + if (self::RESULT_FAIL == $result && !isset($this->failures_cache[$address])) { + $this->failures[] = $address; + $this->failures_cache[$address] = true; } } @@ -46,7 +45,7 @@ public function notify(Swift_Mime_Message $message, $address, $result) */ public function getFailedRecipients() { - return $this->_failures; + return $this->failures; } /** @@ -54,6 +53,6 @@ public function getFailedRecipients() */ public function clear() { - $this->_failures = $this->_failures_cache = array(); + $this->failures = $this->failures_cache = []; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php index c625935..1cfc3f9 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php @@ -18,11 +18,10 @@ class Swift_Plugins_Reporters_HtmlReporter implements Swift_Plugins_Reporter /** * Notifies this ReportNotifier that $address failed or succeeded. * - * @param Swift_Mime_Message $message - * @param string $address - * @param int $result from {@see RESULT_PASS, RESULT_FAIL} + * @param string $address + * @param int $result from {@see RESULT_PASS, RESULT_FAIL} */ - public function notify(Swift_Mime_Message $message, $address, $result) + public function notify(Swift_Mime_SimpleMessage $message, $address, $result) { if (self::RESULT_PASS == $result) { echo '
'.PHP_EOL; diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php index 2f4b9a7..83d3044 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php @@ -29,28 +29,28 @@ class Swift_Plugins_ThrottlerPlugin extends Swift_Plugins_BandwidthMonitorPlugin * * @var Swift_Plugins_Sleeper */ - private $_sleeper; + private $sleeper; /** * The Timer instance which provides the timestamp. * * @var Swift_Plugins_Timer */ - private $_timer; + private $timer; /** * The time at which the first email was sent. * * @var int */ - private $_start; + private $start; /** * The rate at which messages should be sent. * * @var int */ - private $_rate; + private $rate; /** * The mode for throttling. @@ -59,53 +59,51 @@ class Swift_Plugins_ThrottlerPlugin extends Swift_Plugins_BandwidthMonitorPlugin * * @var int */ - private $_mode; + private $mode; /** * An internal counter of the number of messages sent. * * @var int */ - private $_messages = 0; + private $messages = 0; /** * Create a new ThrottlerPlugin. * * @param int $rate - * @param int $mode, defaults to {@link BYTES_PER_MINUTE} + * @param int $mode defaults to {@link BYTES_PER_MINUTE} * @param Swift_Plugins_Sleeper $sleeper (only needed in testing) * @param Swift_Plugins_Timer $timer (only needed in testing) */ public function __construct($rate, $mode = self::BYTES_PER_MINUTE, Swift_Plugins_Sleeper $sleeper = null, Swift_Plugins_Timer $timer = null) { - $this->_rate = $rate; - $this->_mode = $mode; - $this->_sleeper = $sleeper; - $this->_timer = $timer; + $this->rate = $rate; + $this->mode = $mode; + $this->sleeper = $sleeper; + $this->timer = $timer; } /** * Invoked immediately before the Message is sent. - * - * @param Swift_Events_SendEvent $evt */ public function beforeSendPerformed(Swift_Events_SendEvent $evt) { $time = $this->getTimestamp(); - if (!isset($this->_start)) { - $this->_start = $time; + if (!isset($this->start)) { + $this->start = $time; } - $duration = $time - $this->_start; + $duration = $time - $this->start; - switch ($this->_mode) { + switch ($this->mode) { case self::BYTES_PER_MINUTE: - $sleep = $this->_throttleBytesPerMinute($duration); + $sleep = $this->throttleBytesPerMinute($duration); break; case self::MESSAGES_PER_SECOND: - $sleep = $this->_throttleMessagesPerSecond($duration); + $sleep = $this->throttleMessagesPerSecond($duration); break; case self::MESSAGES_PER_MINUTE: - $sleep = $this->_throttleMessagesPerMinute($duration); + $sleep = $this->throttleMessagesPerMinute($duration); break; default: $sleep = 0; @@ -119,13 +117,11 @@ public function beforeSendPerformed(Swift_Events_SendEvent $evt) /** * Invoked when a Message is sent. - * - * @param Swift_Events_SendEvent $evt */ public function sendPerformed(Swift_Events_SendEvent $evt) { parent::sendPerformed($evt); - ++$this->_messages; + ++$this->messages; } /** @@ -135,8 +131,8 @@ public function sendPerformed(Swift_Events_SendEvent $evt) */ public function sleep($seconds) { - if (isset($this->_sleeper)) { - $this->_sleeper->sleep($seconds); + if (isset($this->sleeper)) { + $this->sleeper->sleep($seconds); } else { sleep($seconds); } @@ -149,8 +145,8 @@ public function sleep($seconds) */ public function getTimestamp() { - if (isset($this->_timer)) { - return $this->_timer->getTimestamp(); + if (isset($this->timer)) { + return $this->timer->getTimestamp(); } return time(); @@ -163,9 +159,9 @@ public function getTimestamp() * * @return int */ - private function _throttleBytesPerMinute($timePassed) + private function throttleBytesPerMinute($timePassed) { - $expectedDuration = $this->getBytesOut() / ($this->_rate / 60); + $expectedDuration = $this->getBytesOut() / ($this->rate / 60); return (int) ceil($expectedDuration - $timePassed); } @@ -177,9 +173,9 @@ private function _throttleBytesPerMinute($timePassed) * * @return int */ - private function _throttleMessagesPerSecond($timePassed) + private function throttleMessagesPerSecond($timePassed) { - $expectedDuration = $this->_messages / ($this->_rate); + $expectedDuration = $this->messages / $this->rate; return (int) ceil($expectedDuration - $timePassed); } @@ -191,9 +187,9 @@ private function _throttleMessagesPerSecond($timePassed) * * @return int */ - private function _throttleMessagesPerMinute($timePassed) + private function throttleMessagesPerMinute($timePassed) { - $expectedDuration = $this->_messages / ($this->_rate / 60); + $expectedDuration = $this->messages / ($this->rate / 60); return (int) ceil($expectedDuration - $timePassed); } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Preferences.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Preferences.php index 83cbddc..16103e1 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Preferences.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Preferences.php @@ -16,7 +16,7 @@ class Swift_Preferences { /** Singleton instance */ - private static $_instance = null; + private static $instance = null; /** Constructor not to be used */ private function __construct() @@ -30,11 +30,11 @@ private function __construct() */ public static function getInstance() { - if (!isset(self::$_instance)) { - self::$_instance = new self(); + if (!isset(self::$instance)) { + self::$instance = new self(); } - return self::$_instance; + return self::$instance; } /** @@ -92,7 +92,7 @@ public function setQPDotEscape($dotEscape) Swift_DependencyContainer::getInstance() ->register('mime.qpcontentencoder') ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoder') - ->withDependencies(array('mime.charstream', 'mime.bytecanonicalizer')) + ->withDependencies(['mime.charstream', 'mime.bytecanonicalizer']) ->addConstructorValue($dotEscape); return $this; diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SendmailTransport.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SendmailTransport.php index 47ae7a5..2aa7e32 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SendmailTransport.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SendmailTransport.php @@ -23,23 +23,11 @@ class Swift_SendmailTransport extends Swift_Transport_SendmailTransport public function __construct($command = '/usr/sbin/sendmail -bs') { call_user_func_array( - array($this, 'Swift_Transport_SendmailTransport::__construct'), + [$this, 'Swift_Transport_SendmailTransport::__construct'], Swift_DependencyContainer::getInstance() ->createDependenciesFor('transport.sendmail') ); $this->setCommand($command); } - - /** - * Create a new SendmailTransport instance. - * - * @param string $command - * - * @return self - */ - public static function newInstance($command = '/usr/sbin/sendmail -bs') - { - return new self($command); - } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SignedMessage.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SignedMessage.php deleted file mode 100644 index 2e7a872..0000000 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SignedMessage.php +++ /dev/null @@ -1,23 +0,0 @@ - - * - * @deprecated - */ -class Swift_SignedMessage extends Swift_Message -{ -} diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signer.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signer.php index 2d8176d..26c5e28 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signer.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signer.php @@ -11,7 +11,6 @@ /** * Base Class of Signer Infrastructure. * - * * @author Xavier De Cock */ interface Swift_Signer diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php index 454e84b..7f1bf4a 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DKIMSigner.php @@ -11,7 +11,7 @@ /** * DKIM Signer used to apply DKIM Signature to a message. * - * @author Xavier De Cock + * @author Xavier De Cock */ class Swift_Signers_DKIMSigner implements Swift_Signers_HeaderSigner { @@ -20,21 +20,23 @@ class Swift_Signers_DKIMSigner implements Swift_Signers_HeaderSigner * * @var string */ - protected $_privateKey; + protected $privateKey; /** * DomainName. * * @var string */ - protected $_domainName; + protected $domainName; /** * Selector. * * @var string */ - protected $_selector; + protected $selector; + + private $passphrase = ''; /** * Hash algorithm used. @@ -43,63 +45,63 @@ class Swift_Signers_DKIMSigner implements Swift_Signers_HeaderSigner * * @var string */ - protected $_hashAlgorithm = 'rsa-sha256'; + protected $hashAlgorithm = 'rsa-sha256'; /** * Body canon method. * * @var string */ - protected $_bodyCanon = 'simple'; + protected $bodyCanon = 'simple'; /** * Header canon method. * * @var string */ - protected $_headerCanon = 'simple'; + protected $headerCanon = 'simple'; /** * Headers not being signed. * * @var array */ - protected $_ignoredHeaders = array('return-path' => true); + protected $ignoredHeaders = ['return-path' => true]; /** * Signer identity. * * @var string */ - protected $_signerIdentity; + protected $signerIdentity; /** * BodyLength. * * @var int */ - protected $_bodyLen = 0; + protected $bodyLen = 0; /** * Maximum signedLen. * * @var int */ - protected $_maxLen = PHP_INT_MAX; + protected $maxLen = PHP_INT_MAX; /** * Embbed bodyLen in signature. * * @var bool */ - protected $_showLen = false; + protected $showLen = false; /** * When the signature has been applied (true means time()), false means not embedded. * * @var mixed */ - protected $_signatureTimestamp = true; + protected $signatureTimestamp = true; /** * When will the signature expires false means not embedded, if sigTimestamp is auto @@ -107,14 +109,14 @@ class Swift_Signers_DKIMSigner implements Swift_Signers_HeaderSigner * * @var int */ - protected $_signatureExpiration = false; + protected $signatureExpiration = false; /** * Must we embed signed headers? * * @var bool */ - protected $_debugHeaders = false; + protected $debugHeaders = false; // work variables /** @@ -122,46 +124,46 @@ class Swift_Signers_DKIMSigner implements Swift_Signers_HeaderSigner * * @var array */ - protected $_signedHeaders = array(); + protected $signedHeaders = []; /** * If debugHeaders is set store debugData here. * - * @var string + * @var string[] */ - private $_debugHeadersData = ''; + private $debugHeadersData = []; /** * Stores the bodyHash. * * @var string */ - private $_bodyHash = ''; + private $bodyHash = ''; /** * Stores the signature header. * * @var Swift_Mime_Headers_ParameterizedHeader */ - protected $_dkimHeader; + protected $dkimHeader; - private $_bodyHashHandler; + private $bodyHashHandler; - private $_headerHash; + private $headerHash; - private $_headerCanonData = ''; + private $headerCanonData = ''; - private $_bodyCanonEmptyCounter = 0; + private $bodyCanonEmptyCounter = 0; - private $_bodyCanonIgnoreStart = 2; + private $bodyCanonIgnoreStart = 2; - private $_bodyCanonSpace = false; + private $bodyCanonSpace = false; - private $_bodyCanonLastChar = null; + private $bodyCanonLastChar = null; - private $_bodyCanonLine = ''; + private $bodyCanonLine = ''; - private $_bound = array(); + private $bound = []; /** * Constructor. @@ -169,32 +171,15 @@ class Swift_Signers_DKIMSigner implements Swift_Signers_HeaderSigner * @param string $privateKey * @param string $domainName * @param string $selector + * @param string $passphrase */ - public function __construct($privateKey, $domainName, $selector) + public function __construct($privateKey, $domainName, $selector, $passphrase = '') { - $this->_privateKey = $privateKey; - $this->_domainName = $domainName; - $this->_signerIdentity = '@'.$domainName; - $this->_selector = $selector; - - // keep fallback hash algorithm sha1 if php version is lower than 5.4.8 - if (PHP_VERSION_ID < 50408) { - $this->_hashAlgorithm = 'rsa-sha1'; - } - } - - /** - * Instanciate DKIMSigner. - * - * @param string $privateKey - * @param string $domainName - * @param string $selector - * - * @return self - */ - public static function newInstance($privateKey, $domainName, $selector) - { - return new static($privateKey, $domainName, $selector); + $this->privateKey = $privateKey; + $this->domainName = $domainName; + $this->signerIdentity = '@'.$domainName; + $this->selector = $selector; + $this->passphrase = $passphrase; } /** @@ -204,14 +189,14 @@ public static function newInstance($privateKey, $domainName, $selector) */ public function reset() { - $this->_headerHash = null; - $this->_signedHeaders = array(); - $this->_bodyHash = null; - $this->_bodyHashHandler = null; - $this->_bodyCanonIgnoreStart = 2; - $this->_bodyCanonEmptyCounter = 0; - $this->_bodyCanonLastChar = null; - $this->_bodyCanonSpace = false; + $this->headerHash = null; + $this->signedHeaders = []; + $this->bodyHash = null; + $this->bodyHashHandler = null; + $this->bodyCanonIgnoreStart = 2; + $this->bodyCanonEmptyCounter = 0; + $this->bodyCanonLastChar = null; + $this->bodyCanonSpace = false; } /** @@ -226,15 +211,15 @@ public function reset() * * @param string $bytes * - * @throws Swift_IoException - * * @return int + * + * @throws Swift_IoException */ // TODO fix return public function write($bytes) { - $this->_canonicalizeBody($bytes); - foreach ($this->_bound as $is) { + $this->canonicalizeBody($bytes); + foreach ($this->bound as $is) { $is->write($bytes); } } @@ -251,33 +236,31 @@ public function commit() /** * Attach $is to this stream. + * * The stream acts as an observer, receiving all data that is written. * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - * - * @param Swift_InputByteStream $is */ public function bind(Swift_InputByteStream $is) { // Don't have to mirror anything - $this->_bound[] = $is; + $this->bound[] = $is; return; } /** * Remove an already bound stream. + * * If $is is not bound, no errors will be raised. * If the stream currently has any buffered data it will be written to $is * before unbinding occurs. - * - * @param Swift_InputByteStream $is */ public function unbind(Swift_InputByteStream $is) { // Don't have to mirror anything - foreach ($this->_bound as $k => $stream) { + foreach ($this->bound as $k => $stream) { if ($stream === $is) { - unset($this->_bound[$k]); + unset($this->bound[$k]); return; } @@ -308,10 +291,10 @@ public function setHashAlgorithm($hash) { switch ($hash) { case 'rsa-sha1': - $this->_hashAlgorithm = 'rsa-sha1'; + $this->hashAlgorithm = 'rsa-sha1'; break; case 'rsa-sha256': - $this->_hashAlgorithm = 'rsa-sha256'; + $this->hashAlgorithm = 'rsa-sha256'; if (!defined('OPENSSL_ALGO_SHA256')) { throw new Swift_SwiftException('Unable to set sha256 as it is not supported by OpenSSL.'); } @@ -332,10 +315,10 @@ public function setHashAlgorithm($hash) */ public function setBodyCanon($canon) { - if ($canon == 'relaxed') { - $this->_bodyCanon = 'relaxed'; + if ('relaxed' == $canon) { + $this->bodyCanon = 'relaxed'; } else { - $this->_bodyCanon = 'simple'; + $this->bodyCanon = 'simple'; } return $this; @@ -350,10 +333,10 @@ public function setBodyCanon($canon) */ public function setHeaderCanon($canon) { - if ($canon == 'relaxed') { - $this->_headerCanon = 'relaxed'; + if ('relaxed' == $canon) { + $this->headerCanon = 'relaxed'; } else { - $this->_headerCanon = 'simple'; + $this->headerCanon = 'simple'; } return $this; @@ -368,7 +351,7 @@ public function setHeaderCanon($canon) */ public function setSignerIdentity($identity) { - $this->_signerIdentity = $identity; + $this->signerIdentity = $identity; return $this; } @@ -382,15 +365,15 @@ public function setSignerIdentity($identity) */ public function setBodySignedLen($len) { - if ($len === true) { - $this->_showLen = true; - $this->_maxLen = PHP_INT_MAX; - } elseif ($len === false) { - $this->_showLen = false; - $this->_maxLen = PHP_INT_MAX; + if (true === $len) { + $this->showLen = true; + $this->maxLen = PHP_INT_MAX; + } elseif (false === $len) { + $this->showLen = false; + $this->maxLen = PHP_INT_MAX; } else { - $this->_showLen = true; - $this->_maxLen = (int) $len; + $this->showLen = true; + $this->maxLen = (int) $len; } return $this; @@ -405,7 +388,7 @@ public function setBodySignedLen($len) */ public function setSignatureTimestamp($time) { - $this->_signatureTimestamp = $time; + $this->signatureTimestamp = $time; return $this; } @@ -419,7 +402,7 @@ public function setSignatureTimestamp($time) */ public function setSignatureExpiration($time) { - $this->_signatureExpiration = $time; + $this->signatureExpiration = $time; return $this; } @@ -433,7 +416,7 @@ public function setSignatureExpiration($time) */ public function setDebugHeaders($debug) { - $this->_debugHeaders = (bool) $debug; + $this->debugHeaders = (bool) $debug; return $this; } @@ -444,15 +427,15 @@ public function setDebugHeaders($debug) public function startBody() { // Init - switch ($this->_hashAlgorithm) { + switch ($this->hashAlgorithm) { case 'rsa-sha256': - $this->_bodyHashHandler = hash_init('sha256'); + $this->bodyHashHandler = hash_init('sha256'); break; case 'rsa-sha1': - $this->_bodyHashHandler = hash_init('sha1'); + $this->bodyHashHandler = hash_init('sha1'); break; } - $this->_bodyCanonLine = ''; + $this->bodyCanonLine = ''; } /** @@ -460,7 +443,7 @@ public function startBody() */ public function endBody() { - $this->_endOfBody(); + $this->endOfBody(); } /** @@ -470,10 +453,10 @@ public function endBody() */ public function getAlteredHeaders() { - if ($this->_debugHeaders) { - return array('DKIM-Signature', 'X-DebugHash'); + if ($this->debugHeaders) { + return ['DKIM-Signature', 'X-DebugHash']; } else { - return array('DKIM-Signature'); + return ['DKIM-Signature']; } } @@ -486,7 +469,7 @@ public function getAlteredHeaders() */ public function ignoreHeader($header_name) { - $this->_ignoredHeaders[strtolower($header_name)] = true; + $this->ignoredHeaders[strtolower($header_name)] = true; return $this; } @@ -494,24 +477,22 @@ public function ignoreHeader($header_name) /** * Set the headers to sign. * - * @param Swift_Mime_HeaderSet $headers - * * @return Swift_Signers_DKIMSigner */ - public function setHeaders(Swift_Mime_HeaderSet $headers) + public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) { - $this->_headerCanonData = ''; + $this->headerCanonData = ''; // Loop through Headers $listHeaders = $headers->listAll(); foreach ($listHeaders as $hName) { // Check if we need to ignore Header - if (!isset($this->_ignoredHeaders[strtolower($hName)])) { + if (!isset($this->ignoredHeaders[strtolower($hName)])) { if ($headers->has($hName)) { $tmp = $headers->getAll($hName); foreach ($tmp as $header) { - if ($header->getFieldBody() != '') { - $this->_addHeader($header->toString()); - $this->_signedHeaders[] = $header->getFieldName(); + if ('' != $header->getFieldBody()) { + $this->addHeader($header->toString()); + $this->signedHeaders[] = $header->getFieldName(); } } } @@ -524,37 +505,35 @@ public function setHeaders(Swift_Mime_HeaderSet $headers) /** * Add the signature to the given Headers. * - * @param Swift_Mime_HeaderSet $headers - * * @return Swift_Signers_DKIMSigner */ - public function addSignature(Swift_Mime_HeaderSet $headers) + public function addSignature(Swift_Mime_SimpleHeaderSet $headers) { // Prepare the DKIM-Signature - $params = array('v' => '1', 'a' => $this->_hashAlgorithm, 'bh' => base64_encode($this->_bodyHash), 'd' => $this->_domainName, 'h' => implode(': ', $this->_signedHeaders), 'i' => $this->_signerIdentity, 's' => $this->_selector); - if ($this->_bodyCanon != 'simple') { - $params['c'] = $this->_headerCanon.'/'.$this->_bodyCanon; - } elseif ($this->_headerCanon != 'simple') { - $params['c'] = $this->_headerCanon; + $params = ['v' => '1', 'a' => $this->hashAlgorithm, 'bh' => base64_encode($this->bodyHash), 'd' => $this->domainName, 'h' => implode(': ', $this->signedHeaders), 'i' => $this->signerIdentity, 's' => $this->selector]; + if ('simple' != $this->bodyCanon) { + $params['c'] = $this->headerCanon.'/'.$this->bodyCanon; + } elseif ('simple' != $this->headerCanon) { + $params['c'] = $this->headerCanon; } - if ($this->_showLen) { - $params['l'] = $this->_bodyLen; + if ($this->showLen) { + $params['l'] = $this->bodyLen; } - if ($this->_signatureTimestamp === true) { + if (true === $this->signatureTimestamp) { $params['t'] = time(); - if ($this->_signatureExpiration !== false) { - $params['x'] = $params['t'] + $this->_signatureExpiration; + if (false !== $this->signatureExpiration) { + $params['x'] = $params['t'] + $this->signatureExpiration; } } else { - if ($this->_signatureTimestamp !== false) { - $params['t'] = $this->_signatureTimestamp; + if (false !== $this->signatureTimestamp) { + $params['t'] = $this->signatureTimestamp; } - if ($this->_signatureExpiration !== false) { - $params['x'] = $this->_signatureExpiration; + if (false !== $this->signatureExpiration) { + $params['x'] = $this->signatureExpiration; } } - if ($this->_debugHeaders) { - $params['z'] = implode('|', $this->_debugHeadersData); + if ($this->debugHeaders) { + $params['z'] = implode('|', $this->debugHeadersData); } $string = ''; foreach ($params as $k => $v) { @@ -564,22 +543,21 @@ public function addSignature(Swift_Mime_HeaderSet $headers) $headers->addTextHeader('DKIM-Signature', $string); // Add the last DKIM-Signature $tmp = $headers->getAll('DKIM-Signature'); - $this->_dkimHeader = end($tmp); - $this->_addHeader(trim($this->_dkimHeader->toString())."\r\n b=", true); - $this->_endOfHeaders(); - if ($this->_debugHeaders) { - $headers->addTextHeader('X-DebugHash', base64_encode($this->_headerHash)); + $this->dkimHeader = end($tmp); + $this->addHeader(trim($this->dkimHeader->toString())."\r\n b=", true); + if ($this->debugHeaders) { + $headers->addTextHeader('X-DebugHash', base64_encode($this->headerHash)); } - $this->_dkimHeader->setValue($string.' b='.trim(chunk_split(base64_encode($this->_getEncryptedHash()), 73, ' '))); + $this->dkimHeader->setValue($string.' b='.trim(chunk_split(base64_encode($this->getEncryptedHash()), 73, ' '))); return $this; } /* Private helpers */ - protected function _addHeader($header, $is_sig = false) + protected function addHeader($header, $is_sig = false) { - switch ($this->_headerCanon) { + switch ($this->headerCanon) { case 'relaxed': // Prepare Header and cascade $exploded = explode(':', $header, 2); @@ -587,44 +565,36 @@ protected function _addHeader($header, $is_sig = false) $value = str_replace("\r\n", '', $exploded[1]); $value = preg_replace("/[ \t][ \t]+/", ' ', $value); $header = $name.':'.trim($value).($is_sig ? '' : "\r\n"); + // no break case 'simple': // Nothing to do } - $this->_addToHeaderHash($header); + $this->addToHeaderHash($header); } - /** - * @deprecated This method is currently useless in this class but it must be - * kept for BC reasons due to its "protected" scope. This method - * might be overridden by custom client code. - */ - protected function _endOfHeaders() - { - } - - protected function _canonicalizeBody($string) + protected function canonicalizeBody($string) { $len = strlen($string); $canon = ''; - $method = ($this->_bodyCanon == 'relaxed'); + $method = ('relaxed' == $this->bodyCanon); for ($i = 0; $i < $len; ++$i) { - if ($this->_bodyCanonIgnoreStart > 0) { - --$this->_bodyCanonIgnoreStart; + if ($this->bodyCanonIgnoreStart > 0) { + --$this->bodyCanonIgnoreStart; continue; } switch ($string[$i]) { case "\r": - $this->_bodyCanonLastChar = "\r"; + $this->bodyCanonLastChar = "\r"; break; case "\n": - if ($this->_bodyCanonLastChar == "\r") { + if ("\r" == $this->bodyCanonLastChar) { if ($method) { - $this->_bodyCanonSpace = false; + $this->bodyCanonSpace = false; } - if ($this->_bodyCanonLine == '') { - ++$this->_bodyCanonEmptyCounter; + if ('' == $this->bodyCanonLine) { + ++$this->bodyCanonEmptyCounter; } else { - $this->_bodyCanonLine = ''; + $this->bodyCanonLine = ''; $canon .= "\r\n"; } } else { @@ -635,52 +605,53 @@ protected function _canonicalizeBody($string) case ' ': case "\t": if ($method) { - $this->_bodyCanonSpace = true; + $this->bodyCanonSpace = true; break; } + // no break default: - if ($this->_bodyCanonEmptyCounter > 0) { - $canon .= str_repeat("\r\n", $this->_bodyCanonEmptyCounter); - $this->_bodyCanonEmptyCounter = 0; + if ($this->bodyCanonEmptyCounter > 0) { + $canon .= str_repeat("\r\n", $this->bodyCanonEmptyCounter); + $this->bodyCanonEmptyCounter = 0; } - if ($this->_bodyCanonSpace) { - $this->_bodyCanonLine .= ' '; + if ($this->bodyCanonSpace) { + $this->bodyCanonLine .= ' '; $canon .= ' '; - $this->_bodyCanonSpace = false; + $this->bodyCanonSpace = false; } - $this->_bodyCanonLine .= $string[$i]; + $this->bodyCanonLine .= $string[$i]; $canon .= $string[$i]; } } - $this->_addToBodyHash($canon); + $this->addToBodyHash($canon); } - protected function _endOfBody() + protected function endOfBody() { // Add trailing Line return if last line is non empty - if (strlen($this->_bodyCanonLine) > 0) { - $this->_addToBodyHash("\r\n"); + if (strlen($this->bodyCanonLine) > 0) { + $this->addToBodyHash("\r\n"); } - $this->_bodyHash = hash_final($this->_bodyHashHandler, true); + $this->bodyHash = hash_final($this->bodyHashHandler, true); } - private function _addToBodyHash($string) + private function addToBodyHash($string) { $len = strlen($string); - if ($len > ($new_len = ($this->_maxLen - $this->_bodyLen))) { + if ($len > ($new_len = ($this->maxLen - $this->bodyLen))) { $string = substr($string, 0, $new_len); $len = $new_len; } - hash_update($this->_bodyHashHandler, $string); - $this->_bodyLen += $len; + hash_update($this->bodyHashHandler, $string); + $this->bodyLen += $len; } - private function _addToHeaderHash($header) + private function addToHeaderHash($header) { - if ($this->_debugHeaders) { - $this->_debugHeadersData[] = trim($header); + if ($this->debugHeaders) { + $this->debugHeadersData[] = trim($header); } - $this->_headerCanonData .= $header; + $this->headerCanonData .= $header; } /** @@ -688,11 +659,10 @@ private function _addToHeaderHash($header) * * @return string */ - private function _getEncryptedHash() + private function getEncryptedHash() { $signature = ''; - - switch ($this->_hashAlgorithm) { + switch ($this->hashAlgorithm) { case 'rsa-sha1': $algorithm = OPENSSL_ALGO_SHA1; break; @@ -700,11 +670,11 @@ private function _getEncryptedHash() $algorithm = OPENSSL_ALGO_SHA256; break; } - $pkeyId = openssl_get_privatekey($this->_privateKey); + $pkeyId = openssl_get_privatekey($this->privateKey, $this->passphrase); if (!$pkeyId) { throw new Swift_SwiftException('Unable to load DKIM Private Key ['.openssl_error_string().']'); } - if (openssl_sign($this->_headerCanonData, $signature, $pkeyId, $algorithm)) { + if (openssl_sign($this->headerCanonData, $signature, $pkeyId, $algorithm)) { return $signature; } throw new Swift_SwiftException('Unable to sign DKIM Hash ['.openssl_error_string().']'); diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php index 0365363..a24d203 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/DomainKeySigner.php @@ -11,7 +11,7 @@ /** * DomainKey Signer used to apply DomainKeys Signature to a message. * - * @author Xavier De Cock + * @author Xavier De Cock */ class Swift_Signers_DomainKeySigner implements Swift_Signers_HeaderSigner { @@ -20,56 +20,56 @@ class Swift_Signers_DomainKeySigner implements Swift_Signers_HeaderSigner * * @var string */ - protected $_privateKey; + protected $privateKey; /** * DomainName. * * @var string */ - protected $_domainName; + protected $domainName; /** * Selector. * * @var string */ - protected $_selector; + protected $selector; /** * Hash algorithm used. * * @var string */ - protected $_hashAlgorithm = 'rsa-sha1'; + protected $hashAlgorithm = 'rsa-sha1'; /** * Canonisation method. * * @var string */ - protected $_canon = 'simple'; + protected $canon = 'simple'; /** * Headers not being signed. * * @var array */ - protected $_ignoredHeaders = array(); + protected $ignoredHeaders = []; /** * Signer identity. * * @var string */ - protected $_signerIdentity; + protected $signerIdentity; /** * Must we embed signed headers? * * @var bool */ - protected $_debugHeaders = false; + protected $debugHeaders = false; // work variables /** @@ -77,37 +77,35 @@ class Swift_Signers_DomainKeySigner implements Swift_Signers_HeaderSigner * * @var array */ - private $_signedHeaders = array(); + private $signedHeaders = []; /** * Stores the signature header. * * @var Swift_Mime_Headers_ParameterizedHeader */ - protected $_domainKeyHeader; + protected $domainKeyHeader; /** * Hash Handler. * * @var resource|null */ - private $_hashHandler; + private $hashHandler; - private $_hash; + private $canonData = ''; - private $_canonData = ''; + private $bodyCanonEmptyCounter = 0; - private $_bodyCanonEmptyCounter = 0; + private $bodyCanonIgnoreStart = 2; - private $_bodyCanonIgnoreStart = 2; + private $bodyCanonSpace = false; - private $_bodyCanonSpace = false; + private $bodyCanonLastChar = null; - private $_bodyCanonLastChar = null; + private $bodyCanonLine = ''; - private $_bodyCanonLine = ''; - - private $_bound = array(); + private $bound = []; /** * Constructor. @@ -118,24 +116,10 @@ class Swift_Signers_DomainKeySigner implements Swift_Signers_HeaderSigner */ public function __construct($privateKey, $domainName, $selector) { - $this->_privateKey = $privateKey; - $this->_domainName = $domainName; - $this->_signerIdentity = '@'.$domainName; - $this->_selector = $selector; - } - - /** - * Instanciate DomainKeySigner. - * - * @param string $privateKey - * @param string $domainName - * @param string $selector - * - * @return self - */ - public static function newInstance($privateKey, $domainName, $selector) - { - return new static($privateKey, $domainName, $selector); + $this->privateKey = $privateKey; + $this->domainName = $domainName; + $this->signerIdentity = '@'.$domainName; + $this->selector = $selector; } /** @@ -145,12 +129,11 @@ public static function newInstance($privateKey, $domainName, $selector) */ public function reset() { - $this->_hash = null; - $this->_hashHandler = null; - $this->_bodyCanonIgnoreStart = 2; - $this->_bodyCanonEmptyCounter = 0; - $this->_bodyCanonLastChar = null; - $this->_bodyCanonSpace = false; + $this->hashHandler = null; + $this->bodyCanonIgnoreStart = 2; + $this->bodyCanonEmptyCounter = 0; + $this->bodyCanonLastChar = null; + $this->bodyCanonSpace = false; return $this; } @@ -167,14 +150,16 @@ public function reset() * * @param string $bytes * + * @return int + * * @throws Swift_IoException * * @return $this */ public function write($bytes) { - $this->_canonicalizeBody($bytes); - foreach ($this->_bound as $is) { + $this->canonicalizeBody($bytes); + foreach ($this->bound as $is) { $is->write($bytes); } @@ -197,37 +182,35 @@ public function commit() /** * Attach $is to this stream. + * * The stream acts as an observer, receiving all data that is written. * All {@link write()} and {@link flushBuffers()} operations will be mirrored. * - * @param Swift_InputByteStream $is - * * @return $this */ public function bind(Swift_InputByteStream $is) { // Don't have to mirror anything - $this->_bound[] = $is; + $this->bound[] = $is; return $this; } /** * Remove an already bound stream. + * * If $is is not bound, no errors will be raised. * If the stream currently has any buffered data it will be written to $is * before unbinding occurs. * - * @param Swift_InputByteStream $is - * * @return $this */ public function unbind(Swift_InputByteStream $is) { // Don't have to mirror anything - foreach ($this->_bound as $k => $stream) { + foreach ($this->bound as $k => $stream) { if ($stream === $is) { - unset($this->_bound[$k]); + unset($this->bound[$k]); break; } @@ -260,7 +243,7 @@ public function flushBuffers() */ public function setHashAlgorithm($hash) { - $this->_hashAlgorithm = 'rsa-sha1'; + $this->hashAlgorithm = 'rsa-sha1'; return $this; } @@ -274,10 +257,10 @@ public function setHashAlgorithm($hash) */ public function setCanon($canon) { - if ($canon == 'nofws') { - $this->_canon = 'nofws'; + if ('nofws' == $canon) { + $this->canon = 'nofws'; } else { - $this->_canon = 'simple'; + $this->canon = 'simple'; } return $this; @@ -292,7 +275,7 @@ public function setCanon($canon) */ public function setSignerIdentity($identity) { - $this->_signerIdentity = $identity; + $this->signerIdentity = $identity; return $this; } @@ -306,7 +289,7 @@ public function setSignerIdentity($identity) */ public function setDebugHeaders($debug) { - $this->_debugHeaders = (bool) $debug; + $this->debugHeaders = (bool) $debug; return $this; } @@ -323,7 +306,7 @@ public function startBody() */ public function endBody() { - $this->_endOfBody(); + $this->endOfBody(); } /** @@ -333,11 +316,11 @@ public function endBody() */ public function getAlteredHeaders() { - if ($this->_debugHeaders) { - return array('DomainKey-Signature', 'X-DebugHash'); + if ($this->debugHeaders) { + return ['DomainKey-Signature', 'X-DebugHash']; } - return array('DomainKey-Signature'); + return ['DomainKey-Signature']; } /** @@ -349,7 +332,7 @@ public function getAlteredHeaders() */ public function ignoreHeader($header_name) { - $this->_ignoredHeaders[strtolower($header_name)] = true; + $this->ignoredHeaders[strtolower($header_name)] = true; return $this; } @@ -357,31 +340,29 @@ public function ignoreHeader($header_name) /** * Set the headers to sign. * - * @param Swift_Mime_HeaderSet $headers - * * @return $this */ - public function setHeaders(Swift_Mime_HeaderSet $headers) + public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) { - $this->_startHash(); - $this->_canonData = ''; + $this->startHash(); + $this->canonData = ''; // Loop through Headers $listHeaders = $headers->listAll(); foreach ($listHeaders as $hName) { // Check if we need to ignore Header - if (!isset($this->_ignoredHeaders[strtolower($hName)])) { + if (!isset($this->ignoredHeaders[strtolower($hName)])) { if ($headers->has($hName)) { $tmp = $headers->getAll($hName); foreach ($tmp as $header) { - if ($header->getFieldBody() != '') { - $this->_addHeader($header->toString()); - $this->_signedHeaders[] = $header->getFieldName(); + if ('' != $header->getFieldBody()) { + $this->addHeader($header->toString()); + $this->signedHeaders[] = $header->getFieldName(); } } } } } - $this->_endOfHeaders(); + $this->endOfHeaders(); return $this; } @@ -389,14 +370,12 @@ public function setHeaders(Swift_Mime_HeaderSet $headers) /** * Add the signature to the given Headers. * - * @param Swift_Mime_HeaderSet $headers - * * @return $this */ - public function addSignature(Swift_Mime_HeaderSet $headers) + public function addSignature(Swift_Mime_SimpleHeaderSet $headers) { // Prepare the DomainKey-Signature Header - $params = array('a' => $this->_hashAlgorithm, 'b' => chunk_split(base64_encode($this->_getEncryptedHash()), 73, ' '), 'c' => $this->_canon, 'd' => $this->_domainName, 'h' => implode(': ', $this->_signedHeaders), 'q' => 'dns', 's' => $this->_selector); + $params = ['a' => $this->hashAlgorithm, 'b' => chunk_split(base64_encode($this->getEncryptedHash()), 73, ' '), 'c' => $this->canon, 'd' => $this->domainName, 'h' => implode(': ', $this->signedHeaders), 'q' => 'dns', 's' => $this->selector]; $string = ''; foreach ($params as $k => $v) { $string .= $k.'='.$v.'; '; @@ -409,9 +388,9 @@ public function addSignature(Swift_Mime_HeaderSet $headers) /* Private helpers */ - protected function _addHeader($header) + protected function addHeader($header) { - switch ($this->_canon) { + switch ($this->canon) { case 'nofws': // Prepare Header and cascade $exploded = explode(':', $header, 2); @@ -419,40 +398,41 @@ protected function _addHeader($header) $value = str_replace("\r\n", '', $exploded[1]); $value = preg_replace("/[ \t][ \t]+/", ' ', $value); $header = $name.':'.trim($value)."\r\n"; + // no break case 'simple': // Nothing to do } - $this->_addToHash($header); + $this->addToHash($header); } - protected function _endOfHeaders() + protected function endOfHeaders() { - $this->_bodyCanonEmptyCounter = 1; + $this->bodyCanonEmptyCounter = 1; } - protected function _canonicalizeBody($string) + protected function canonicalizeBody($string) { $len = strlen($string); $canon = ''; - $nofws = ($this->_canon == 'nofws'); + $nofws = ('nofws' == $this->canon); for ($i = 0; $i < $len; ++$i) { - if ($this->_bodyCanonIgnoreStart > 0) { - --$this->_bodyCanonIgnoreStart; + if ($this->bodyCanonIgnoreStart > 0) { + --$this->bodyCanonIgnoreStart; continue; } switch ($string[$i]) { case "\r": - $this->_bodyCanonLastChar = "\r"; + $this->bodyCanonLastChar = "\r"; break; case "\n": - if ($this->_bodyCanonLastChar == "\r") { + if ("\r" == $this->bodyCanonLastChar) { if ($nofws) { - $this->_bodyCanonSpace = false; + $this->bodyCanonSpace = false; } - if ($this->_bodyCanonLine == '') { - ++$this->_bodyCanonEmptyCounter; + if ('' == $this->bodyCanonLine) { + ++$this->bodyCanonEmptyCounter; } else { - $this->_bodyCanonLine = ''; + $this->bodyCanonLine = ''; $canon .= "\r\n"; } } else { @@ -464,44 +444,44 @@ protected function _canonicalizeBody($string) case "\t": case "\x09": //HTAB if ($nofws) { - $this->_bodyCanonSpace = true; + $this->bodyCanonSpace = true; break; } + // no break default: - if ($this->_bodyCanonEmptyCounter > 0) { - $canon .= str_repeat("\r\n", $this->_bodyCanonEmptyCounter); - $this->_bodyCanonEmptyCounter = 0; + if ($this->bodyCanonEmptyCounter > 0) { + $canon .= str_repeat("\r\n", $this->bodyCanonEmptyCounter); + $this->bodyCanonEmptyCounter = 0; } - $this->_bodyCanonLine .= $string[$i]; + $this->bodyCanonLine .= $string[$i]; $canon .= $string[$i]; } } - $this->_addToHash($canon); + $this->addToHash($canon); } - protected function _endOfBody() + protected function endOfBody() { - if (strlen($this->_bodyCanonLine) > 0) { - $this->_addToHash("\r\n"); + if (strlen($this->bodyCanonLine) > 0) { + $this->addToHash("\r\n"); } - $this->_hash = hash_final($this->_hashHandler, true); } - private function _addToHash($string) + private function addToHash($string) { - $this->_canonData .= $string; - hash_update($this->_hashHandler, $string); + $this->canonData .= $string; + hash_update($this->hashHandler, $string); } - private function _startHash() + private function startHash() { // Init - switch ($this->_hashAlgorithm) { + switch ($this->hashAlgorithm) { case 'rsa-sha1': - $this->_hashHandler = hash_init('sha1'); + $this->hashHandler = hash_init('sha1'); break; } - $this->_bodyCanonLine = ''; + $this->bodyCanonLine = ''; } /** @@ -509,14 +489,14 @@ private function _startHash() * * @return string */ - private function _getEncryptedHash() + private function getEncryptedHash() { $signature = ''; - $pkeyId = openssl_get_privatekey($this->_privateKey); + $pkeyId = openssl_get_privatekey($this->privateKey); if (!$pkeyId) { throw new Swift_SwiftException('Unable to load DomainKey Private Key ['.openssl_error_string().']'); } - if (openssl_sign($this->_canonData, $signature, $pkeyId, OPENSSL_ALGO_SHA1)) { + if (openssl_sign($this->canonData, $signature, $pkeyId, OPENSSL_ALGO_SHA1)) { return $signature; } throw new Swift_SwiftException('Unable to sign DomainKey Hash ['.openssl_error_string().']'); diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php index ef8832f..6104e34 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/HeaderSigner.php @@ -45,16 +45,16 @@ public function endBody(); * * @return self */ - public function setHeaders(Swift_Mime_HeaderSet $headers); + public function setHeaders(Swift_Mime_SimpleHeaderSet $headers); /** * Add the header(s) to the headerSet. * - * @param Swift_Mime_HeaderSet $headers + * @param Swift_Mime_SimpleHeaderSet $headers * * @return self */ - public function addSignature(Swift_Mime_HeaderSet $headers); + public function addSignature(Swift_Mime_SimpleHeaderSet $headers); /** * Return the list of header a signer might tamper. diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php index 8fdbaa4..7b50c51 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/OpenDKIMSigner.php @@ -12,13 +12,15 @@ * DKIM Signer used to apply DKIM Signature to a message * Takes advantage of pecl extension. * - * @author Xavier De Cock + * @author Xavier De Cock + * + * @deprecated since SwiftMailer 6.1.0; use Swift_Signers_DKIMSigner instead. */ class Swift_Signers_OpenDKIMSigner extends Swift_Signers_DKIMSigner { - private $_peclLoaded = false; + private $peclLoaded = false; - private $_dkimHandler = null; + private $dkimHandler = null; private $dropFirstLF = true; @@ -33,22 +35,17 @@ public function __construct($privateKey, $domainName, $selector) throw new Swift_SwiftException('php-opendkim extension not found'); } - $this->_peclLoaded = true; + $this->peclLoaded = true; parent::__construct($privateKey, $domainName, $selector); } - public static function newInstance($privateKey, $domainName, $selector) - { - return new static($privateKey, $domainName, $selector); - } - - public function addSignature(Swift_Mime_HeaderSet $headers) + public function addSignature(Swift_Mime_SimpleHeaderSet $headers) { $header = new Swift_Mime_Headers_OpenDKIMHeader('DKIM-Signature'); - $headerVal = $this->_dkimHandler->getSignatureHeader(); - if (!$headerVal) { - throw new Swift_SwiftException('OpenDKIM Error: '.$this->_dkimHandler->getError()); + $headerVal = $this->dkimHandler->getSignatureHeader(); + if (false === $headerVal || is_int($headerVal)) { + throw new Swift_SwiftException('OpenDKIM Error: '.$this->dkimHandler->getError()); } $header->setValue($headerVal); $headers->set($header); @@ -56,40 +53,36 @@ public function addSignature(Swift_Mime_HeaderSet $headers) return $this; } - public function setHeaders(Swift_Mime_HeaderSet $headers) + public function setHeaders(Swift_Mime_SimpleHeaderSet $headers) { - $bodyLen = $this->_bodyLen; - if (is_bool($bodyLen)) { - $bodyLen = -1; - } - $hash = $this->_hashAlgorithm == 'rsa-sha1' ? OpenDKIMSign::ALG_RSASHA1 : OpenDKIMSign::ALG_RSASHA256; - $bodyCanon = $this->_bodyCanon == 'simple' ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED; - $headerCanon = $this->_headerCanon == 'simple' ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED; - $this->_dkimHandler = new OpenDKIMSign($this->_privateKey, $this->_selector, $this->_domainName, $headerCanon, $bodyCanon, $hash, $bodyLen); + $hash = 'rsa-sha1' == $this->hashAlgorithm ? OpenDKIMSign::ALG_RSASHA1 : OpenDKIMSign::ALG_RSASHA256; + $bodyCanon = 'simple' == $this->bodyCanon ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED; + $headerCanon = 'simple' == $this->headerCanon ? OpenDKIMSign::CANON_SIMPLE : OpenDKIMSign::CANON_RELAXED; + $this->dkimHandler = new OpenDKIMSign($this->privateKey, $this->selector, $this->domainName, $headerCanon, $bodyCanon, $hash, -1); // Hardcode signature Margin for now - $this->_dkimHandler->setMargin(78); + $this->dkimHandler->setMargin(78); - if (!is_numeric($this->_signatureTimestamp)) { + if (!is_numeric($this->signatureTimestamp)) { OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, time()); } else { - if (!OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, $this->_signatureTimestamp)) { + if (!OpenDKIM::setOption(OpenDKIM::OPTS_FIXEDTIME, $this->signatureTimestamp)) { throw new Swift_SwiftException('Unable to force signature timestamp ['.openssl_error_string().']'); } } - if (isset($this->_signerIdentity)) { - $this->_dkimHandler->setSigner($this->_signerIdentity); + if (isset($this->signerIdentity)) { + $this->dkimHandler->setSigner($this->signerIdentity); } $listHeaders = $headers->listAll(); foreach ($listHeaders as $hName) { // Check if we need to ignore Header - if (!isset($this->_ignoredHeaders[strtolower($hName)])) { + if (!isset($this->ignoredHeaders[strtolower($hName)])) { $tmp = $headers->getAll($hName); if ($headers->has($hName)) { foreach ($tmp as $header) { - if ($header->getFieldBody() != '') { + if ('' != $header->getFieldBody()) { $htosign = $header->toString(); - $this->_dkimHandler->header($htosign); - $this->_signedHeaders[] = $header->getFieldName(); + $this->dkimHandler->header($htosign); + $this->signedHeaders[] = $header->getFieldName(); } } } @@ -101,28 +94,28 @@ public function setHeaders(Swift_Mime_HeaderSet $headers) public function startBody() { - if (!$this->_peclLoaded) { + if (!$this->peclLoaded) { return parent::startBody(); } $this->dropFirstLF = true; - $this->_dkimHandler->eoh(); + $this->dkimHandler->eoh(); return $this; } public function endBody() { - if (!$this->_peclLoaded) { + if (!$this->peclLoaded) { return parent::endBody(); } - $this->_dkimHandler->eom(); + $this->dkimHandler->eom(); return $this; } public function reset() { - $this->_dkimHandler = null; + $this->dkimHandler = null; parent::reset(); return $this; @@ -137,7 +130,7 @@ public function reset() */ public function setSignatureTimestamp($time) { - $this->_signatureTimestamp = $time; + $this->signatureTimestamp = $time; return $this; } @@ -151,7 +144,7 @@ public function setSignatureTimestamp($time) */ public function setSignatureExpiration($time) { - $this->_signatureExpiration = $time; + $this->signatureExpiration = $time; return $this; } @@ -165,26 +158,26 @@ public function setSignatureExpiration($time) */ public function setDebugHeaders($debug) { - $this->_debugHeaders = (bool) $debug; + $this->debugHeaders = (bool) $debug; return $this; } // Protected - protected function _canonicalizeBody($string) + protected function canonicalizeBody($string) { - if (!$this->_peclLoaded) { - return parent::_canonicalizeBody($string); + if (!$this->peclLoaded) { + return parent::canonicalizeBody($string); } - if (false && $this->dropFirstLF === true) { - if ($string[0] == "\r" && $string[1] == "\n") { + if (true === $this->dropFirstLF) { + if ("\r" == $string[0] && "\n" == $string[1]) { $string = substr($string, 2); } } $this->dropFirstLF = false; if (strlen($string)) { - $this->_dkimHandler->body($string); + $this->dkimHandler->body($string); } } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php index d13c02e..84c53ed 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Signers/SMimeSigner.php @@ -11,9 +11,9 @@ /** * MIME Message Signer used to apply S/MIME Signature/Encryption to a message. * - * * @author Romain-Geissler * @author Sebastiaan Stok + * @author Jan Flora */ class Swift_Signers_SMimeSigner implements Swift_Signers_BodySigner { @@ -27,6 +27,7 @@ class Swift_Signers_SMimeSigner implements Swift_Signers_BodySigner protected $encryptOptions; protected $encryptCipher; protected $extraCerts = null; + protected $wrapFullMessage = false; /** * @var Swift_StreamFilters_StringReplacementFilterFactory @@ -34,7 +35,7 @@ class Swift_Signers_SMimeSigner implements Swift_Signers_BodySigner protected $replacementFactory; /** - * @var Swift_Mime_HeaderFactory + * @var Swift_Mime_SimpleHeaderFactory */ protected $headerFactory; @@ -59,32 +60,13 @@ public function __construct($signCertificate = null, $signPrivateKey = null, $en ->lookup('transport.replacementfactory'); $this->signOptions = PKCS7_DETACHED; - - // Supported since php5.4 - if (defined('OPENSSL_CIPHER_AES_128_CBC')) { - $this->encryptCipher = OPENSSL_CIPHER_AES_128_CBC; - } else { - $this->encryptCipher = OPENSSL_CIPHER_RC2_128; - } - } - - /** - * Returns an new Swift_Signers_SMimeSigner instance. - * - * @param string $certificate - * @param string $privateKey - * - * @return self - */ - public static function newInstance($certificate = null, $privateKey = null) - { - return new self($certificate, $privateKey); + $this->encryptCipher = OPENSSL_CIPHER_AES_128_CBC; } /** * Set the certificate location to use for signing. * - * @see http://www.php.net/manual/en/openssl.pkcs7.flags.php + * @see https://secure.php.net/manual/en/openssl.pkcs7.flags.php * * @param string $certificate * @param string|array $privateKey If the key needs an passphrase use array('file-location', 'passphrase') instead @@ -107,9 +89,7 @@ public function setSignCertificate($certificate, $privateKey = null, $signOption } $this->signOptions = $signOptions; - if (null !== $extraCerts) { - $this->extraCerts = str_replace('\\', '/', realpath($extraCerts)); - } + $this->extraCerts = $extraCerts ? realpath($extraCerts) : null; return $this; } @@ -117,8 +97,8 @@ public function setSignCertificate($certificate, $privateKey = null, $signOption /** * Set the certificate location to use for encryption. * - * @see http://www.php.net/manual/en/openssl.pkcs7.flags.php - * @see http://nl3.php.net/manual/en/openssl.ciphers.php + * @see https://secure.php.net/manual/en/openssl.pkcs7.flags.php + * @see https://secure.php.net/manual/en/openssl.ciphers.php * * @param string|array $recipientCerts Either an single X.509 certificate, or an assoc array of X.509 certificates. * @param int $cipher @@ -128,7 +108,7 @@ public function setSignCertificate($certificate, $privateKey = null, $signOption public function setEncryptCertificate($recipientCerts, $cipher = null) { if (is_array($recipientCerts)) { - $this->encryptCert = array(); + $this->encryptCert = []; foreach ($recipientCerts as $cert) { $this->encryptCert[] = 'file://'.str_replace('\\', '/', realpath($cert)); @@ -197,9 +177,27 @@ public function reset() } /** - * Change the Swift_Message to apply the signing. + * Specify whether to wrap the entire MIME message in the S/MIME message. + * + * According to RFC5751 section 3.1: + * In order to protect outer, non-content-related message header fields + * (for instance, the "Subject", "To", "From", and "Cc" fields), the + * sending client MAY wrap a full MIME message in a message/rfc822 + * wrapper in order to apply S/MIME security services to these header + * fields. It is up to the receiving client to decide how to present + * this "inner" header along with the unprotected "outer" header. * - * @param Swift_Message $message + * @param bool $wrap + * + * @return $this + */ + public function setWrapFullMessage($wrap) + { + $this->wrapFullMessage = $wrap; + } + + /** + * Change the Swift_Message to apply the signing. * * @return $this */ @@ -209,17 +207,13 @@ public function signMessage(Swift_Message $message) return $this; } - // Store the message using ByteStream to a file{1} - // Remove all Children - // Sign file{1}, parse the new MIME headers and set them on the primary MimeEntity - // Set the singed-body as the new body (without boundary) - - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $this->toSMimeByteStream($messageStream, $message); - $message->setEncoder(Swift_DependencyContainer::getInstance()->lookup('mime.rawcontentencoder')); - - $message->setChildren(array()); - $this->streamToMime($messageStream, $message); + if ($this->signThenEncrypt) { + $this->smimeSignMessage($message); + $this->smimeEncryptMessage($message); + } else { + $this->smimeEncryptMessage($message); + $this->smimeSignMessage($message); + } } /** @@ -229,155 +223,279 @@ public function signMessage(Swift_Message $message) */ public function getAlteredHeaders() { - return array('Content-Type', 'Content-Transfer-Encoding', 'Content-Disposition'); + return ['Content-Type', 'Content-Transfer-Encoding', 'Content-Disposition']; } /** - * @param Swift_InputByteStream $inputStream - * @param Swift_Message $mimeEntity + * Sign a Swift message. */ - protected function toSMimeByteStream(Swift_InputByteStream $inputStream, Swift_Message $message) + protected function smimeSignMessage(Swift_Message $message) { - $mimeEntity = $this->createMessage($message); - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + // If we don't have a certificate we can't sign the message + if (null === $this->signCertificate) { + return; + } + + // Work on a clone of the original message + $signMessage = clone $message; + $signMessage->clearSigners(); - $mimeEntity->toByteStream($messageStream); + if ($this->wrapFullMessage) { + // The original message essentially becomes the body of the new + // wrapped message + $signMessage = $this->wrapMimeMessage($signMessage); + } else { + // Only keep header needed to parse the body correctly + $this->clearAllHeaders($signMessage); + $this->copyHeaders( + $message, + $signMessage, + [ + 'Content-Type', + 'Content-Transfer-Encoding', + 'Content-Disposition', + ] + ); + } + + // Copy the cloned message into a temporary file stream + $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + $signMessage->toByteStream($messageStream); $messageStream->commit(); + $signedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - if (null !== $this->signCertificate && null !== $this->encryptCert) { - $temporaryStream = new Swift_ByteStream_TemporaryFileByteStream(); + // Sign the message using openssl + if (!openssl_pkcs7_sign( + $messageStream->getPath(), + $signedMessageStream->getPath(), + $this->signCertificate, + $this->signPrivateKey, + [], + $this->signOptions, + $this->extraCerts + ) + ) { + throw new Swift_IoException(sprintf('Failed to sign S/Mime message. Error: "%s".', openssl_error_string())); + } - if ($this->signThenEncrypt) { - $this->messageStreamToSignedByteStream($messageStream, $temporaryStream); - $this->messageStreamToEncryptedByteStream($temporaryStream, $inputStream); - } else { - $this->messageStreamToEncryptedByteStream($messageStream, $temporaryStream); - $this->messageStreamToSignedByteStream($temporaryStream, $inputStream); - } - } elseif ($this->signCertificate !== null) { - $this->messageStreamToSignedByteStream($messageStream, $inputStream); + // Parse the resulting signed message content back into the Swift message + // preserving the original headers + $this->parseSSLOutput($signedMessageStream, $message); + } + + /** + * Encrypt a Swift message. + */ + protected function smimeEncryptMessage(Swift_Message $message) + { + // If we don't have a certificate we can't encrypt the message + if (null === $this->encryptCert) { + return; + } + + // Work on a clone of the original message + $encryptMessage = clone $message; + $encryptMessage->clearSigners(); + + if ($this->wrapFullMessage) { + // The original message essentially becomes the body of the new + // wrapped message + $encryptMessage = $this->wrapMimeMessage($encryptMessage); } else { - $this->messageStreamToEncryptedByteStream($messageStream, $inputStream); + // Only keep header needed to parse the body correctly + $this->clearAllHeaders($encryptMessage); + $this->copyHeaders( + $message, + $encryptMessage, + [ + 'Content-Type', + 'Content-Transfer-Encoding', + 'Content-Disposition', + ] + ); + } + + // Convert the message content (including headers) to a string + // and place it in a temporary file + $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + $encryptMessage->toByteStream($messageStream); + $messageStream->commit(); + $encryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); + + // Encrypt the message + if (!openssl_pkcs7_encrypt( + $messageStream->getPath(), + $encryptedMessageStream->getPath(), + $this->encryptCert, + [], + 0, + $this->encryptCipher + ) + ) { + throw new Swift_IoException(sprintf('Failed to encrypt S/Mime message. Error: "%s".', openssl_error_string())); } + + // Parse the resulting signed message content back into the Swift message + // preserving the original headers + $this->parseSSLOutput($encryptedMessageStream, $message); } /** - * @param Swift_Message $message - * - * @return Swift_Message + * Copy named headers from one Swift message to another. */ - protected function createMessage(Swift_Message $message) - { - $mimeEntity = new Swift_Message('', $message->getBody(), $message->getContentType(), $message->getCharset()); - $mimeEntity->setChildren($message->getChildren()); - - $messageHeaders = $mimeEntity->getHeaders(); - $messageHeaders->remove('Message-ID'); - $messageHeaders->remove('Date'); - $messageHeaders->remove('Subject'); - $messageHeaders->remove('MIME-Version'); - $messageHeaders->remove('To'); - $messageHeaders->remove('From'); - - return $mimeEntity; + protected function copyHeaders( + Swift_Message $fromMessage, + Swift_Message $toMessage, + array $headers = [] + ) { + foreach ($headers as $header) { + $this->copyHeader($fromMessage, $toMessage, $header); + } } /** - * @param Swift_FileStream $outputStream - * @param Swift_InputByteStream $inputStream + * Copy a single header from one Swift message to another. * - * @throws Swift_IoException + * @param string $headerName */ - protected function messageStreamToSignedByteStream(Swift_FileStream $outputStream, Swift_InputByteStream $inputStream) + protected function copyHeader(Swift_Message $fromMessage, Swift_Message $toMessage, $headerName) { - $signedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - - $args = array($outputStream->getPath(), $signedMessageStream->getPath(), $this->signCertificate, $this->signPrivateKey, array(), $this->signOptions); - if (null !== $this->extraCerts) { - $args[] = $this->extraCerts; + $header = $fromMessage->getHeaders()->get($headerName); + if (!$header) { + return; } - - if (!call_user_func_array('openssl_pkcs7_sign', $args)) { - throw new Swift_IoException(sprintf('Failed to sign S/Mime message. Error: "%s".', openssl_error_string())); + $headers = $toMessage->getHeaders(); + switch ($header->getFieldType()) { + case Swift_Mime_Header::TYPE_TEXT: + $headers->addTextHeader($header->getFieldName(), $header->getValue()); + break; + case Swift_Mime_Header::TYPE_PARAMETERIZED: + $headers->addParameterizedHeader( + $header->getFieldName(), + $header->getValue(), + $header->getParameters() + ); + break; } + } - $this->copyFromOpenSSLOutput($signedMessageStream, $inputStream); + /** + * Remove all headers from a Swift message. + */ + protected function clearAllHeaders(Swift_Message $message) + { + $headers = $message->getHeaders(); + foreach ($headers->listAll() as $header) { + $headers->removeAll($header); + } } /** - * @param Swift_FileStream $outputStream - * @param Swift_InputByteStream $is + * Wraps a Swift_Message in a message/rfc822 MIME part. * - * @throws Swift_IoException + * @return Swift_MimePart */ - protected function messageStreamToEncryptedByteStream(Swift_FileStream $outputStream, Swift_InputByteStream $is) + protected function wrapMimeMessage(Swift_Message $message) { - $encryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); + // Start by copying the original message into a message stream + $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + $message->toByteStream($messageStream); + $messageStream->commit(); - if (!openssl_pkcs7_encrypt($outputStream->getPath(), $encryptedMessageStream->getPath(), $this->encryptCert, array(), 0, $this->encryptCipher)) { - throw new Swift_IoException(sprintf('Failed to encrypt S/Mime message. Error: "%s".', openssl_error_string())); - } + // Create a new MIME part that wraps the original stream + $wrappedMessage = new Swift_MimePart($messageStream, 'message/rfc822'); + $wrappedMessage->setEncoder(new Swift_Mime_ContentEncoder_PlainContentEncoder('7bit')); - $this->copyFromOpenSSLOutput($encryptedMessageStream, $is); + return $wrappedMessage; + } + + protected function parseSSLOutput(Swift_InputByteStream $inputStream, Swift_Message $message) + { + $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + $this->copyFromOpenSSLOutput($inputStream, $messageStream); + + $this->streamToMime($messageStream, $message); } /** - * @param Swift_OutputByteStream $fromStream - * @param Swift_InputByteStream $toStream + * Merges an OutputByteStream from OpenSSL to a Swift_Message. */ - protected function copyFromOpenSSLOutput(Swift_OutputByteStream $fromStream, Swift_InputByteStream $toStream) + protected function streamToMime(Swift_OutputByteStream $fromStream, Swift_Message $message) { - $bufferLength = 4096; - $filteredStream = new Swift_ByteStream_TemporaryFileByteStream(); - $filteredStream->addFilter($this->replacementFactory->createFilter("\r\n", "\n"), 'CRLF to LF'); - $filteredStream->addFilter($this->replacementFactory->createFilter("\n", "\r\n"), 'LF to CRLF'); + // Parse the stream into headers and body + list($headers, $messageStream) = $this->parseStream($fromStream); - while (false !== ($buffer = $fromStream->read($bufferLength))) { - $filteredStream->write($buffer); + // Get the original message headers + $messageHeaders = $message->getHeaders(); + + // Let the stream determine the headers describing the body content, + // since the body of the original message is overwritten by the body + // coming from the stream. + // These are all content-* headers. + + // Default transfer encoding is 7bit if not set + $encoding = ''; + // Remove all existing transfer encoding headers + $messageHeaders->removeAll('Content-Transfer-Encoding'); + // See whether the stream sets the transfer encoding + if (isset($headers['content-transfer-encoding'])) { + $encoding = $headers['content-transfer-encoding']; } - $filteredStream->flushBuffers(); + // We use the null content encoder, since the body is already encoded + // according to the transfer encoding specified in the stream + $message->setEncoder(new Swift_Mime_ContentEncoder_NullContentEncoder($encoding)); - while (false !== ($buffer = $filteredStream->read($bufferLength))) { - $toStream->write($buffer); + // Set the disposition, if present + if (isset($headers['content-disposition'])) { + $messageHeaders->addTextHeader('Content-Disposition', $headers['content-disposition']); } - $toStream->commit(); + // Copy over the body from the stream using the content type dictated + // by the stream content + $message->setChildren([]); + $message->setBody($messageStream, $headers['content-type']); } /** - * Merges an OutputByteStream to Swift_Message. + * This message will parse the headers of a MIME email byte stream + * and return an array that contains the headers as an associative + * array and the email body as a string. * - * @param Swift_OutputByteStream $fromStream - * @param Swift_Message $message + * @return array */ - protected function streamToMime(Swift_OutputByteStream $fromStream, Swift_Message $message) + protected function parseStream(Swift_OutputByteStream $emailStream) { $bufferLength = 78; $headerData = ''; + $headerBodySeparator = "\r\n\r\n"; - $fromStream->setReadPointer(0); + $emailStream->setReadPointer(0); - while (($buffer = $fromStream->read($bufferLength)) !== false) { + // Read out the headers section from the stream to a string + while (false !== ($buffer = $emailStream->read($bufferLength))) { $headerData .= $buffer; - if (false !== strpos($buffer, "\r\n\r\n")) { + $headersPosEnd = strpos($headerData, $headerBodySeparator); + + // Stop reading if we found the end of the headers + if (false !== $headersPosEnd) { break; } } - $headersPosEnd = strpos($headerData, "\r\n\r\n"); - $headerData = trim($headerData); - $headerData = substr($headerData, 0, $headersPosEnd); + // Split the header data into lines + $headerData = trim(substr($headerData, 0, $headersPosEnd)); $headerLines = explode("\r\n", $headerData); unset($headerData); - $headers = array(); + $headers = []; $currentHeaderName = ''; + // Transform header lines into an associative array foreach ($headerLines as $headerLine) { - // Line separated - if (ctype_space($headerLines[0]) || false === strpos($headerLine, ':')) { + // Handle headers that span multiple lines + if (false === strpos($headerLine, ':')) { $headers[$currentHeaderName] .= ' '.trim($headerLine); continue; } @@ -387,50 +505,38 @@ protected function streamToMime(Swift_OutputByteStream $fromStream, Swift_Messag $headers[$currentHeaderName] = trim($header[1]); } - $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); - $messageStream->addFilter($this->replacementFactory->createFilter("\r\n", "\n"), 'CRLF to LF'); - $messageStream->addFilter($this->replacementFactory->createFilter("\n", "\r\n"), 'LF to CRLF'); - - $messageHeaders = $message->getHeaders(); - - // No need to check for 'application/pkcs7-mime', as this is always base64 - if ('multipart/signed;' === substr($headers['content-type'], 0, 17)) { - if (!preg_match('/boundary=("[^"]+"|(?:[^\s]+|$))/is', $headers['content-type'], $contentTypeData)) { - throw new Swift_SwiftException('Failed to find Boundary parameter'); - } - - $boundary = trim($contentTypeData['1'], '"'); + // Read the entire email body into a byte stream + $bodyStream = new Swift_ByteStream_TemporaryFileByteStream(); - // Skip the header and CRLF CRLF - $fromStream->setReadPointer($headersPosEnd + 4); + // Skip the header and separator and point to the body + $emailStream->setReadPointer($headersPosEnd + strlen($headerBodySeparator)); - while (false !== ($buffer = $fromStream->read($bufferLength))) { - $messageStream->write($buffer); - } + while (false !== ($buffer = $emailStream->read($bufferLength))) { + $bodyStream->write($buffer); + } - $messageStream->commit(); + $bodyStream->commit(); - $messageHeaders->remove('Content-Transfer-Encoding'); - $message->setContentType($headers['content-type']); - $message->setBoundary($boundary); - $message->setBody($messageStream); - } else { - $fromStream->setReadPointer($headersPosEnd + 4); + return [$headers, $bodyStream]; + } - if (null === $this->headerFactory) { - $this->headerFactory = Swift_DependencyContainer::getInstance()->lookup('mime.headerfactory'); - } + protected function copyFromOpenSSLOutput(Swift_OutputByteStream $fromStream, Swift_InputByteStream $toStream) + { + $bufferLength = 4096; + $filteredStream = new Swift_ByteStream_TemporaryFileByteStream(); + $filteredStream->addFilter($this->replacementFactory->createFilter("\r\n", "\n"), 'CRLF to LF'); + $filteredStream->addFilter($this->replacementFactory->createFilter("\n", "\r\n"), 'LF to CRLF'); - $message->setContentType($headers['content-type']); - $messageHeaders->set($this->headerFactory->createTextHeader('Content-Transfer-Encoding', $headers['content-transfer-encoding'])); - $messageHeaders->set($this->headerFactory->createTextHeader('Content-Disposition', $headers['content-disposition'])); + while (false !== ($buffer = $fromStream->read($bufferLength))) { + $filteredStream->write($buffer); + } - while (false !== ($buffer = $fromStream->read($bufferLength))) { - $messageStream->write($buffer); - } + $filteredStream->flushBuffers(); - $messageStream->commit(); - $message->setBody($messageStream); + while (false !== ($buffer = $filteredStream->read($bufferLength))) { + $toStream->write($buffer); } + + $toStream->commit(); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SmtpTransport.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SmtpTransport.php index b97f01e..e241e67 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SmtpTransport.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SmtpTransport.php @@ -11,7 +11,7 @@ /** * Sends Messages over SMTP with ESMTP support. * - * @author Chris Corbyn + * @author Chris Corbyn * * @method Swift_SmtpTransport setUsername(string $username) Set the username to authenticate with. * @method string getUsername() Get the username to authenticate with. @@ -23,36 +23,20 @@ class Swift_SmtpTransport extends Swift_Transport_EsmtpTransport { /** - * Create a new SmtpTransport, optionally with $host, $port and $security. - * * @param string $host * @param int $port - * @param string $security + * @param string $encryption */ - public function __construct($host = 'localhost', $port = 25, $security = null) + public function __construct($host = 'localhost', $port = 25, $encryption = null) { call_user_func_array( - array($this, 'Swift_Transport_EsmtpTransport::__construct'), + [$this, 'Swift_Transport_EsmtpTransport::__construct'], Swift_DependencyContainer::getInstance() ->createDependenciesFor('transport.smtp') ); $this->setHost($host); $this->setPort($port); - $this->setEncryption($security); - } - - /** - * Create a new SmtpTransport instance. - * - * @param string $host - * @param int $port - * @param string $security - * - * @return self - */ - public static function newInstance($host = 'localhost', $port = 25, $security = null) - { - return new self($host, $port, $security); + $this->setEncryption($encryption); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Spool.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Spool.php index c16ab4b..9d0e8fe 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Spool.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Spool.php @@ -35,11 +35,11 @@ public function isStarted(); /** * Queues a message. * - * @param Swift_Mime_Message $message The message to store + * @param Swift_Mime_SimpleMessage $message The message to store * * @return bool Whether the operation has succeeded */ - public function queueMessage(Swift_Mime_Message $message); + public function queueMessage(Swift_Mime_SimpleMessage $message); /** * Sends messages using the given transport instance. diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SpoolTransport.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SpoolTransport.php index 79c9b1f..4b30f04 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SpoolTransport.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SpoolTransport.php @@ -17,8 +17,6 @@ class Swift_SpoolTransport extends Swift_Transport_SpoolTransport { /** * Create a new SpoolTransport. - * - * @param Swift_Spool $spool */ public function __construct(Swift_Spool $spool) { @@ -28,20 +26,8 @@ public function __construct(Swift_Spool $spool) $arguments[] = $spool; call_user_func_array( - array($this, 'Swift_Transport_SpoolTransport::__construct'), + [$this, 'Swift_Transport_SpoolTransport::__construct'], $arguments ); } - - /** - * Create a new SpoolTransport instance. - * - * @param Swift_Spool $spool - * - * @return self - */ - public static function newInstance(Swift_Spool $spool) - { - return new self($spool); - } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php index 9412b1d..c3b7675 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php @@ -13,26 +13,23 @@ * * This stream filter deals with Byte arrays rather than simple strings. * - * @author Chris Corbyn + * @author Chris Corbyn */ class Swift_StreamFilters_ByteArrayReplacementFilter implements Swift_StreamFilter { - /** The needle(s) to search for */ - private $_search; - /** The replacement(s) to make */ - private $_replace; + private $replace; /** The Index for searching */ - private $_index; + private $index; /** The Search Tree */ - private $_tree = array(); + private $tree = []; /** Gives the size of the largest search */ - private $_treeMaxLen = 0; + private $treeMaxLen = 0; - private $_repSize; + private $repSize; /** * Create a new ByteArrayReplacementFilter with $search and $replace. @@ -42,26 +39,25 @@ class Swift_StreamFilters_ByteArrayReplacementFilter implements Swift_StreamFilt */ public function __construct($search, $replace) { - $this->_search = $search; - $this->_index = array(); - $this->_tree = array(); - $this->_replace = array(); - $this->_repSize = array(); + $this->index = []; + $this->tree = []; + $this->replace = []; + $this->repSize = []; $tree = null; $i = null; $last_size = $size = 0; foreach ($search as $i => $search_element) { - if ($tree !== null) { + if (null !== $tree) { $tree[-1] = min(count($replace) - 1, $i - 1); $tree[-2] = $last_size; } - $tree = &$this->_tree; + $tree = &$this->tree; if (is_array($search_element)) { foreach ($search_element as $k => $char) { - $this->_index[$char] = true; + $this->index[$char] = true; if (!isset($tree[$char])) { - $tree[$char] = array(); + $tree[$char] = []; } $tree = &$tree[$char]; } @@ -70,27 +66,27 @@ public function __construct($search, $replace) } else { $last_size = 1; if (!isset($tree[$search_element])) { - $tree[$search_element] = array(); + $tree[$search_element] = []; } $tree = &$tree[$search_element]; $size = max($last_size, $size); - $this->_index[$search_element] = true; + $this->index[$search_element] = true; } } - if ($i !== null) { + if (null !== $i) { $tree[-1] = min(count($replace) - 1, $i); $tree[-2] = $last_size; - $this->_treeMaxLen = $size; + $this->treeMaxLen = $size; } foreach ($replace as $rep) { if (!is_array($rep)) { - $rep = array($rep); + $rep = [$rep]; } - $this->_replace[] = $rep; + $this->replace[] = $rep; } - for ($i = count($this->_replace) - 1; $i >= 0; --$i) { - $this->_replace[$i] = $rep = $this->filter($this->_replace[$i], $i); - $this->_repSize[$i] = count($rep); + for ($i = count($this->replace) - 1; $i >= 0; --$i) { + $this->replace[$i] = $rep = $this->filter($this->replace[$i], $i); + $this->repSize[$i] = count($rep); } } @@ -105,47 +101,47 @@ public function shouldBuffer($buffer) { $endOfBuffer = end($buffer); - return isset($this->_index[$endOfBuffer]); + return isset($this->index[$endOfBuffer]); } /** * Perform the actual replacements on $buffer and return the result. * * @param array $buffer - * @param int $_minReplaces + * @param int $minReplaces * * @return array */ - public function filter($buffer, $_minReplaces = -1) + public function filter($buffer, $minReplaces = -1) { - if ($this->_treeMaxLen == 0) { + if (0 == $this->treeMaxLen) { return $buffer; } - $newBuffer = array(); + $newBuffer = []; $buf_size = count($buffer); $last_size = 0; for ($i = 0; $i < $buf_size; ++$i) { - $search_pos = $this->_tree; + $search_pos = $this->tree; $last_found = PHP_INT_MAX; // We try to find if the next byte is part of a search pattern - for ($j = 0; $j <= $this->_treeMaxLen; ++$j) { + for ($j = 0; $j <= $this->treeMaxLen; ++$j) { // We have a new byte for a search pattern if (isset($buffer[$p = $i + $j]) && isset($search_pos[$buffer[$p]])) { $search_pos = $search_pos[$buffer[$p]]; // We have a complete pattern, save, in case we don't find a better match later if (isset($search_pos[-1]) && $search_pos[-1] < $last_found - && $search_pos[-1] > $_minReplaces) { + && $search_pos[-1] > $minReplaces) { $last_found = $search_pos[-1]; $last_size = $search_pos[-2]; } } // We got a complete pattern - elseif ($last_found !== PHP_INT_MAX) { + elseif (PHP_INT_MAX !== $last_found) { // Adding replacement datas to output buffer - $rep_size = $this->_repSize[$last_found]; + $rep_size = $this->repSize[$last_found]; for ($j = 0; $j < $rep_size; ++$j) { - $newBuffer[] = $this->_replace[$last_found][$j]; + $newBuffer[] = $this->replace[$last_found][$j]; } // We Move cursor forward $i += $last_size - 1; diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php index f64144a..50a63f1 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php @@ -16,10 +16,10 @@ class Swift_StreamFilters_StringReplacementFilter implements Swift_StreamFilter { /** The needle(s) to search for */ - private $_search; + private $search; /** The replacement(s) to make */ - private $_replace; + private $replace; /** * Create a new StringReplacementFilter with $search and $replace. @@ -29,8 +29,8 @@ class Swift_StreamFilters_StringReplacementFilter implements Swift_StreamFilter */ public function __construct($search, $replace) { - $this->_search = $search; - $this->_replace = $replace; + $this->search = $search; + $this->replace = $replace; } /** @@ -47,7 +47,7 @@ public function shouldBuffer($buffer) } $endOfBuffer = substr($buffer, -1); - foreach ((array) $this->_search as $needle) { + foreach ((array) $this->search as $needle) { if (false !== strpos($needle, $endOfBuffer)) { return true; } @@ -65,6 +65,6 @@ public function shouldBuffer($buffer) */ public function filter($buffer) { - return str_replace($this->_search, $this->_replace, $buffer); + return str_replace($this->search, $this->replace, $buffer); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php index e98240b..783b889 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php @@ -16,7 +16,7 @@ class Swift_StreamFilters_StringReplacementFilterFactory implements Swift_ReplacementFilterFactory { /** Lazy-loaded filters */ - private $_filters = array(); + private $filters = []; /** * Create a new StreamFilter to replace $search with $replace in a string. @@ -28,18 +28,18 @@ class Swift_StreamFilters_StringReplacementFilterFactory implements Swift_Replac */ public function createFilter($search, $replace) { - if (!isset($this->_filters[$search][$replace])) { - if (!isset($this->_filters[$search])) { - $this->_filters[$search] = array(); + if (!isset($this->filters[$search][$replace])) { + if (!isset($this->filters[$search])) { + $this->filters[$search] = []; } - if (!isset($this->_filters[$search][$replace])) { - $this->_filters[$search][$replace] = array(); + if (!isset($this->filters[$search][$replace])) { + $this->filters[$search][$replace] = []; } - $this->_filters[$search][$replace] = new Swift_StreamFilters_StringReplacementFilter($search, $replace); + $this->filters[$search][$replace] = new Swift_StreamFilters_StringReplacementFilter($search, $replace); } - return $this->_filters[$search][$replace]; + return $this->filters[$search][$replace]; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SwiftException.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SwiftException.php index db3d310..15e68b1 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SwiftException.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/SwiftException.php @@ -18,9 +18,8 @@ class Swift_SwiftException extends Exception /** * Create a new SwiftException with $message. * - * @param string $message - * @param int $code - * @param Exception $previous + * @param string $message + * @param int $code */ public function __construct($message, $code = 0, Exception $previous = null) { diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport.php index 6535ead..0951f35 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport.php @@ -32,18 +32,43 @@ public function start(); */ public function stop(); + /** + * Check if this Transport mechanism is alive. + * + * If a Transport mechanism session is no longer functional, the method + * returns FALSE. It is the responsibility of the developer to handle this + * case and restart the Transport mechanism manually. + * + * @example + * + * if (!$transport->ping()) { + * $transport->stop(); + * $transport->start(); + * } + * + * The Transport mechanism will be started, if it is not already. + * + * It is undefined if the Transport mechanism attempts to restart as long as + * the return value reflects whether the mechanism is now functional. + * + * @return bool TRUE if the transport is alive + */ + public function ping(); + /** * Send the given Message. * * Recipient/sender data will be retrieved from the Message API. * The return value is the number of recipients who were accepted for delivery. * - * @param Swift_Mime_Message $message - * @param string[] $failedRecipients An array of failures by-reference + * This is the responsibility of the send method to start the transport if needed. + * + * @param Swift_Mime_SimpleMessage $message + * @param string[] $failedRecipients An array of failures by-reference * * @return int */ - public function send(Swift_Mime_Message $message, &$failedRecipients = null); + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null); /** * Register a plugin in the Transport. diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php index 60233f9..18c8d9b 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php @@ -16,34 +16,42 @@ abstract class Swift_Transport_AbstractSmtpTransport implements Swift_Transport { /** Input-Output buffer for sending/receiving SMTP commands and responses */ - protected $_buffer; + protected $buffer; /** Connection status */ - protected $_started = false; + protected $started = false; /** The domain name to use in HELO command */ - protected $_domain = '[127.0.0.1]'; + protected $domain = '[127.0.0.1]'; /** The event dispatching layer */ - protected $_eventDispatcher; + protected $eventDispatcher; + + protected $addressEncoder; + + /** Whether the PIPELINING SMTP extension is enabled (RFC 2920) */ + protected $pipelining = null; + + /** The pipelined commands waiting for response */ + protected $pipeline = []; /** Source Ip */ - protected $_sourceIp; + protected $sourceIp; /** Return an array of params for the Buffer */ - abstract protected function _getBufferParams(); + abstract protected function getBufferParams(); /** * Creates a new EsmtpTransport using the given I/O buffer. * - * @param Swift_Transport_IoBuffer $buf - * @param Swift_Events_EventDispatcher $dispatcher + * @param string $localDomain */ - public function __construct(Swift_Transport_IoBuffer $buf, Swift_Events_EventDispatcher $dispatcher) + public function __construct(Swift_Transport_IoBuffer $buf, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) { - $this->_eventDispatcher = $dispatcher; - $this->_buffer = $buf; - $this->_lookupHostname(); + $this->buffer = $buf; + $this->eventDispatcher = $dispatcher; + $this->addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); + $this->setLocalDomain($localDomain); } /** @@ -52,8 +60,9 @@ public function __construct(Swift_Transport_IoBuffer $buf, Swift_Events_EventDis * This should be a fully-qualified domain name and should be truly the domain * you're using. * - * If your server doesn't have a domain name, use the IP in square - * brackets (i.e. [127.0.0.1]). + * If your server does not have a domain name, use the IP address. This will + * automatically be wrapped in square brackets as described in RFC 5321, + * section 4.1.3. * * @param string $domain * @@ -61,7 +70,15 @@ public function __construct(Swift_Transport_IoBuffer $buf, Swift_Events_EventDis */ public function setLocalDomain($domain) { - $this->_domain = $domain; + if ('[' !== substr($domain, 0, 1)) { + if (filter_var($domain, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)) { + $domain = '['.$domain.']'; + } elseif (filter_var($domain, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { + $domain = '[IPv6:'.$domain.']'; + } + } + + $this->domain = $domain; return $this; } @@ -69,11 +86,14 @@ public function setLocalDomain($domain) /** * Get the name of the domain Swift will identify as. * + * If an IP address was specified, this will be returned wrapped in square + * brackets as described in RFC 5321, section 4.1.3. + * * @return string */ public function getLocalDomain() { - return $this->_domain; + return $this->domain; } /** @@ -83,7 +103,7 @@ public function getLocalDomain() */ public function setSourceIp($source) { - $this->_sourceIp = $source; + $this->sourceIp = $source; } /** @@ -93,7 +113,17 @@ public function setSourceIp($source) */ public function getSourceIp() { - return $this->_sourceIp; + return $this->sourceIp; + } + + public function setAddressEncoder(Swift_AddressEncoder $addressEncoder) + { + $this->addressEncoder = $addressEncoder; + } + + public function getAddressEncoder() + { + return $this->addressEncoder; } /** @@ -101,27 +131,27 @@ public function getSourceIp() */ public function start() { - if (!$this->_started) { - if ($evt = $this->_eventDispatcher->createTransportChangeEvent($this)) { - $this->_eventDispatcher->dispatchEvent($evt, 'beforeTransportStarted'); + if (!$this->started) { + if ($evt = $this->eventDispatcher->createTransportChangeEvent($this)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeTransportStarted'); if ($evt->bubbleCancelled()) { return; } } try { - $this->_buffer->initialize($this->_getBufferParams()); + $this->buffer->initialize($this->getBufferParams()); } catch (Swift_TransportException $e) { - $this->_throwException($e); + $this->throwException($e); } - $this->_readGreeting(); - $this->_doHeloCommand(); + $this->readGreeting(); + $this->doHeloCommand(); if ($evt) { - $this->_eventDispatcher->dispatchEvent($evt, 'transportStarted'); + $this->eventDispatcher->dispatchEvent($evt, 'transportStarted'); } - $this->_started = true; + $this->started = true; } } @@ -132,7 +162,7 @@ public function start() */ public function isStarted() { - return $this->_started; + return $this->started; } /** @@ -141,28 +171,28 @@ public function isStarted() * Recipient/sender data will be retrieved from the Message API. * The return value is the number of recipients who were accepted for delivery. * - * @param Swift_Mime_Message $message - * @param string[] $failedRecipients An array of failures by-reference + * @param string[] $failedRecipients An array of failures by-reference * * @return int */ - public function send(Swift_Mime_Message $message, &$failedRecipients = null) + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) { + if (!$this->isStarted()) { + $this->start(); + } + $sent = 0; $failedRecipients = (array) $failedRecipients; - if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) { - $this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); if ($evt->bubbleCancelled()) { return 0; } } - if (!$reversePath = $this->_getReversePath($message)) { - $this->_throwException(new Swift_TransportException( - 'Cannot send message without a sender address' - ) - ); + if (!$reversePath = $this->getReversePath($message)) { + $this->throwException(new Swift_TransportException('Cannot send message without a sender address')); } $to = (array) $message->getTo(); @@ -170,18 +200,15 @@ public function send(Swift_Mime_Message $message, &$failedRecipients = null) $tos = array_merge($to, $cc); $bcc = (array) $message->getBcc(); - $message->setBcc(array()); + $message->setBcc([]); try { - $sent += $this->_sendTo($message, $reversePath, $tos, $failedRecipients); - $sent += $this->_sendBcc($message, $reversePath, $bcc, $failedRecipients); - } catch (Exception $e) { + $sent += $this->sendTo($message, $reversePath, $tos, $failedRecipients); + $sent += $this->sendBcc($message, $reversePath, $bcc, $failedRecipients); + } finally { $message->setBcc($bcc); - throw $e; } - $message->setBcc($bcc); - if ($evt) { if ($sent == count($to) + count($cc) + count($bcc)) { $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); @@ -191,7 +218,7 @@ public function send(Swift_Mime_Message $message, &$failedRecipients = null) $evt->setResult(Swift_Events_SendEvent::RESULT_FAILED); } $evt->setFailedRecipients($failedRecipients); - $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); } $message->generateId(); //Make sure a new Message ID is used @@ -204,40 +231,61 @@ public function send(Swift_Mime_Message $message, &$failedRecipients = null) */ public function stop() { - if ($this->_started) { - if ($evt = $this->_eventDispatcher->createTransportChangeEvent($this)) { - $this->_eventDispatcher->dispatchEvent($evt, 'beforeTransportStopped'); + if ($this->started) { + if ($evt = $this->eventDispatcher->createTransportChangeEvent($this)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeTransportStopped'); if ($evt->bubbleCancelled()) { return; } } try { - $this->executeCommand("QUIT\r\n", array(221)); + $this->executeCommand("QUIT\r\n", [221]); } catch (Swift_TransportException $e) { } try { - $this->_buffer->terminate(); + $this->buffer->terminate(); if ($evt) { - $this->_eventDispatcher->dispatchEvent($evt, 'transportStopped'); + $this->eventDispatcher->dispatchEvent($evt, 'transportStopped'); } } catch (Swift_TransportException $e) { - $this->_throwException($e); + $this->throwException($e); } } - $this->_started = false; + $this->started = false; + } + + /** + * {@inheritdoc} + */ + public function ping() + { + try { + if (!$this->isStarted()) { + $this->start(); + } + + $this->executeCommand("NOOP\r\n", [250]); + } catch (Swift_TransportException $e) { + try { + $this->stop(); + } catch (Swift_TransportException $e) { + } + + return false; + } + + return true; } /** * Register a plugin. - * - * @param Swift_Events_EventListener $plugin */ public function registerPlugin(Swift_Events_EventListener $plugin) { - $this->_eventDispatcher->bindEventListener($plugin); + $this->eventDispatcher->bindEventListener($plugin); } /** @@ -245,7 +293,7 @@ public function registerPlugin(Swift_Events_EventListener $plugin) */ public function reset() { - $this->executeCommand("RSET\r\n", array(250)); + $this->executeCommand("RSET\r\n", [250], $failures, true); } /** @@ -255,7 +303,7 @@ public function reset() */ public function getBuffer() { - return $this->_buffer; + return $this->buffer; } /** @@ -263,78 +311,101 @@ public function getBuffer() * * If no response codes are given, the response will not be validated. * If codes are given, an exception will be thrown on an invalid response. + * If the command is RCPT TO, and the pipeline is non-empty, no exception + * will be thrown; instead the failing address is added to $failures. * * @param string $command * @param int[] $codes * @param string[] $failures An array of failures by-reference + * @param bool $pipeline Do not wait for response + * @param string $address The address, if command is RCPT TO. * - * @return string + * @return string|null The server response, or null if pipelining is enabled */ - public function executeCommand($command, $codes = array(), &$failures = null) + public function executeCommand($command, $codes = [], &$failures = null, $pipeline = false, $address = null) { $failures = (array) $failures; - $seq = $this->_buffer->write($command); - $response = $this->_getFullResponse($seq); - if ($evt = $this->_eventDispatcher->createCommandEvent($this, $command, $codes)) { - $this->_eventDispatcher->dispatchEvent($evt, 'commandSent'); + $seq = $this->buffer->write($command); + if ($evt = $this->eventDispatcher->createCommandEvent($this, $command, $codes)) { + $this->eventDispatcher->dispatchEvent($evt, 'commandSent'); + } + + $this->pipeline[] = [$command, $seq, $codes, $address]; + if ($pipeline && $this->pipelining) { + $response = null; + } else { + while ($this->pipeline) { + list($command, $seq, $codes, $address) = array_shift($this->pipeline); + $response = $this->getFullResponse($seq); + try { + $this->assertResponseCode($response, $codes); + } catch (Swift_TransportException $e) { + if ($this->pipeline && $address) { + $failures[] = $address; + } else { + $this->throwException($e); + } + } + } } - $this->_assertResponseCode($response, $codes); return $response; } /** Read the opening SMTP greeting */ - protected function _readGreeting() + protected function readGreeting() { - $this->_assertResponseCode($this->_getFullResponse(0), array(220)); + $this->assertResponseCode($this->getFullResponse(0), [220]); } /** Send the HELO welcome */ - protected function _doHeloCommand() + protected function doHeloCommand() { $this->executeCommand( - sprintf("HELO %s\r\n", $this->_domain), array(250) + sprintf("HELO %s\r\n", $this->domain), [250] ); } /** Send the MAIL FROM command */ - protected function _doMailFromCommand($address) + protected function doMailFromCommand($address) { + $address = $this->addressEncoder->encodeString($address); $this->executeCommand( - sprintf("MAIL FROM:<%s>\r\n", $address), array(250) + sprintf("MAIL FROM:<%s>\r\n", $address), [250], $failures, true ); } /** Send the RCPT TO command */ - protected function _doRcptToCommand($address) + protected function doRcptToCommand($address) { + $address = $this->addressEncoder->encodeString($address); $this->executeCommand( - sprintf("RCPT TO:<%s>\r\n", $address), array(250, 251, 252) + sprintf("RCPT TO:<%s>\r\n", $address), [250, 251, 252], $failures, true, $address ); } /** Send the DATA command */ - protected function _doDataCommand() + protected function doDataCommand(&$failedRecipients) { - $this->executeCommand("DATA\r\n", array(354)); + $this->executeCommand("DATA\r\n", [354], $failedRecipients); } /** Stream the contents of the message over the buffer */ - protected function _streamMessage(Swift_Mime_Message $message) + protected function streamMessage(Swift_Mime_SimpleMessage $message) { - $this->_buffer->setWriteTranslations(array("\r\n." => "\r\n..")); + $this->buffer->setWriteTranslations(["\r\n." => "\r\n.."]); try { - $message->toByteStream($this->_buffer); - $this->_buffer->flushBuffers(); + $message->toByteStream($this->buffer); + $this->buffer->flushBuffers(); } catch (Swift_TransportException $e) { - $this->_throwException($e); + $this->throwException($e); } - $this->_buffer->setWriteTranslations(array()); - $this->executeCommand("\r\n.\r\n", array(250)); + $this->buffer->setWriteTranslations([]); + $this->executeCommand("\r\n.\r\n", [250]); } /** Determine the best-use reverse path for this message */ - protected function _getReversePath(Swift_Mime_Message $message) + protected function getReversePath(Swift_Mime_SimpleMessage $message) { $return = $message->getReturnPath(); $sender = $message->getSender(); @@ -355,10 +426,10 @@ protected function _getReversePath(Swift_Mime_Message $message) } /** Throw a TransportException, first sending it to any listeners */ - protected function _throwException(Swift_TransportException $e) + protected function throwException(Swift_TransportException $e) { - if ($evt = $this->_eventDispatcher->createTransportExceptionEvent($this, $e)) { - $this->_eventDispatcher->dispatchEvent($evt, 'exceptionThrown'); + if ($evt = $this->eventDispatcher->createTransportExceptionEvent($this, $e)) { + $this->eventDispatcher->dispatchEvent($evt, 'exceptionThrown'); if (!$evt->bubbleCancelled()) { throw $e; } @@ -368,64 +439,65 @@ protected function _throwException(Swift_TransportException $e) } /** Throws an Exception if a response code is incorrect */ - protected function _assertResponseCode($response, $wanted) + protected function assertResponseCode($response, $wanted) { + if (!$response) { + $this->throwException(new Swift_TransportException('Expected response code '.implode('/', $wanted).' but got an empty response')); + } + list($code) = sscanf($response, '%3d'); $valid = (empty($wanted) || in_array($code, $wanted)); - if ($evt = $this->_eventDispatcher->createResponseEvent($this, $response, + if ($evt = $this->eventDispatcher->createResponseEvent($this, $response, $valid)) { - $this->_eventDispatcher->dispatchEvent($evt, 'responseReceived'); + $this->eventDispatcher->dispatchEvent($evt, 'responseReceived'); } if (!$valid) { - $this->_throwException( - new Swift_TransportException( - 'Expected response code '.implode('/', $wanted).' but got code '. - '"'.$code.'", with message "'.$response.'"', - $code) - ); + $this->throwException(new Swift_TransportException('Expected response code '.implode('/', $wanted).' but got code "'.$code.'", with message "'.$response.'"', $code)); } } /** Get an entire multi-line response using its sequence number */ - protected function _getFullResponse($seq) + protected function getFullResponse($seq) { $response = ''; try { do { - $line = $this->_buffer->readLine($seq); + $line = $this->buffer->readLine($seq); $response .= $line; } while (null !== $line && false !== $line && ' ' != $line[3]); } catch (Swift_TransportException $e) { - $this->_throwException($e); + $this->throwException($e); } catch (Swift_IoException $e) { - $this->_throwException( - new Swift_TransportException( - $e->getMessage()) - ); + $this->throwException(new Swift_TransportException($e->getMessage(), 0, $e)); } return $response; } /** Send an email to the given recipients from the given reverse path */ - private function _doMailTransaction($message, $reversePath, array $recipients, array &$failedRecipients) + private function doMailTransaction($message, $reversePath, array $recipients, array &$failedRecipients) { $sent = 0; - $this->_doMailFromCommand($reversePath); + $this->doMailFromCommand($reversePath); foreach ($recipients as $forwardPath) { try { - $this->_doRcptToCommand($forwardPath); + $this->doRcptToCommand($forwardPath); ++$sent; } catch (Swift_TransportException $e) { $failedRecipients[] = $forwardPath; + } catch (Swift_AddressEncoderException $e) { + $failedRecipients[] = $forwardPath; } } - if ($sent != 0) { - $this->_doDataCommand(); - $this->_streamMessage($message); + if (0 != $sent) { + $sent += count($failedRecipients); + $this->doDataCommand($failedRecipients); + $sent -= count($failedRecipients); + + $this->streamMessage($message); } else { $this->reset(); } @@ -434,58 +506,30 @@ private function _doMailTransaction($message, $reversePath, array $recipients, a } /** Send a message to the given To: recipients */ - private function _sendTo(Swift_Mime_Message $message, $reversePath, array $to, array &$failedRecipients) + private function sendTo(Swift_Mime_SimpleMessage $message, $reversePath, array $to, array &$failedRecipients) { if (empty($to)) { return 0; } - return $this->_doMailTransaction($message, $reversePath, array_keys($to), + return $this->doMailTransaction($message, $reversePath, array_keys($to), $failedRecipients); } /** Send a message to all Bcc: recipients */ - private function _sendBcc(Swift_Mime_Message $message, $reversePath, array $bcc, array &$failedRecipients) + private function sendBcc(Swift_Mime_SimpleMessage $message, $reversePath, array $bcc, array &$failedRecipients) { $sent = 0; foreach ($bcc as $forwardPath => $name) { - $message->setBcc(array($forwardPath => $name)); - $sent += $this->_doMailTransaction( - $message, $reversePath, array($forwardPath), $failedRecipients + $message->setBcc([$forwardPath => $name]); + $sent += $this->doMailTransaction( + $message, $reversePath, [$forwardPath], $failedRecipients ); } return $sent; } - /** Try to determine the hostname of the server this is run on */ - private function _lookupHostname() - { - if (!empty($_SERVER['SERVER_NAME']) && $this->_isFqdn($_SERVER['SERVER_NAME'])) { - $this->_domain = $_SERVER['SERVER_NAME']; - } elseif (!empty($_SERVER['SERVER_ADDR'])) { - // Set the address literal tag (See RFC 5321, section: 4.1.3) - if (false === strpos($_SERVER['SERVER_ADDR'], ':')) { - $prefix = ''; // IPv4 addresses are not tagged. - } else { - $prefix = 'IPv6:'; // Adding prefix in case of IPv6. - } - - $this->_domain = sprintf('[%s%s]', $prefix, $_SERVER['SERVER_ADDR']); - } - } - - /** Determine is the $hostname is a fully-qualified name */ - private function _isFqdn($hostname) - { - // We could do a really thorough check, but there's really no point - if (false !== $dotPos = strpos($hostname, '.')) { - return ($dotPos > 0) && ($dotPos != strlen($hostname) - 1); - } - - return false; - } - /** * Destructor. */ diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php index 53f721d..51dc7f5 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php @@ -26,29 +26,23 @@ public function getAuthKeyword() } /** - * Try to authenticate the user with $username and $password. - * - * @param Swift_Transport_SmtpAgent $agent - * @param string $username - * @param string $password - * - * @return bool + * {@inheritdoc} */ public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) { try { - $challenge = $agent->executeCommand("AUTH CRAM-MD5\r\n", array(334)); + $challenge = $agent->executeCommand("AUTH CRAM-MD5\r\n", [334]); $challenge = base64_decode(substr($challenge, 4)); $message = base64_encode( - $username.' '.$this->_getResponse($password, $challenge) + $username.' '.$this->getResponse($password, $challenge) ); - $agent->executeCommand(sprintf("%s\r\n", $message), array(235)); + $agent->executeCommand(sprintf("%s\r\n", $message), [235]); return true; } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", array(250)); + $agent->executeCommand("RSET\r\n", [250]); - return false; + throw $e; } } @@ -60,7 +54,7 @@ public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $passw * * @return string */ - private function _getResponse($secret, $challenge) + private function getResponse($secret, $challenge) { if (strlen($secret) > 64) { $secret = pack('H32', md5($secret)); diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php index 6ab6e33..458c038 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php @@ -26,26 +26,20 @@ public function getAuthKeyword() } /** - * Try to authenticate the user with $username and $password. - * - * @param Swift_Transport_SmtpAgent $agent - * @param string $username - * @param string $password - * - * @return bool + * {@inheritdoc} */ public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) { try { - $agent->executeCommand("AUTH LOGIN\r\n", array(334)); - $agent->executeCommand(sprintf("%s\r\n", base64_encode($username)), array(334)); - $agent->executeCommand(sprintf("%s\r\n", base64_encode($password)), array(235)); + $agent->executeCommand("AUTH LOGIN\r\n", [334]); + $agent->executeCommand(sprintf("%s\r\n", base64_encode($username)), [334]); + $agent->executeCommand(sprintf("%s\r\n", base64_encode($password)), [235]); return true; } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", array(250)); + $agent->executeCommand("RSET\r\n", [250]); - return false; + throw $e; } } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php index 8392658..90081f8 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/NTLMAuthenticator.php @@ -13,7 +13,7 @@ /** * Handles NTLM authentication. * - * @author Ward Peeters + * @author Ward Peeters */ class Swift_Transport_Esmtp_Auth_NTLMAuthenticator implements Swift_Transport_Esmtp_Authenticator { @@ -31,17 +31,13 @@ public function getAuthKeyword() } /** - * Try to authenticate the user with $username and $password. + * {@inheritdoc} * - * @param Swift_Transport_SmtpAgent $agent - * @param string $username - * @param string $password - * - * @return bool + * @throws \LogicException */ public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) { - if (!function_exists('openssl_random_pseudo_bytes') || !function_exists('openssl_encrypt')) { + if (!function_exists('openssl_encrypt')) { throw new LogicException('The OpenSSL extension must be enabled to use the NTLM authenticator.'); } @@ -56,16 +52,16 @@ public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $passw // extra parameters for our unit cases $timestamp = func_num_args() > 3 ? func_get_arg(3) : $this->getCorrectTimestamp(bcmul(microtime(true), '1000')); - $client = func_num_args() > 4 ? func_get_arg(4) : $this->getRandomBytes(8); + $client = func_num_args() > 4 ? func_get_arg(4) : random_bytes(8); // Message 3 response $this->sendMessage3($response, $username, $password, $timestamp, $client, $agent); return true; } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", array(250)); + $agent->executeCommand("RSET\r\n", [250]); - return false; + throw $e; } } @@ -98,15 +94,13 @@ protected function si2bin($si, $bits = 32) /** * Send our auth message and returns the response. * - * @param Swift_Transport_SmtpAgent $agent - * * @return string SMTP Response */ protected function sendMessage1(Swift_Transport_SmtpAgent $agent) { $message = $this->createMessage1(); - return $agent->executeCommand(sprintf("AUTH %s %s\r\n", $this->getAuthKeyword(), base64_encode($message)), array(334)); + return $agent->executeCommand(sprintf("AUTH %s %s\r\n", $this->getAuthKeyword(), base64_encode($message)), [334]); } /** @@ -121,15 +115,15 @@ protected function parseMessage2($response) $responseHex = bin2hex($response); $length = floor(hexdec(substr($responseHex, 28, 4)) / 256) * 2; $offset = floor(hexdec(substr($responseHex, 32, 4)) / 256) * 2; - $challenge = $this->hex2bin(substr($responseHex, 48, 16)); - $context = $this->hex2bin(substr($responseHex, 64, 16)); - $targetInfoH = $this->hex2bin(substr($responseHex, 80, 16)); - $targetName = $this->hex2bin(substr($responseHex, $offset, $length)); + $challenge = hex2bin(substr($responseHex, 48, 16)); + $context = hex2bin(substr($responseHex, 64, 16)); + $targetInfoH = hex2bin(substr($responseHex, 80, 16)); + $targetName = hex2bin(substr($responseHex, $offset, $length)); $offset = floor(hexdec(substr($responseHex, 88, 4)) / 256) * 2; $targetInfoBlock = substr($responseHex, $offset); list($domainName, $serverName, $DNSDomainName, $DNSServerName, $terminatorByte) = $this->readSubBlock($targetInfoBlock); - return array( + return [ $challenge, $context, $targetInfoH, @@ -138,16 +132,14 @@ protected function parseMessage2($response) $serverName, $DNSDomainName, $DNSServerName, - $this->hex2bin($targetInfoBlock), + hex2bin($targetInfoBlock), $terminatorByte, - ); + ]; } /** * Read the blob information in from message2. * - * @param $block - * * @return array */ protected function readSubBlock($block) @@ -157,15 +149,15 @@ protected function readSubBlock($block) $length = strlen($block); $offset = 0; - $data = array(); + $data = []; while ($offset < $length) { $blockLength = hexdec(substr(substr($block, $offset, 8), -4)) / 256; $offset += 8; - $data[] = $this->hex2bin(substr($block, $offset, $blockLength * 2)); + $data[] = hex2bin(substr($block, $offset, $blockLength * 2)); $offset += $blockLength * 2; } - if (count($data) == 3) { + if (3 == count($data)) { $data[] = $data[2]; $data[2] = ''; } @@ -178,13 +170,12 @@ protected function readSubBlock($block) /** * Send our final message with all our data. * - * @param string $response Message 1 response (message 2) - * @param string $username - * @param string $password - * @param string $timestamp - * @param string $client - * @param Swift_Transport_SmtpAgent $agent - * @param bool $v2 Use version2 of the protocol + * @param string $response Message 1 response (message 2) + * @param string $username + * @param string $password + * @param string $timestamp + * @param string $client + * @param bool $v2 Use version2 of the protocol * * @return string */ @@ -208,7 +199,7 @@ protected function sendMessage3($response, $username, $password, $timestamp, $cl $message = $this->createMessage3($domain, $username, $workstation, $lmResponse, $ntlmResponse); - return $agent->executeCommand(sprintf("%s\r\n", base64_encode($message)), array(235)); + return $agent->executeCommand(sprintf("%s\r\n", base64_encode($message)), [235]); } /** @@ -292,18 +283,18 @@ protected function createBlob($timestamp, $client, $targetInfo) */ protected function getDomainAndUsername($name) { - if (strpos($name, '\\') !== false) { + if (false !== strpos($name, '\\')) { return explode('\\', $name); } if (false !== strpos($name, '@')) { list($user, $domain) = explode('@', $name); - return array($domain, $user); + return [$domain, $user]; } // no domain passed - return array('', $name); + return ['', $name]; } /** @@ -434,7 +425,7 @@ protected function createNTLMv2Hash($password, $username, $domain, $challenge, $ protected function createDesKey($key) { - $material = array(bin2hex($key[0])); + $material = [bin2hex($key[0])]; $len = strlen($key); for ($i = 1; $i < $len; ++$i) { list($high, $low) = str_split(bin2hex($key[$i])); @@ -446,9 +437,9 @@ protected function createDesKey($key) // odd parity foreach ($material as $k => $v) { $b = $this->castToByte(hexdec($v)); - $needsParity = (($this->uRShift($b, 7) ^ $this->uRShift($b, 6) ^ $this->uRShift($b, 5) + $needsParity = 0 == (($this->uRShift($b, 7) ^ $this->uRShift($b, 6) ^ $this->uRShift($b, 5) ^ $this->uRShift($b, 4) ^ $this->uRShift($b, 3) ^ $this->uRShift($b, 2) - ^ $this->uRShift($b, 1)) & 0x01) == 0; + ^ $this->uRShift($b, 1)) & 0x01); list($high, $low) = str_split($v); if ($needsParity) { @@ -458,7 +449,7 @@ protected function createDesKey($key) } } - return $this->hex2bin(implode('', $material)); + return hex2bin(implode('', $material)); } /** HELPER FUNCTIONS */ @@ -493,7 +484,7 @@ protected function readSecurityBuffer($value) $length = floor(hexdec(substr($value, 0, 4)) / 256) * 2; $offset = floor(hexdec(substr($value, 8, 4)) / 256) * 2; - return array($length, $offset); + return [$length, $offset]; } /** @@ -519,7 +510,7 @@ protected function castToByte($v) */ protected function uRShift($a, $b) { - if ($b == 0) { + if (0 == $b) { return $a; } @@ -538,7 +529,7 @@ protected function uRShift($a, $b) protected function createByte($input, $bytes = 4, $isHex = true) { if ($isHex) { - $byte = $this->hex2bin(str_pad($input, $bytes * 2, '00')); + $byte = hex2bin(str_pad($input, $bytes * 2, '00')); } else { $byte = str_pad($input, $bytes, "\x00"); } @@ -546,24 +537,6 @@ protected function createByte($input, $bytes = 4, $isHex = true) return $byte; } - /** - * Create random bytes. - * - * @param $length - * - * @return string - */ - protected function getRandomBytes($length) - { - $bytes = openssl_random_pseudo_bytes($length, $strong); - - if (false !== $bytes && true === $strong) { - return $bytes; - } - - throw new RuntimeException('OpenSSL did not produce a secure random number.'); - } - /** ENCRYPTION ALGORITHMS */ /** @@ -576,8 +549,7 @@ protected function getRandomBytes($length) */ protected function desEncrypt($value, $key) { - // 1 == OPENSSL_RAW_DATA - but constant is only available as of PHP 5.4. - return substr(openssl_encrypt($value, 'DES-ECB', $key, 1), 0, 8); + return substr(openssl_encrypt($value, 'DES-ECB', $key, \OPENSSL_RAW_DATA), 0, 8); } /** @@ -609,13 +581,13 @@ protected function md5Encrypt($key, $msg) * * @return string * - * @see http://php.net/manual/en/ref.hash.php + * @see https://secure.php.net/manual/en/ref.hash.php */ protected function md4Encrypt($input) { $input = $this->convertTo16bit($input); - return function_exists('hash') ? $this->hex2bin(hash('md4', $input)) : mhash(MHASH_MD4, $input); + return function_exists('hash') ? hex2bin(hash('md4', $input)) : mhash(MHASH_MD4, $input); } /** @@ -630,22 +602,6 @@ protected function convertTo16bit($input) return iconv('UTF-8', 'UTF-16LE', $input); } - /** - * Hex2bin replacement for < PHP 5.4. - * - * @param string $hex - * - * @return string Binary - */ - protected function hex2bin($hex) - { - if (function_exists('hex2bin')) { - return hex2bin($hex); - } else { - return pack('H*', $hex); - } - } - /** * @param string $message */ @@ -656,8 +612,8 @@ protected function debug($message) echo substr($message, 0, 16)." NTLMSSP Signature
\n"; echo $messageId." Type Indicator
\n"; - if ($messageId == '02000000') { - $map = array( + if ('02000000' == $messageId) { + $map = [ 'Challenge', 'Context', 'Target Information Security Buffer', @@ -668,14 +624,14 @@ protected function debug($message) 'DNS Server Name', 'BLOB', 'Target Information Terminator', - ); + ]; - $data = $this->parseMessage2($this->hex2bin($message)); + $data = $this->parseMessage2(hex2bin($message)); foreach ($map as $key => $value) { echo bin2hex($data[$key]).' - '.$data[$key].' ||| '.$value."
\n"; } - } elseif ($messageId == '03000000') { + } elseif ('03000000' == $messageId) { $i = 0; $data[$i++] = substr($message, 24, 16); list($lmLength, $lmOffset) = $this->readSecurityBuffer($data[$i - 1]); @@ -700,7 +656,7 @@ protected function debug($message) $data[$i++] = substr($message, $lmOffset, $lmLength); $data[$i] = substr($message, $ntmlOffset, $ntmlLength); - $map = array( + $map = [ 'LM Response Security Buffer', 'NTLM Response Security Buffer', 'Target Name Security Buffer', @@ -713,10 +669,10 @@ protected function debug($message) 'Workstation Name Data', 'LM Response Data', 'NTLM Response Data', - ); + ]; foreach ($map as $key => $value) { - echo $data[$key].' - '.$this->hex2bin($data[$key]).' ||| '.$value."
\n"; + echo $data[$key].' - '.hex2bin($data[$key]).' ||| '.$value."
\n"; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php index 43219f9..1ff961c 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php @@ -26,25 +26,19 @@ public function getAuthKeyword() } /** - * Try to authenticate the user with $username and $password. - * - * @param Swift_Transport_SmtpAgent $agent - * @param string $username - * @param string $password - * - * @return bool + * {@inheritdoc} */ public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password) { try { $message = base64_encode($username.chr(0).$username.chr(0).$password); - $agent->executeCommand(sprintf("AUTH PLAIN %s\r\n", $message), array(235)); + $agent->executeCommand(sprintf("AUTH PLAIN %s\r\n", $message), [235]); return true; } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", array(250)); + $agent->executeCommand("RSET\r\n", [250]); - return false; + throw $e; } } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php index ca35e7b..859f22f 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/XOAuth2Authenticator.php @@ -13,7 +13,7 @@ * * Example: * - * $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 587, 'tls') + * $transport = (new Swift_SmtpTransport('smtp.gmail.com', 587, 'tls')) * ->setAuthMode('XOAUTH2') * ->setUsername('YOUR_EMAIL_ADDRESS') * ->setPassword('YOUR_ACCESS_TOKEN'); @@ -36,25 +36,19 @@ public function getAuthKeyword() } /** - * Try to authenticate the user with $email and $token. - * - * @param Swift_Transport_SmtpAgent $agent - * @param string $email - * @param string $token - * - * @return bool + * {@inheritdoc} */ public function authenticate(Swift_Transport_SmtpAgent $agent, $email, $token) { try { $param = $this->constructXOAuth2Params($email, $token); - $agent->executeCommand('AUTH XOAUTH2 '.$param."\r\n", array(235)); + $agent->executeCommand('AUTH XOAUTH2 '.$param."\r\n", [235]); return true; } catch (Swift_TransportException $e) { - $agent->executeCommand("RSET\r\n", array(250)); + $agent->executeCommand("RSET\r\n", [250]); - return false; + throw $e; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php index cb36133..3733420 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php @@ -9,7 +9,7 @@ */ /** - * An ESMTP handler for AUTH support. + * An ESMTP handler for AUTH support (RFC 5248). * * @author Chris Corbyn */ @@ -20,35 +20,35 @@ class Swift_Transport_Esmtp_AuthHandler implements Swift_Transport_EsmtpHandler * * @var Swift_Transport_Esmtp_Authenticator[] */ - private $_authenticators = array(); + private $authenticators = []; /** * The username for authentication. * * @var string */ - private $_username; + private $username; /** * The password for authentication. * * @var string */ - private $_password; + private $password; /** * The auth mode for authentication. * * @var string */ - private $_auth_mode; + private $auth_mode; /** * The ESMTP AUTH parameters available. * * @var string[] */ - private $_esmtpParams = array(); + private $esmtpParams = []; /** * Create a new AuthHandler with $authenticators for support. @@ -67,7 +67,7 @@ public function __construct(array $authenticators) */ public function setAuthenticators(array $authenticators) { - $this->_authenticators = $authenticators; + $this->authenticators = $authenticators; } /** @@ -77,7 +77,7 @@ public function setAuthenticators(array $authenticators) */ public function getAuthenticators() { - return $this->_authenticators; + return $this->authenticators; } /** @@ -87,7 +87,7 @@ public function getAuthenticators() */ public function setUsername($username) { - $this->_username = $username; + $this->username = $username; } /** @@ -97,7 +97,7 @@ public function setUsername($username) */ public function getUsername() { - return $this->_username; + return $this->username; } /** @@ -107,7 +107,7 @@ public function getUsername() */ public function setPassword($password) { - $this->_password = $password; + $this->password = $password; } /** @@ -117,7 +117,7 @@ public function setPassword($password) */ public function getPassword() { - return $this->_password; + return $this->password; } /** @@ -127,7 +127,7 @@ public function getPassword() */ public function setAuthMode($mode) { - $this->_auth_mode = $mode; + $this->auth_mode = $mode; } /** @@ -137,13 +137,13 @@ public function setAuthMode($mode) */ public function getAuthMode() { - return $this->_auth_mode; + return $this->auth_mode; } /** * Get the name of the ESMTP extension this handles. * - * @return bool + * @return string */ public function getHandledKeyword() { @@ -157,7 +157,7 @@ public function getHandledKeyword() */ public function setKeywordParams(array $parameters) { - $this->_esmtpParams = $parameters; + $this->esmtpParams = $parameters; } /** @@ -167,21 +167,28 @@ public function setKeywordParams(array $parameters) */ public function afterEhlo(Swift_Transport_SmtpAgent $agent) { - if ($this->_username) { + if ($this->username) { $count = 0; - foreach ($this->_getAuthenticatorsForAgent() as $authenticator) { - if (in_array(strtolower($authenticator->getAuthKeyword()), - array_map('strtolower', $this->_esmtpParams))) { + $errors = []; + foreach ($this->getAuthenticatorsForAgent() as $authenticator) { + if (in_array(strtolower($authenticator->getAuthKeyword()), array_map('strtolower', $this->esmtpParams))) { ++$count; - if ($authenticator->authenticate($agent, $this->_username, $this->_password)) { - return; + try { + if ($authenticator->authenticate($agent, $this->username, $this->password)) { + return; + } + } catch (Swift_TransportException $e) { + // keep the error message, but tries the other authenticators + $errors[] = [$authenticator->getAuthKeyword(), $e->getMessage()]; } } } - throw new Swift_TransportException( - 'Failed to authenticate on SMTP server with username "'. - $this->_username.'" using '.$count.' possible authenticators' - ); + + $message = 'Failed to authenticate on SMTP server with username "'.$this->username.'" using '.$count.' possible authenticators.'; + foreach ($errors as $error) { + $message .= ' Authenticator '.$error[0].' returned '.$error[1].'.'; + } + throw new Swift_TransportException($message); } } @@ -190,7 +197,7 @@ public function afterEhlo(Swift_Transport_SmtpAgent $agent) */ public function getMailParams() { - return array(); + return []; } /** @@ -198,13 +205,13 @@ public function getMailParams() */ public function getRcptParams() { - return array(); + return []; } /** * Not used. */ - public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = array(), &$failedRecipients = null, &$stop = false) + public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) { } @@ -229,7 +236,7 @@ public function getPriorityOver($esmtpKeyword) */ public function exposeMixinMethods() { - return array('setUsername', 'getUsername', 'setPassword', 'getPassword', 'setAuthMode', 'getAuthMode'); + return ['setUsername', 'getUsername', 'setPassword', 'getPassword', 'setAuthMode', 'getAuthMode']; } /** @@ -242,19 +249,17 @@ public function resetState() /** * Returns the authenticator list for the given agent. * - * @param Swift_Transport_SmtpAgent $agent - * * @return array */ - protected function _getAuthenticatorsForAgent() + protected function getAuthenticatorsForAgent() { - if (!$mode = strtolower($this->_auth_mode)) { - return $this->_authenticators; + if (!$mode = strtolower($this->auth_mode)) { + return $this->authenticators; } - foreach ($this->_authenticators as $authenticator) { + foreach ($this->authenticators as $authenticator) { if (strtolower($authenticator->getAuthKeyword()) == $mode) { - return array($authenticator); + return [$authenticator]; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php index 12a9abf..cadfdc6 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php @@ -29,7 +29,9 @@ public function getAuthKeyword(); * @param string $username * @param string $password * - * @return bool + * @return bool true if authentication worked (returning false is deprecated, throw a Swift_TransportException instead) + * + * @throws Swift_TransportException Allows the message to bubble up when authentication was not successful */ public function authenticate(Swift_Transport_SmtpAgent $agent, $username, $password); } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/EightBitMimeHandler.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/EightBitMimeHandler.php new file mode 100644 index 0000000..63f7086 --- /dev/null +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/EightBitMimeHandler.php @@ -0,0 +1,113 @@ +encoding = $encoding; + } + + /** + * Get the name of the ESMTP extension this handles. + * + * @return string + */ + public function getHandledKeyword() + { + return '8BITMIME'; + } + + /** + * Not used. + */ + public function setKeywordParams(array $parameters) + { + } + + /** + * Not used. + */ + public function afterEhlo(Swift_Transport_SmtpAgent $agent) + { + } + + /** + * Get params which are appended to MAIL FROM:<>. + * + * @return string[] + */ + public function getMailParams() + { + return ['BODY='.$this->encoding]; + } + + /** + * Not used. + */ + public function getRcptParams() + { + return []; + } + + /** + * Not used. + */ + public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) + { + } + + /** + * Returns +1, -1 or 0 according to the rules for usort(). + * + * This method is called to ensure extensions can be execute in an appropriate order. + * + * @param string $esmtpKeyword to compare with + * + * @return int + */ + public function getPriorityOver($esmtpKeyword) + { + return 0; + } + + /** + * Not used. + */ + public function exposeMixinMethods() + { + return []; + } + + /** + * Not used. + */ + public function resetState() + { + } +} diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/SmtpUtf8Handler.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/SmtpUtf8Handler.php new file mode 100644 index 0000000..7d0252a --- /dev/null +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/Esmtp/SmtpUtf8Handler.php @@ -0,0 +1,107 @@ +. + * + * @return string[] + */ + public function getMailParams() + { + return ['SMTPUTF8']; + } + + /** + * Not used. + */ + public function getRcptParams() + { + return []; + } + + /** + * Not used. + */ + public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false) + { + } + + /** + * Returns +1, -1 or 0 according to the rules for usort(). + * + * This method is called to ensure extensions can be execute in an appropriate order. + * + * @param string $esmtpKeyword to compare with + * + * @return int + */ + public function getPriorityOver($esmtpKeyword) + { + return 0; + } + + /** + * Not used. + */ + public function exposeMixinMethods() + { + return []; + } + + /** + * Not used. + */ + public function resetState() + { + } +} diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php index c17ef8f..b8ea36e 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php @@ -18,7 +18,7 @@ interface Swift_Transport_EsmtpHandler /** * Get the name of the ESMTP extension this handles. * - * @return bool + * @return string */ public function getHandledKeyword(); @@ -59,7 +59,7 @@ public function getRcptParams(); * @param string[] $failedRecipients to collect failures * @param bool $stop to be set true by-reference if the command is now sent */ - public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = array(), &$failedRecipients = null, &$stop = false); + public function onCommand(Swift_Transport_SmtpAgent $agent, $command, $codes = [], &$failedRecipients = null, &$stop = false); /** * Returns +1, -1 or 0 according to the rules for usort(). diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php index 156e2cf..d1f1c2c 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php @@ -20,21 +20,21 @@ class Swift_Transport_EsmtpTransport extends Swift_Transport_AbstractSmtpTranspo * * @var Swift_Transport_EsmtpHandler[] */ - private $_handlers = array(); + private $handlers = []; /** * ESMTP capabilities. * * @var string[] */ - private $_capabilities = array(); + private $capabilities = []; /** * Connection buffer parameters. * * @var array */ - private $_params = array( + private $params = [ 'protocol' => 'tcp', 'host' => 'localhost', 'port' => 25, @@ -42,32 +42,33 @@ class Swift_Transport_EsmtpTransport extends Swift_Transport_AbstractSmtpTranspo 'blocking' => 1, 'tls' => false, 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET, - 'stream_context_options' => array(), - ); + 'stream_context_options' => [], + ]; /** * Creates a new EsmtpTransport using the given I/O buffer. * - * @param Swift_Transport_IoBuffer $buf * @param Swift_Transport_EsmtpHandler[] $extensionHandlers - * @param Swift_Events_EventDispatcher $dispatcher + * @param string $localDomain */ - public function __construct(Swift_Transport_IoBuffer $buf, array $extensionHandlers, Swift_Events_EventDispatcher $dispatcher) + public function __construct(Swift_Transport_IoBuffer $buf, array $extensionHandlers, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) { - parent::__construct($buf, $dispatcher); + parent::__construct($buf, $dispatcher, $localDomain, $addressEncoder); $this->setExtensionHandlers($extensionHandlers); } /** * Set the host to connect to. * + * Literal IPv6 addresses should be wrapped in square brackets. + * * @param string $host * * @return $this */ public function setHost($host) { - $this->_params['host'] = $host; + $this->params['host'] = $host; return $this; } @@ -79,7 +80,7 @@ public function setHost($host) */ public function getHost() { - return $this->_params['host']; + return $this->params['host']; } /** @@ -91,7 +92,7 @@ public function getHost() */ public function setPort($port) { - $this->_params['port'] = (int) $port; + $this->params['port'] = (int) $port; return $this; } @@ -103,7 +104,7 @@ public function setPort($port) */ public function getPort() { - return $this->_params['port']; + return $this->params['port']; } /** @@ -115,8 +116,8 @@ public function getPort() */ public function setTimeout($timeout) { - $this->_params['timeout'] = (int) $timeout; - $this->_buffer->setParam('timeout', (int) $timeout); + $this->params['timeout'] = (int) $timeout; + $this->buffer->setParam('timeout', (int) $timeout); return $this; } @@ -128,7 +129,7 @@ public function setTimeout($timeout) */ public function getTimeout() { - return $this->_params['timeout']; + return $this->params['timeout']; } /** @@ -142,11 +143,11 @@ public function setEncryption($encryption) { $encryption = strtolower($encryption); if ('tls' == $encryption) { - $this->_params['protocol'] = 'tcp'; - $this->_params['tls'] = true; + $this->params['protocol'] = 'tcp'; + $this->params['tls'] = true; } else { - $this->_params['protocol'] = $encryption; - $this->_params['tls'] = false; + $this->params['protocol'] = $encryption; + $this->params['tls'] = false; } return $this; @@ -159,7 +160,7 @@ public function setEncryption($encryption) */ public function getEncryption() { - return $this->_params['tls'] ? 'tls' : $this->_params['protocol']; + return $this->params['tls'] ? 'tls' : $this->params['protocol']; } /** @@ -171,7 +172,7 @@ public function getEncryption() */ public function setStreamOptions($options) { - $this->_params['stream_context_options'] = $options; + $this->params['stream_context_options'] = $options; return $this; } @@ -183,19 +184,21 @@ public function setStreamOptions($options) */ public function getStreamOptions() { - return $this->_params['stream_context_options']; + return $this->params['stream_context_options']; } /** * Sets the source IP. * + * IPv6 addresses should be wrapped in square brackets. + * * @param string $source * * @return $this */ public function setSourceIp($source) { - $this->_params['sourceIp'] = $source; + $this->params['sourceIp'] = $source; return $this; } @@ -207,7 +210,36 @@ public function setSourceIp($source) */ public function getSourceIp() { - return isset($this->_params['sourceIp']) ? $this->_params['sourceIp'] : null; + return $this->params['sourceIp'] ?? null; + } + + /** + * Sets whether SMTP pipelining is enabled. + * + * By default, support is auto-detected using the PIPELINING SMTP extension. + * Use this function to override that in the unlikely event of compatibility + * issues. + * + * @param bool $enabled + * + * @return $this + */ + public function setPipelining($enabled) + { + $this->pipelining = $enabled; + + return $this; + } + + /** + * Returns whether SMTP pipelining is enabled. + * + * @return bool|null a boolean if pipelining is explicitly enabled or disabled, + * or null if support is auto-detected. + */ + public function getPipelining() + { + return $this->pipelining; } /** @@ -219,14 +251,15 @@ public function getSourceIp() */ public function setExtensionHandlers(array $handlers) { - $assoc = array(); + $assoc = []; foreach ($handlers as $handler) { $assoc[$handler->getHandledKeyword()] = $handler; } - - @uasort($assoc, array($this, '_sortHandlers')); - $this->_handlers = $assoc; - $this->_setHandlerParams(); + uasort($assoc, function ($a, $b) { + return $a->getPriorityOver($b->getHandledKeyword()); + }); + $this->handlers = $assoc; + $this->setHandlerParams(); return $this; } @@ -238,7 +271,7 @@ public function setExtensionHandlers(array $handlers) */ public function getExtensionHandlers() { - return array_values($this->_handlers); + return array_values($this->handlers); } /** @@ -250,15 +283,17 @@ public function getExtensionHandlers() * @param string $command * @param int[] $codes * @param string[] $failures An array of failures by-reference + * @param bool $pipeline Do not wait for response + * @param string $address The address, if command is RCPT TO. * - * @return string + * @return string|null The server response, or null if pipelining is enabled */ - public function executeCommand($command, $codes = array(), &$failures = null) + public function executeCommand($command, $codes = [], &$failures = null, $pipeline = false, $address = null) { $failures = (array) $failures; $stopSignal = false; $response = null; - foreach ($this->_getActiveHandlers() as $handler) { + foreach ($this->getActiveHandlers() as $handler) { $response = $handler->onCommand( $this, $command, $codes, $failures, $stopSignal ); @@ -267,19 +302,19 @@ public function executeCommand($command, $codes = array(), &$failures = null) } } - return parent::executeCommand($command, $codes, $failures); + return parent::executeCommand($command, $codes, $failures, $pipeline, $address); } /** Mixin handling method for ESMTP handlers */ public function __call($method, $args) { - foreach ($this->_handlers as $handler) { + foreach ($this->handlers as $handler) { if (in_array(strtolower($method), array_map('strtolower', (array) $handler->exposeMixinMethods()) )) { - $return = call_user_func_array(array($handler, $method), $args); + $return = call_user_func_array([$handler, $method], $args); // Allow fluid method calls - if (null === $return && substr($method, 0, 3) == 'set') { + if (null === $return && 'set' == substr($method, 0, 3)) { return $this; } else { return $return; @@ -290,81 +325,87 @@ public function __call($method, $args) } /** Get the params to initialize the buffer */ - protected function _getBufferParams() + protected function getBufferParams() { - return $this->_params; + return $this->params; } /** Overridden to perform EHLO instead */ - protected function _doHeloCommand() + protected function doHeloCommand() { try { $response = $this->executeCommand( - sprintf("EHLO %s\r\n", $this->_domain), array(250) + sprintf("EHLO %s\r\n", $this->domain), [250] ); } catch (Swift_TransportException $e) { - return parent::_doHeloCommand(); + return parent::doHeloCommand(); } - if ($this->_params['tls']) { + if ($this->params['tls']) { try { - $this->executeCommand("STARTTLS\r\n", array(220)); + $this->executeCommand("STARTTLS\r\n", [220]); - if (!$this->_buffer->startTLS()) { + if (!$this->buffer->startTLS()) { throw new Swift_TransportException('Unable to connect with TLS encryption'); } try { $response = $this->executeCommand( - sprintf("EHLO %s\r\n", $this->_domain), array(250) + sprintf("EHLO %s\r\n", $this->domain), [250] ); } catch (Swift_TransportException $e) { - return parent::_doHeloCommand(); + return parent::doHeloCommand(); } } catch (Swift_TransportException $e) { - $this->_throwException($e); + $this->throwException($e); } } - $this->_capabilities = $this->_getCapabilities($response); - $this->_setHandlerParams(); - foreach ($this->_getActiveHandlers() as $handler) { + $this->capabilities = $this->getCapabilities($response); + if (!isset($this->pipelining)) { + $this->pipelining = isset($this->capabilities['PIPELINING']); + } + + $this->setHandlerParams(); + foreach ($this->getActiveHandlers() as $handler) { $handler->afterEhlo($this); } } /** Overridden to add Extension support */ - protected function _doMailFromCommand($address) + protected function doMailFromCommand($address) { - $handlers = $this->_getActiveHandlers(); - $params = array(); + $address = $this->addressEncoder->encodeString($address); + $handlers = $this->getActiveHandlers(); + $params = []; foreach ($handlers as $handler) { $params = array_merge($params, (array) $handler->getMailParams()); } $paramStr = !empty($params) ? ' '.implode(' ', $params) : ''; $this->executeCommand( - sprintf("MAIL FROM:<%s>%s\r\n", $address, $paramStr), array(250) + sprintf("MAIL FROM:<%s>%s\r\n", $address, $paramStr), [250], $failures, true ); } /** Overridden to add Extension support */ - protected function _doRcptToCommand($address) + protected function doRcptToCommand($address) { - $handlers = $this->_getActiveHandlers(); - $params = array(); + $address = $this->addressEncoder->encodeString($address); + $handlers = $this->getActiveHandlers(); + $params = []; foreach ($handlers as $handler) { $params = array_merge($params, (array) $handler->getRcptParams()); } $paramStr = !empty($params) ? ' '.implode(' ', $params) : ''; $this->executeCommand( - sprintf("RCPT TO:<%s>%s\r\n", $address, $paramStr), array(250, 251, 252) + sprintf("RCPT TO:<%s>%s\r\n", $address, $paramStr), [250, 251, 252], $failures, true, $address ); } /** Determine ESMTP capabilities by function group */ - private function _getCapabilities($ehloResponse) + private function getCapabilities($ehloResponse) { - $capabilities = array(); + $capabilities = []; $ehloResponse = trim($ehloResponse); $lines = explode("\r\n", $ehloResponse); array_shift($lines); @@ -372,7 +413,7 @@ private function _getCapabilities($ehloResponse) if (preg_match('/^[0-9]{3}[ -]([A-Z0-9-]+)((?:[ =].*)?)$/Di', $line, $matches)) { $keyword = strtoupper($matches[1]); $paramStr = strtoupper(ltrim($matches[2], ' =')); - $params = !empty($paramStr) ? explode(' ', $paramStr) : array(); + $params = !empty($paramStr) ? explode(' ', $paramStr) : []; $capabilities[$keyword] = $params; } } @@ -381,31 +422,25 @@ private function _getCapabilities($ehloResponse) } /** Set parameters which are used by each extension handler */ - private function _setHandlerParams() + private function setHandlerParams() { - foreach ($this->_handlers as $keyword => $handler) { - if (array_key_exists($keyword, $this->_capabilities)) { - $handler->setKeywordParams($this->_capabilities[$keyword]); + foreach ($this->handlers as $keyword => $handler) { + if (array_key_exists($keyword, $this->capabilities)) { + $handler->setKeywordParams($this->capabilities[$keyword]); } } } /** Get ESMTP handlers which are currently ok to use */ - private function _getActiveHandlers() + private function getActiveHandlers() { - $handlers = array(); - foreach ($this->_handlers as $keyword => $handler) { - if (array_key_exists($keyword, $this->_capabilities)) { + $handlers = []; + foreach ($this->handlers as $keyword => $handler) { + if (array_key_exists($keyword, $this->capabilities)) { $handlers[] = $handler; } } return $handlers; } - - /** Custom sort for extension handler ordering */ - private function _sortHandlers($a, $b) - { - return $a->getPriorityOver($b->getHandledKeyword()); - } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php index 311a0f2..21bce4b 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php @@ -20,7 +20,7 @@ class Swift_Transport_FailoverTransport extends Swift_Transport_LoadBalancedTran * * @var Swift_Transport */ - private $_currentTransport; + private $currentTransport; // needed as __construct is called from elsewhere explicitly public function __construct() @@ -28,41 +28,58 @@ public function __construct() parent::__construct(); } + /** + * {@inheritdoc} + */ + public function ping() + { + $maxTransports = count($this->transports); + for ($i = 0; $i < $maxTransports + && $transport = $this->getNextTransport(); ++$i) { + if ($transport->ping()) { + return true; + } else { + $this->killCurrentTransport(); + } + } + + return count($this->transports) > 0; + } + /** * Send the given Message. * * Recipient/sender data will be retrieved from the Message API. * The return value is the number of recipients who were accepted for delivery. * - * @param Swift_Mime_Message $message - * @param string[] $failedRecipients An array of failures by-reference + * @param string[] $failedRecipients An array of failures by-reference * * @return int */ - public function send(Swift_Mime_Message $message, &$failedRecipients = null) + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) { - $maxTransports = count($this->_transports); + $maxTransports = count($this->transports); $sent = 0; - $this->_lastUsedTransport = null; + $this->lastUsedTransport = null; for ($i = 0; $i < $maxTransports - && $transport = $this->_getNextTransport(); ++$i) { + && $transport = $this->getNextTransport(); ++$i) { try { if (!$transport->isStarted()) { $transport->start(); } if ($sent = $transport->send($message, $failedRecipients)) { - $this->_lastUsedTransport = $transport; + $this->lastUsedTransport = $transport; return $sent; } } catch (Swift_TransportException $e) { - $this->_killCurrentTransport(); + $this->killCurrentTransport(); } } - if (count($this->_transports) == 0) { + if (0 == count($this->transports)) { throw new Swift_TransportException( 'All Transports in FailoverTransport failed, or no Transports available' ); @@ -71,18 +88,18 @@ public function send(Swift_Mime_Message $message, &$failedRecipients = null) return $sent; } - protected function _getNextTransport() + protected function getNextTransport() { - if (!isset($this->_currentTransport)) { - $this->_currentTransport = parent::_getNextTransport(); + if (!isset($this->currentTransport)) { + $this->currentTransport = parent::getNextTransport(); } - return $this->_currentTransport; + return $this->currentTransport; } - protected function _killCurrentTransport() + protected function killCurrentTransport() { - $this->_currentTransport = null; - parent::_killCurrentTransport(); + $this->currentTransport = null; + parent::killCurrentTransport(); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php index e2adc56..a12ce8d 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php @@ -20,21 +20,21 @@ class Swift_Transport_LoadBalancedTransport implements Swift_Transport * * @var Swift_Transport[] */ - private $_deadTransports = array(); + private $deadTransports = []; /** * The Transports which are used in rotation. * * @var Swift_Transport[] */ - protected $_transports = array(); + protected $transports = []; /** * The Transport used in the last successful send operation. * * @var Swift_Transport */ - protected $_lastUsedTransport = null; + protected $lastUsedTransport = null; // needed as __construct is called from elsewhere explicitly public function __construct() @@ -48,8 +48,8 @@ public function __construct() */ public function setTransports(array $transports) { - $this->_transports = $transports; - $this->_deadTransports = array(); + $this->transports = $transports; + $this->deadTransports = []; } /** @@ -59,7 +59,7 @@ public function setTransports(array $transports) */ public function getTransports() { - return array_merge($this->_transports, $this->_deadTransports); + return array_merge($this->transports, $this->deadTransports); } /** @@ -69,7 +69,7 @@ public function getTransports() */ public function getLastUsedTransport() { - return $this->_lastUsedTransport; + return $this->lastUsedTransport; } /** @@ -79,7 +79,7 @@ public function getLastUsedTransport() */ public function isStarted() { - return count($this->_transports) > 0; + return count($this->transports) > 0; } /** @@ -87,7 +87,7 @@ public function isStarted() */ public function start() { - $this->_transports = array_merge($this->_transports, $this->_deadTransports); + $this->transports = array_merge($this->transports, $this->deadTransports); } /** @@ -95,44 +95,57 @@ public function start() */ public function stop() { - foreach ($this->_transports as $transport) { + foreach ($this->transports as $transport) { $transport->stop(); } } + /** + * {@inheritdoc} + */ + public function ping() + { + foreach ($this->transports as $transport) { + if (!$transport->ping()) { + $this->killCurrentTransport(); + } + } + + return count($this->transports) > 0; + } + /** * Send the given Message. * * Recipient/sender data will be retrieved from the Message API. * The return value is the number of recipients who were accepted for delivery. * - * @param Swift_Mime_Message $message - * @param string[] $failedRecipients An array of failures by-reference + * @param string[] $failedRecipients An array of failures by-reference * * @return int */ - public function send(Swift_Mime_Message $message, &$failedRecipients = null) + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) { - $maxTransports = count($this->_transports); + $maxTransports = count($this->transports); $sent = 0; - $this->_lastUsedTransport = null; + $this->lastUsedTransport = null; for ($i = 0; $i < $maxTransports - && $transport = $this->_getNextTransport(); ++$i) { + && $transport = $this->getNextTransport(); ++$i) { try { if (!$transport->isStarted()) { $transport->start(); } if ($sent = $transport->send($message, $failedRecipients)) { - $this->_lastUsedTransport = $transport; + $this->lastUsedTransport = $transport; break; } } catch (Swift_TransportException $e) { - $this->_killCurrentTransport(); + $this->killCurrentTransport(); } } - if (count($this->_transports) == 0) { + if (0 == count($this->transports)) { throw new Swift_TransportException( 'All Transports in LoadBalancedTransport failed, or no Transports available' ); @@ -143,12 +156,10 @@ public function send(Swift_Mime_Message $message, &$failedRecipients = null) /** * Register a plugin. - * - * @param Swift_Events_EventListener $plugin */ public function registerPlugin(Swift_Events_EventListener $plugin) { - foreach ($this->_transports as $transport) { + foreach ($this->transports as $transport) { $transport->registerPlugin($plugin); } } @@ -158,10 +169,10 @@ public function registerPlugin(Swift_Events_EventListener $plugin) * * @return Swift_Transport */ - protected function _getNextTransport() + protected function getNextTransport() { - if ($next = array_shift($this->_transports)) { - $this->_transports[] = $next; + if ($next = array_shift($this->transports)) { + $this->transports[] = $next; } return $next; @@ -170,14 +181,14 @@ protected function _getNextTransport() /** * Tag the currently used (top of stack) transport as dead/useless. */ - protected function _killCurrentTransport() + protected function killCurrentTransport() { - if ($transport = array_pop($this->_transports)) { + if ($transport = array_pop($this->transports)) { try { $transport->stop(); } catch (Exception $e) { } - $this->_deadTransports[] = $transport; + $this->deadTransports[] = $transport; } } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php deleted file mode 100644 index 77489ce..0000000 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php +++ /dev/null @@ -1,32 +0,0 @@ -_invoker = $invoker; - $this->_eventDispatcher = $eventDispatcher; - } - - /** - * Not used. - */ - public function isStarted() - { - return false; - } - - /** - * Not used. - */ - public function start() - { - } - - /** - * Not used. - */ - public function stop() - { - } - - /** - * Set the additional parameters used on the mail() function. - * - * This string is formatted for sprintf() where %s is the sender address. - * - * @param string $params - * - * @return $this - */ - public function setExtraParams($params) - { - $this->_extraParams = $params; - - return $this; - } - - /** - * Get the additional parameters used on the mail() function. - * - * This string is formatted for sprintf() where %s is the sender address. - * - * @return string - */ - public function getExtraParams() - { - return $this->_extraParams; - } - - /** - * Send the given Message. - * - * Recipient/sender data will be retrieved from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * - * @param Swift_Mime_Message $message - * @param string[] $failedRecipients An array of failures by-reference - * - * @return int - */ - public function send(Swift_Mime_Message $message, &$failedRecipients = null) - { - $failedRecipients = (array) $failedRecipients; - - if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) { - $this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); - if ($evt->bubbleCancelled()) { - return 0; - } - } - - $count = ( - count((array) $message->getTo()) - + count((array) $message->getCc()) - + count((array) $message->getBcc()) - ); - - $toHeader = $message->getHeaders()->get('To'); - $subjectHeader = $message->getHeaders()->get('Subject'); - - if (0 === $count) { - $this->_throwException(new Swift_TransportException('Cannot send message without a recipient')); - } - $to = $toHeader ? $toHeader->getFieldBody() : ''; - $subject = $subjectHeader ? $subjectHeader->getFieldBody() : ''; - - $reversePath = $this->_getReversePath($message); - - // Remove headers that would otherwise be duplicated - $message->getHeaders()->remove('To'); - $message->getHeaders()->remove('Subject'); - - $messageStr = $message->toString(); - - if ($toHeader) { - $message->getHeaders()->set($toHeader); - } - $message->getHeaders()->set($subjectHeader); - - // Separate headers from body - if (false !== $endHeaders = strpos($messageStr, "\r\n\r\n")) { - $headers = substr($messageStr, 0, $endHeaders)."\r\n"; //Keep last EOL - $body = substr($messageStr, $endHeaders + 4); - } else { - $headers = $messageStr."\r\n"; - $body = ''; - } - - unset($messageStr); - - if ("\r\n" != PHP_EOL) { - // Non-windows (not using SMTP) - $headers = str_replace("\r\n", PHP_EOL, $headers); - $subject = str_replace("\r\n", PHP_EOL, $subject); - $body = str_replace("\r\n", PHP_EOL, $body); - $to = str_replace("\r\n", PHP_EOL, $to); - } else { - // Windows, using SMTP - $headers = str_replace("\r\n.", "\r\n..", $headers); - $subject = str_replace("\r\n.", "\r\n..", $subject); - $body = str_replace("\r\n.", "\r\n..", $body); - $to = str_replace("\r\n.", "\r\n..", $to); - } - - if ($this->_invoker->mail($to, $subject, $body, $headers, $this->_formatExtraParams($this->_extraParams, $reversePath))) { - if ($evt) { - $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); - $evt->setFailedRecipients($failedRecipients); - $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } - } else { - $failedRecipients = array_merge( - $failedRecipients, - array_keys((array) $message->getTo()), - array_keys((array) $message->getCc()), - array_keys((array) $message->getBcc()) - ); - - if ($evt) { - $evt->setResult(Swift_Events_SendEvent::RESULT_FAILED); - $evt->setFailedRecipients($failedRecipients); - $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } - - $message->generateId(); - - $count = 0; - } - - return $count; - } - - /** - * Register a plugin. - * - * @param Swift_Events_EventListener $plugin - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - $this->_eventDispatcher->bindEventListener($plugin); - } - - /** Throw a TransportException, first sending it to any listeners */ - protected function _throwException(Swift_TransportException $e) - { - if ($evt = $this->_eventDispatcher->createTransportExceptionEvent($this, $e)) { - $this->_eventDispatcher->dispatchEvent($evt, 'exceptionThrown'); - if (!$evt->bubbleCancelled()) { - throw $e; - } - } else { - throw $e; - } - } - - /** Determine the best-use reverse path for this message */ - private function _getReversePath(Swift_Mime_Message $message) - { - $return = $message->getReturnPath(); - $sender = $message->getSender(); - $from = $message->getFrom(); - $path = null; - if (!empty($return)) { - $path = $return; - } elseif (!empty($sender)) { - $keys = array_keys($sender); - $path = array_shift($keys); - } elseif (!empty($from)) { - $keys = array_keys($from); - $path = array_shift($keys); - } - - return $path; - } - - /** - * Fix CVE-2016-10074 by disallowing potentially unsafe shell characters. - * - * Note that escapeshellarg and escapeshellcmd are inadequate for our purposes, especially on Windows. - * - * @param string $string The string to be validated - * - * @return bool - */ - private function _isShellSafe($string) - { - // Future-proof - if (escapeshellcmd($string) !== $string || !in_array(escapeshellarg($string), array("'$string'", "\"$string\""))) { - return false; - } - - $length = strlen($string); - for ($i = 0; $i < $length; ++$i) { - $c = $string[$i]; - // All other characters have a special meaning in at least one common shell, including = and +. - // Full stop (.) has a special meaning in cmd.exe, but its impact should be negligible here. - // Note that this does permit non-Latin alphanumeric characters based on the current locale. - if (!ctype_alnum($c) && strpos('@_-.', $c) === false) { - return false; - } - } - - return true; - } - - /** - * Return php mail extra params to use for invoker->mail. - * - * @param $extraParams - * @param $reversePath - * - * @return string|null - */ - private function _formatExtraParams($extraParams, $reversePath) - { - if (false !== strpos($extraParams, '-f%s')) { - if (empty($reversePath) || false === $this->_isShellSafe($reversePath)) { - $extraParams = str_replace('-f%s', '', $extraParams); - } else { - $extraParams = sprintf($extraParams, $reversePath); - } - } - - return !empty($extraParams) ? $extraParams : null; - } -} diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/NullTransport.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/NullTransport.php index ad20e0e..5934ca9 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/NullTransport.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/NullTransport.php @@ -16,14 +16,14 @@ class Swift_Transport_NullTransport implements Swift_Transport { /** The event dispatcher from the plugin API */ - private $_eventDispatcher; + private $eventDispatcher; /** * Constructor. */ public function __construct(Swift_Events_EventDispatcher $eventDispatcher) { - $this->_eventDispatcher = $eventDispatcher; + $this->eventDispatcher = $eventDispatcher; } /** @@ -50,18 +50,25 @@ public function stop() { } + /** + * {@inheritdoc} + */ + public function ping() + { + return true; + } + /** * Sends the given message. * - * @param Swift_Mime_Message $message - * @param string[] $failedRecipients An array of failures by-reference + * @param string[] $failedRecipients An array of failures by-reference * * @return int The number of sent emails */ - public function send(Swift_Mime_Message $message, &$failedRecipients = null) + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) { - if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) { - $this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); if ($evt->bubbleCancelled()) { return 0; } @@ -69,7 +76,7 @@ public function send(Swift_Mime_Message $message, &$failedRecipients = null) if ($evt) { $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); - $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); } $count = ( @@ -83,11 +90,9 @@ public function send(Swift_Mime_Message $message, &$failedRecipients = null) /** * Register a plugin. - * - * @param Swift_Events_EventListener $plugin */ public function registerPlugin(Swift_Events_EventListener $plugin) { - $this->_eventDispatcher->bindEventListener($plugin); + $this->eventDispatcher->bindEventListener($plugin); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php index 6430d5f..7f0476a 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php @@ -24,22 +24,21 @@ class Swift_Transport_SendmailTransport extends Swift_Transport_AbstractSmtpTran * * @var array */ - private $_params = array( + private $params = [ 'timeout' => 30, 'blocking' => 1, 'command' => '/usr/sbin/sendmail -bs', 'type' => Swift_Transport_IoBuffer::TYPE_PROCESS, - ); + ]; /** * Create a new SendmailTransport with $buf for I/O. * - * @param Swift_Transport_IoBuffer $buf - * @param Swift_Events_EventDispatcher $dispatcher + * @param string $localDomain */ - public function __construct(Swift_Transport_IoBuffer $buf, Swift_Events_EventDispatcher $dispatcher) + public function __construct(Swift_Transport_IoBuffer $buf, Swift_Events_EventDispatcher $dispatcher, $localDomain = '127.0.0.1', Swift_AddressEncoder $addressEncoder = null) { - parent::__construct($buf, $dispatcher); + parent::__construct($buf, $dispatcher, $localDomain, $addressEncoder); } /** @@ -68,7 +67,7 @@ public function start() */ public function setCommand($command) { - $this->_params['command'] = $command; + $this->params['command'] = $command; return $this; } @@ -80,7 +79,7 @@ public function setCommand($command) */ public function getCommand() { - return $this->_params['command']; + return $this->params['command']; } /** @@ -92,12 +91,11 @@ public function getCommand() * NOTE: If using 'sendmail -t' you will not be aware of any failures until * they bounce (i.e. send() will always return 100% success). * - * @param Swift_Mime_Message $message - * @param string[] $failedRecipients An array of failures by-reference + * @param string[] $failedRecipients An array of failures by-reference * * @return int */ - public function send(Swift_Mime_Message $message, &$failedRecipients = null) + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) { $failedRecipients = (array) $failedRecipients; $command = $this->getCommand(); @@ -105,23 +103,23 @@ public function send(Swift_Mime_Message $message, &$failedRecipients = null) $count = 0; if (false !== strpos($command, ' -t')) { - if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) { - $this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); if ($evt->bubbleCancelled()) { return 0; } } if (false === strpos($command, ' -f')) { - $command .= ' -f'.escapeshellarg($this->_getReversePath($message)); + $command .= ' -f'.escapeshellarg($this->getReversePath($message)); } - $buffer->initialize(array_merge($this->_params, array('command' => $command))); + $buffer->initialize(array_merge($this->params, ['command' => $command])); if (false === strpos($command, ' -i') && false === strpos($command, ' -oi')) { - $buffer->setWriteTranslations(array("\r\n" => "\n", "\n." => "\n..")); + $buffer->setWriteTranslations(["\r\n" => "\n", "\n." => "\n.."]); } else { - $buffer->setWriteTranslations(array("\r\n" => "\n")); + $buffer->setWriteTranslations(["\r\n" => "\n"]); } $count = count((array) $message->getTo()) @@ -130,20 +128,20 @@ public function send(Swift_Mime_Message $message, &$failedRecipients = null) ; $message->toByteStream($buffer); $buffer->flushBuffers(); - $buffer->setWriteTranslations(array()); + $buffer->setWriteTranslations([]); $buffer->terminate(); if ($evt) { $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); $evt->setFailedRecipients($failedRecipients); - $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); } $message->generateId(); } elseif (false !== strpos($command, ' -bs')) { $count = parent::send($message, $failedRecipients); } else { - $this->_throwException(new Swift_TransportException( + $this->throwException(new Swift_TransportException( 'Unsupported sendmail command flags ['.$command.']. '. 'Must be one of "-bs" or "-t" but can include additional flags.' )); @@ -153,8 +151,8 @@ public function send(Swift_Mime_Message $message, &$failedRecipients = null) } /** Get the params to initialize the buffer */ - protected function _getBufferParams() + protected function getBufferParams() { - return $this->_params; + return $this->params; } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php deleted file mode 100644 index 4cab66b..0000000 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php +++ /dev/null @@ -1,39 +0,0 @@ -_eventDispatcher = $eventDispatcher; - $this->_spool = $spool; + $this->eventDispatcher = $eventDispatcher; + $this->spool = $spool; } /** * Sets the spool object. * - * @param Swift_Spool $spool - * * @return $this */ public function setSpool(Swift_Spool $spool) { - $this->_spool = $spool; + $this->spool = $spool; return $this; } @@ -51,7 +49,7 @@ public function setSpool(Swift_Spool $spool) */ public function getSpool() { - return $this->_spool; + return $this->spool; } /** @@ -78,28 +76,35 @@ public function stop() { } + /** + * {@inheritdoc} + */ + public function ping() + { + return true; + } + /** * Sends the given message. * - * @param Swift_Mime_Message $message - * @param string[] $failedRecipients An array of failures by-reference + * @param string[] $failedRecipients An array of failures by-reference * * @return int The number of sent e-mail's */ - public function send(Swift_Mime_Message $message, &$failedRecipients = null) + public function send(Swift_Mime_SimpleMessage $message, &$failedRecipients = null) { - if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) { - $this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt = $this->eventDispatcher->createSendEvent($this, $message)) { + $this->eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); if ($evt->bubbleCancelled()) { return 0; } } - $success = $this->_spool->queueMessage($message); + $success = $this->spool->queueMessage($message); if ($evt) { $evt->setResult($success ? Swift_Events_SendEvent::RESULT_SPOOLED : Swift_Events_SendEvent::RESULT_FAILED); - $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + $this->eventDispatcher->dispatchEvent($evt, 'sendPerformed'); } return 1; @@ -107,11 +112,9 @@ public function send(Swift_Mime_Message $message, &$failedRecipients = null) /** * Register a plugin. - * - * @param Swift_Events_EventListener $plugin */ public function registerPlugin(Swift_Events_EventListener $plugin) { - $this->_eventDispatcher->bindEventListener($plugin); + $this->eventDispatcher->bindEventListener($plugin); } } diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php index 3a9fe76..ab17f5c 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php @@ -11,55 +11,51 @@ /** * A generic IoBuffer implementation supporting remote sockets and local processes. * - * @author Chris Corbyn + * @author Chris Corbyn */ class Swift_Transport_StreamBuffer extends Swift_ByteStream_AbstractFilterableInputStream implements Swift_Transport_IoBuffer { /** A primary socket */ - private $_stream; + private $stream; /** The input stream */ - private $_in; + private $in; /** The output stream */ - private $_out; + private $out; /** Buffer initialization parameters */ - private $_params = array(); + private $params = []; /** The ReplacementFilterFactory */ - private $_replacementFactory; + private $replacementFactory; /** Translations performed on data being streamed into the buffer */ - private $_translations = array(); + private $translations = []; /** * Create a new StreamBuffer using $replacementFactory for transformations. - * - * @param Swift_ReplacementFilterFactory $replacementFactory */ public function __construct(Swift_ReplacementFilterFactory $replacementFactory) { - $this->_replacementFactory = $replacementFactory; + $this->replacementFactory = $replacementFactory; } /** * Perform any initialization needed, using the given $params. * * Parameters will vary depending upon the type of IoBuffer used. - * - * @param array $params */ public function initialize(array $params) { - $this->_params = $params; + $this->params = $params; switch ($params['type']) { case self::TYPE_PROCESS: - $this->_establishProcessConnection(); + $this->establishProcessConnection(); break; case self::TYPE_SOCKET: default: - $this->_establishSocketConnection(); + $this->establishSocketConnection(); break; } } @@ -72,21 +68,21 @@ public function initialize(array $params) */ public function setParam($param, $value) { - if (isset($this->_stream)) { + if (isset($this->stream)) { switch ($param) { case 'timeout': - if ($this->_stream) { - stream_set_timeout($this->_stream, $value); + if ($this->stream) { + stream_set_timeout($this->stream, $value); } break; case 'blocking': - if ($this->_stream) { - stream_set_blocking($this->_stream, 1); + if ($this->stream) { + stream_set_blocking($this->stream, 1); } } } - $this->_params[$param] = $value; + $this->params[$param] = $value; } public function startTLS() @@ -95,12 +91,7 @@ public function startTLS() // To support modern tls we allow explicit tls1.0, tls1.1, tls1.2 // Ssl3 and older are not allowed because they are vulnerable // @TODO make tls arguments configurable - $cryptoType = STREAM_CRYPTO_METHOD_TLS_CLIENT; - if (PHP_VERSION_ID >= 50600) { - $cryptoType = STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT; - } - - return stream_socket_enable_crypto($this->_stream, true, $cryptoType); + return stream_socket_enable_crypto($this->stream, true, STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT | STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT); } /** @@ -108,22 +99,22 @@ public function startTLS() */ public function terminate() { - if (isset($this->_stream)) { - switch ($this->_params['type']) { + if (isset($this->stream)) { + switch ($this->params['type']) { case self::TYPE_PROCESS: - fclose($this->_in); - fclose($this->_out); - proc_close($this->_stream); + fclose($this->in); + fclose($this->out); + proc_close($this->stream); break; case self::TYPE_SOCKET: default: - fclose($this->_stream); + fclose($this->stream); break; } } - $this->_stream = null; - $this->_out = null; - $this->_in = null; + $this->stream = null; + $this->out = null; + $this->in = null; } /** @@ -136,19 +127,19 @@ public function terminate() */ public function setWriteTranslations(array $replacements) { - foreach ($this->_translations as $search => $replace) { + foreach ($this->translations as $search => $replace) { if (!isset($replacements[$search])) { $this->removeFilter($search); - unset($this->_translations[$search]); + unset($this->translations[$search]); } } foreach ($replacements as $search => $replace) { - if (!isset($this->_translations[$search])) { + if (!isset($this->translations[$search])) { $this->addFilter( - $this->_replacementFactory->createFilter($search, $replace), $search + $this->replacementFactory->createFilter($search, $replace), $search ); - $this->_translations[$search] = true; + $this->translations[$search] = true; } } } @@ -161,20 +152,20 @@ public function setWriteTranslations(array $replacements) * * @param int $sequence of last write to scan from * - * @throws Swift_IoException - * * @return string + * + * @throws Swift_IoException */ public function readLine($sequence) { - if (isset($this->_out) && !feof($this->_out)) { - $line = fgets($this->_out); - if (strlen($line) == 0) { - $metas = stream_get_meta_data($this->_out); + if (isset($this->out) && !feof($this->out)) { + $line = fgets($this->out); + if (0 == strlen($line)) { + $metas = stream_get_meta_data($this->out); if ($metas['timed_out']) { throw new Swift_IoException( 'Connection to '. - $this->_getReadConnectionDescription(). + $this->getReadConnectionDescription(). ' Timed Out' ); } @@ -193,20 +184,20 @@ public function readLine($sequence) * * @param int $length * - * @throws Swift_IoException - * * @return string|bool + * + * @throws Swift_IoException */ public function read($length) { - if (isset($this->_out) && !feof($this->_out)) { - $ret = fread($this->_out, $length); - if (strlen($ret) == 0) { - $metas = stream_get_meta_data($this->_out); + if (isset($this->out) && !feof($this->out)) { + $ret = fread($this->out, $length); + if (0 == strlen($ret)) { + $metas = stream_get_meta_data($this->out); if ($metas['timed_out']) { throw new Swift_IoException( 'Connection to '. - $this->_getReadConnectionDescription(). + $this->getReadConnectionDescription(). ' Timed Out' ); } @@ -222,22 +213,22 @@ public function setReadPointer($byteOffset) } /** Flush the stream contents */ - protected function _flush() + protected function flush() { - if (isset($this->_in)) { - fflush($this->_in); + if (isset($this->in)) { + fflush($this->in); } } /** Write this bytes to the stream */ - protected function _commit($bytes) + protected function doCommit($bytes) { - if (isset($this->_in)) { + if (isset($this->in)) { $bytesToWrite = strlen($bytes); $totalBytesWritten = 0; while ($totalBytesWritten < $bytesToWrite) { - $bytesWritten = fwrite($this->_in, substr($bytes, $totalBytesWritten)); + $bytesWritten = fwrite($this->in, substr($bytes, $totalBytesWritten)); if (false === $bytesWritten || 0 === $bytesWritten) { break; } @@ -246,7 +237,7 @@ protected function _commit($bytes) } if ($totalBytesWritten > 0) { - return ++$this->_sequence; + return ++$this->sequence; } } } @@ -254,78 +245,79 @@ protected function _commit($bytes) /** * Establishes a connection to a remote server. */ - private function _establishSocketConnection() + private function establishSocketConnection() { - $host = $this->_params['host']; - if (!empty($this->_params['protocol'])) { - $host = $this->_params['protocol'].'://'.$host; + $host = $this->params['host']; + if (!empty($this->params['protocol'])) { + $host = $this->params['protocol'].'://'.$host; } $timeout = 15; - if (!empty($this->_params['timeout'])) { - $timeout = $this->_params['timeout']; + if (!empty($this->params['timeout'])) { + $timeout = $this->params['timeout']; } - $options = array(); - if (!empty($this->_params['sourceIp'])) { - $options['socket']['bindto'] = $this->_params['sourceIp'].':0'; + $options = []; + if (!empty($this->params['sourceIp'])) { + $options['socket']['bindto'] = $this->params['sourceIp'].':0'; } - if (isset($this->_params['stream_context_options'])) { - $options = array_merge($options, $this->_params['stream_context_options']); + + if (isset($this->params['stream_context_options'])) { + $options = array_merge($options, $this->params['stream_context_options']); } $streamContext = stream_context_create($options); - $this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $streamContext); - if (false === $this->_stream) { + $this->stream = @stream_socket_client($host.':'.$this->params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $streamContext); + if (false === $this->stream) { throw new Swift_TransportException( - 'Connection could not be established with host '.$this->_params['host']. + 'Connection could not be established with host '.$this->params['host']. ' ['.$errstr.' #'.$errno.']' ); } - if (!empty($this->_params['blocking'])) { - stream_set_blocking($this->_stream, 1); + if (!empty($this->params['blocking'])) { + stream_set_blocking($this->stream, 1); } else { - stream_set_blocking($this->_stream, 0); + stream_set_blocking($this->stream, 0); } - stream_set_timeout($this->_stream, $timeout); - $this->_in = &$this->_stream; - $this->_out = &$this->_stream; + stream_set_timeout($this->stream, $timeout); + $this->in = &$this->stream; + $this->out = &$this->stream; } /** * Opens a process for input/output. */ - private function _establishProcessConnection() + private function establishProcessConnection() { - $command = $this->_params['command']; - $descriptorSpec = array( - 0 => array('pipe', 'r'), - 1 => array('pipe', 'w'), - 2 => array('pipe', 'w'), - ); - $pipes = array(); - $this->_stream = proc_open($command, $descriptorSpec, $pipes); + $command = $this->params['command']; + $descriptorSpec = [ + 0 => ['pipe', 'r'], + 1 => ['pipe', 'w'], + 2 => ['pipe', 'w'], + ]; + $pipes = []; + $this->stream = proc_open($command, $descriptorSpec, $pipes); stream_set_blocking($pipes[2], 0); if ($err = stream_get_contents($pipes[2])) { throw new Swift_TransportException( 'Process could not be started ['.$err.']' ); } - $this->_in = &$pipes[0]; - $this->_out = &$pipes[1]; + $this->in = &$pipes[0]; + $this->out = &$pipes[1]; } - private function _getReadConnectionDescription() + private function getReadConnectionDescription() { - switch ($this->_params['type']) { + switch ($this->params['type']) { case self::TYPE_PROCESS: - return 'Process '.$this->_params['command']; + return 'Process '.$this->params['command']; break; case self::TYPE_SOCKET: default: - $host = $this->_params['host']; - if (!empty($this->_params['protocol'])) { - $host = $this->_params['protocol'].'://'.$host; + $host = $this->params['host']; + if (!empty($this->params['protocol'])) { + $host = $this->params['protocol'].'://'.$host; } - $host .= ':'.$this->_params['port']; + $host .= ':'.$this->params['port']; return $host; break; diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/TransportException.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/TransportException.php index 4ae2412..c741745 100644 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/TransportException.php +++ b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/TransportException.php @@ -18,9 +18,8 @@ class Swift_TransportException extends Swift_IoException /** * Create a new TransportException with $message. * - * @param string $message - * @param int $code - * @param Exception $previous + * @param string $message + * @param int $code */ public function __construct($message, $code = 0, Exception $previous = null) { diff --git a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Validate.php b/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Validate.php deleted file mode 100644 index e16c212..0000000 --- a/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Validate.php +++ /dev/null @@ -1,43 +0,0 @@ - - */ -class Swift_Validate -{ - /** - * Grammar Object. - * - * @var Swift_Mime_Grammar - */ - private static $grammar = null; - - /** - * Checks if an e-mail address matches the current grammars. - * - * @param string $email - * - * @return bool - */ - public static function email($email) - { - if (self::$grammar === null) { - self::$grammar = Swift_DependencyContainer::getInstance() - ->lookup('mime.grammar'); - } - - return (bool) preg_match( - '/^'.self::$grammar->getDefinition('addr-spec').'$/D', - $email - ); - } -} diff --git a/vendor/swiftmailer/swiftmailer/lib/dependency_maps/cache_deps.php b/vendor/swiftmailer/swiftmailer/lib/dependency_maps/cache_deps.php index 6023448..9d94d77 100644 --- a/vendor/swiftmailer/swiftmailer/lib/dependency_maps/cache_deps.php +++ b/vendor/swiftmailer/swiftmailer/lib/dependency_maps/cache_deps.php @@ -12,11 +12,11 @@ ->register('cache.array') ->asSharedInstanceOf('Swift_KeyCache_ArrayKeyCache') - ->withDependencies(array('cache.inputstream')) + ->withDependencies(['cache.inputstream']) ->register('cache.disk') ->asSharedInstanceOf('Swift_KeyCache_DiskKeyCache') - ->withDependencies(array('cache.inputstream', 'tempdir')) + ->withDependencies(['cache.inputstream', 'tempdir']) ->register('cache.inputstream') ->asNewInstanceOf('Swift_KeyCache_SimpleKeyCacheInputStream') diff --git a/vendor/swiftmailer/swiftmailer/lib/dependency_maps/mime_deps.php b/vendor/swiftmailer/swiftmailer/lib/dependency_maps/mime_deps.php index d575e4f..975945b 100644 --- a/vendor/swiftmailer/swiftmailer/lib/dependency_maps/mime_deps.php +++ b/vendor/swiftmailer/swiftmailer/lib/dependency_maps/mime_deps.php @@ -6,96 +6,112 @@ ->register('properties.charset') ->asValue('utf-8') - ->register('mime.grammar') - ->asSharedInstanceOf('Swift_Mime_Grammar') + ->register('email.validator') + ->asSharedInstanceOf('Egulias\EmailValidator\EmailValidator') + + ->register('mime.idgenerator.idright') + // As SERVER_NAME can come from the user in certain configurations, check that + // it does not contain forbidden characters (see RFC 952 and RFC 2181). Use + // preg_replace() instead of preg_match() to prevent DoS attacks with long host names. + ->asValue(!empty($_SERVER['SERVER_NAME']) && '' === preg_replace('/(?:^\[)?[a-zA-Z0-9-:\]_]+\.?/', '', $_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : 'swift.generated') + + ->register('mime.idgenerator') + ->asSharedInstanceOf('Swift_Mime_IdGenerator') + ->withDependencies([ + 'mime.idgenerator.idright', + ]) ->register('mime.message') ->asNewInstanceOf('Swift_Mime_SimpleMessage') - ->withDependencies(array( + ->withDependencies([ 'mime.headerset', - 'mime.qpcontentencoder', + 'mime.textcontentencoder', 'cache', - 'mime.grammar', + 'mime.idgenerator', 'properties.charset', - )) + ]) ->register('mime.part') ->asNewInstanceOf('Swift_Mime_MimePart') - ->withDependencies(array( + ->withDependencies([ 'mime.headerset', - 'mime.qpcontentencoder', + 'mime.textcontentencoder', 'cache', - 'mime.grammar', + 'mime.idgenerator', 'properties.charset', - )) + ]) ->register('mime.attachment') ->asNewInstanceOf('Swift_Mime_Attachment') - ->withDependencies(array( + ->withDependencies([ 'mime.headerset', 'mime.base64contentencoder', 'cache', - 'mime.grammar', - )) + 'mime.idgenerator', + ]) ->addConstructorValue($swift_mime_types) ->register('mime.embeddedfile') ->asNewInstanceOf('Swift_Mime_EmbeddedFile') - ->withDependencies(array( + ->withDependencies([ 'mime.headerset', 'mime.base64contentencoder', 'cache', - 'mime.grammar', - )) + 'mime.idgenerator', + ]) ->addConstructorValue($swift_mime_types) ->register('mime.headerfactory') ->asNewInstanceOf('Swift_Mime_SimpleHeaderFactory') - ->withDependencies(array( - 'mime.qpheaderencoder', - 'mime.rfc2231encoder', - 'mime.grammar', - 'properties.charset', - )) + ->withDependencies([ + 'mime.qpheaderencoder', + 'mime.rfc2231encoder', + 'email.validator', + 'properties.charset', + 'address.idnaddressencoder', + ]) ->register('mime.headerset') ->asNewInstanceOf('Swift_Mime_SimpleHeaderSet') - ->withDependencies(array('mime.headerfactory', 'properties.charset')) + ->withDependencies(['mime.headerfactory', 'properties.charset']) ->register('mime.qpheaderencoder') ->asNewInstanceOf('Swift_Mime_HeaderEncoder_QpHeaderEncoder') - ->withDependencies(array('mime.charstream')) + ->withDependencies(['mime.charstream']) ->register('mime.base64headerencoder') ->asNewInstanceOf('Swift_Mime_HeaderEncoder_Base64HeaderEncoder') - ->withDependencies(array('mime.charstream')) + ->withDependencies(['mime.charstream']) ->register('mime.charstream') - ->asNewInstanceOf('Swift_CharacterStream_NgCharacterStream') - ->withDependencies(array('mime.characterreaderfactory', 'properties.charset')) + ->asNewInstanceOf('Swift_CharacterStream_CharacterStream') + ->withDependencies(['mime.characterreaderfactory', 'properties.charset']) ->register('mime.bytecanonicalizer') ->asSharedInstanceOf('Swift_StreamFilters_ByteArrayReplacementFilter') - ->addConstructorValue(array(array(0x0D, 0x0A), array(0x0D), array(0x0A))) - ->addConstructorValue(array(array(0x0A), array(0x0A), array(0x0D, 0x0A))) + ->addConstructorValue([[0x0D, 0x0A], [0x0D], [0x0A]]) + ->addConstructorValue([[0x0A], [0x0A], [0x0D, 0x0A]]) ->register('mime.characterreaderfactory') ->asSharedInstanceOf('Swift_CharacterReaderFactory_SimpleCharacterReaderFactory') + ->register('mime.textcontentencoder') + ->asAliasOf('mime.qpcontentencoder') + ->register('mime.safeqpcontentencoder') ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoder') - ->withDependencies(array('mime.charstream', 'mime.bytecanonicalizer')) + ->withDependencies(['mime.charstream', 'mime.bytecanonicalizer']) ->register('mime.rawcontentencoder') ->asNewInstanceOf('Swift_Mime_ContentEncoder_RawContentEncoder') ->register('mime.nativeqpcontentencoder') - ->withDependencies(array('properties.charset')) + ->withDependencies(['properties.charset']) ->asNewInstanceOf('Swift_Mime_ContentEncoder_NativeQpContentEncoder') - ->register('mime.qpcontentencoderproxy') + ->register('mime.qpcontentencoder') ->asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoderProxy') - ->withDependencies(array('mime.safeqpcontentencoder', 'mime.nativeqpcontentencoder', 'properties.charset')) + ->withDependencies(['mime.safeqpcontentencoder', 'mime.nativeqpcontentencoder', 'properties.charset']) ->register('mime.7bitcontentencoder') ->asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') @@ -112,12 +128,7 @@ ->register('mime.rfc2231encoder') ->asNewInstanceOf('Swift_Encoder_Rfc2231Encoder') - ->withDependencies(array('mime.charstream')) - - // As of PHP 5.4.7, the quoted_printable_encode() function behaves correctly. - // see https://github.com/php/php-src/commit/18bb426587d62f93c54c40bf8535eb8416603629 - ->register('mime.qpcontentencoder') - ->asAliasOf(PHP_VERSION_ID >= 50407 ? 'mime.qpcontentencoderproxy' : 'mime.safeqpcontentencoder') + ->withDependencies(['mime.charstream']) ; unset($swift_mime_types); diff --git a/vendor/swiftmailer/swiftmailer/lib/dependency_maps/transport_deps.php b/vendor/swiftmailer/swiftmailer/lib/dependency_maps/transport_deps.php index 77e432c..34a63c7 100644 --- a/vendor/swiftmailer/swiftmailer/lib/dependency_maps/transport_deps.php +++ b/vendor/swiftmailer/swiftmailer/lib/dependency_maps/transport_deps.php @@ -1,24 +1,29 @@ register('transport.localdomain') + // As SERVER_NAME can come from the user in certain configurations, check that + // it does not contain forbidden characters (see RFC 952 and RFC 2181). Use + // preg_replace() instead of preg_match() to prevent DoS attacks with long host names. + ->asValue(!empty($_SERVER['SERVER_NAME']) && '' === preg_replace('/(?:^\[)?[a-zA-Z0-9-:\]_]+\.?/', '', $_SERVER['SERVER_NAME']) ? trim($_SERVER['SERVER_NAME'], '[]') : '127.0.0.1') + ->register('transport.smtp') ->asNewInstanceOf('Swift_Transport_EsmtpTransport') - ->withDependencies(array( + ->withDependencies([ 'transport.buffer', - array('transport.authhandler'), + 'transport.smtphandlers', 'transport.eventdispatcher', - )) + 'transport.localdomain', + 'address.idnaddressencoder', + ]) ->register('transport.sendmail') ->asNewInstanceOf('Swift_Transport_SendmailTransport') - ->withDependencies(array( + ->withDependencies([ 'transport.buffer', 'transport.eventdispatcher', - )) - - ->register('transport.mail') - ->asNewInstanceOf('Swift_Transport_MailTransport') - ->withDependencies(array('transport.mailinvoker', 'transport.eventdispatcher')) + 'transport.localdomain', + ]) ->register('transport.loadbalanced') ->asNewInstanceOf('Swift_Transport_LoadBalancedTransport') @@ -28,30 +33,40 @@ ->register('transport.spool') ->asNewInstanceOf('Swift_Transport_SpoolTransport') - ->withDependencies(array('transport.eventdispatcher')) + ->withDependencies(['transport.eventdispatcher']) ->register('transport.null') ->asNewInstanceOf('Swift_Transport_NullTransport') - ->withDependencies(array('transport.eventdispatcher')) - - ->register('transport.mailinvoker') - ->asSharedInstanceOf('Swift_Transport_SimpleMailInvoker') + ->withDependencies(['transport.eventdispatcher']) ->register('transport.buffer') ->asNewInstanceOf('Swift_Transport_StreamBuffer') - ->withDependencies(array('transport.replacementfactory')) + ->withDependencies(['transport.replacementfactory']) + + ->register('transport.smtphandlers') + ->asArray() + ->withDependencies(['transport.authhandler']) ->register('transport.authhandler') ->asNewInstanceOf('Swift_Transport_Esmtp_AuthHandler') - ->withDependencies(array( - array( - 'transport.crammd5auth', - 'transport.loginauth', - 'transport.plainauth', - 'transport.ntlmauth', - 'transport.xoauth2auth', - ), - )) + ->withDependencies(['transport.authhandlers']) + + ->register('transport.authhandlers') + ->asArray() + ->withDependencies([ + 'transport.crammd5auth', + 'transport.loginauth', + 'transport.plainauth', + 'transport.ntlmauth', + 'transport.xoauth2auth', + ]) + + ->register('transport.smtputf8handler') + ->asNewInstanceOf('Swift_Transport_Esmtp_SmtpUtf8Handler') + + ->register('transport.8bitmimehandler') + ->asNewInstanceOf('Swift_Transport_Esmtp_EightBitMimeHandler') + ->addConstructorValue('8BITMIME') ->register('transport.crammd5auth') ->asNewInstanceOf('Swift_Transport_Esmtp_Auth_CramMd5Authenticator') @@ -73,4 +88,10 @@ ->register('transport.replacementfactory') ->asSharedInstanceOf('Swift_StreamFilters_StringReplacementFilterFactory') + + ->register('address.idnaddressencoder') + ->asNewInstanceOf('Swift_AddressEncoder_IdnAddressEncoder') + + ->register('address.utf8addressencoder') + ->asNewInstanceOf('Swift_AddressEncoder_Utf8AddressEncoder') ; diff --git a/vendor/swiftmailer/swiftmailer/lib/mime_types.php b/vendor/swiftmailer/swiftmailer/lib/mime_types.php index b42c1cc..72c6fd2 100644 --- a/vendor/swiftmailer/swiftmailer/lib/mime_types.php +++ b/vendor/swiftmailer/swiftmailer/lib/mime_types.php @@ -17,7 +17,7 @@ // You may add or take away what you like (lowercase required) -$swift_mime_types = array( +$swift_mime_types = [ '3dml' => 'text/vnd.in3d.3dml', '3ds' => 'image/x-3ds', '3g2' => 'video/3gpp2', @@ -1004,4 +1004,4 @@ 'zirz' => 'application/vnd.zul', 'zmm' => 'application/vnd.handheld-entertainment+xml', '123' => 'application/vnd.lotus-1-2-3', -); +]; diff --git a/vendor/swiftmailer/swiftmailer/lib/preferences.php b/vendor/swiftmailer/swiftmailer/lib/preferences.php index 0b430e6..27b7065 100644 --- a/vendor/swiftmailer/swiftmailer/lib/preferences.php +++ b/vendor/swiftmailer/swiftmailer/lib/preferences.php @@ -17,9 +17,3 @@ if (@is_writable($tmpDir = sys_get_temp_dir())) { $preferences->setTempDir($tmpDir)->setCacheType('disk'); } - -// this should only be done when Swiftmailer won't use the native QP content encoder -// see mime_deps.php -if (PHP_VERSION_ID < 50407) { - $preferences->setQPDotEscape(false); -} diff --git a/vendor/swiftmailer/swiftmailer/lib/swift_init.php b/vendor/swiftmailer/swiftmailer/lib/swift_init.php deleted file mode 100644 index ff71963..0000000 --- a/vendor/swiftmailer/swiftmailer/lib/swift_init.php +++ /dev/null @@ -1,28 +0,0 @@ - 'application/x-php', 'php3' => 'application/x-php', 'php4' => 'application/x-php', @@ -95,7 +95,7 @@ function generateUpToDateMimeArray() 'xls' => 'application/vnd.ms-excel', 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'xml' => 'application/xml', - ); + ]; // wrap array for generating file foreach ($valid_mime_types_preset as $extension => $mime_type) { @@ -103,9 +103,6 @@ function generateUpToDateMimeArray() $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; } - // collect extensions - $valid_extensions = array(); - // all extensions from second match foreach ($matches[2] as $i => $extensions) { // explode multiple extensions from string @@ -113,7 +110,7 @@ function generateUpToDateMimeArray() // force array for foreach if (!is_array($extensions)) { - $extensions = array($extensions); + $extensions = [$extensions]; } foreach ($extensions as $extension) { @@ -122,9 +119,6 @@ function generateUpToDateMimeArray() // check if string length lower than 10 if (strlen($extension) < 10) { - // add extension - $valid_extensions[] = $extension; - if (!isset($valid_mime_types[$mime_type])) { // generate array for mimetype to extension resolver (only first match) $valid_mime_types[$extension] = "'{$extension}' => '{$mime_type}'"; @@ -145,18 +139,13 @@ function generateUpToDateMimeArray() // get all matching extensions from match foreach ((array) $node->glob['pattern'] as $extension) { // skip none glob extensions - if (strpos($extension, '.') === false) { + if (false === strpos($extension, '.')) { continue; } // remove get only last part $extension = explode('.', strtolower($extension)); $extension = end($extension); - - // maximum length in database column - if (strlen($extension) <= 9) { - $valid_extensions[] = $extension; - } } if (isset($node->glob['pattern'][0])) { @@ -167,7 +156,7 @@ function generateUpToDateMimeArray() $extension = strtolower(trim($node->glob['ddpattern'][0], '*.')); // skip none glob extensions and check if string length between 1 and 10 - if (strpos($extension, '.') !== false || strlen($extension) < 1 || strlen($extension) > 9) { + if (false !== strpos($extension, '.') || strlen($extension) < 1 || strlen($extension) > 9) { continue; } diff --git a/vendor/swiftmailer/swiftmailer/phpunit.xml.dist b/vendor/swiftmailer/swiftmailer/phpunit.xml.dist index 606c5b4..9ec0c49 100644 --- a/vendor/swiftmailer/swiftmailer/phpunit.xml.dist +++ b/vendor/swiftmailer/swiftmailer/phpunit.xml.dist @@ -34,6 +34,5 @@ - diff --git a/vendor/swiftmailer/swiftmailer/tests/IdenticalBinaryConstraint.php b/vendor/swiftmailer/swiftmailer/tests/IdenticalBinaryConstraint.php index 069d11a..0a4a6da 100644 --- a/vendor/swiftmailer/swiftmailer/tests/IdenticalBinaryConstraint.php +++ b/vendor/swiftmailer/swiftmailer/tests/IdenticalBinaryConstraint.php @@ -5,7 +5,7 @@ * * @author Chris Corbyn */ -class IdenticalBinaryConstraint extends \PHPUnit_Framework_Constraint +class IdenticalBinaryConstraint extends \PHPUnit\Framework\Constraint\Constraint { protected $value; @@ -37,7 +37,7 @@ public function matches($other) */ public function toString() { - return 'indentical binary'; + return 'identical binary'; } /** diff --git a/vendor/swiftmailer/swiftmailer/tests/SwiftMailerSmokeTestCase.php b/vendor/swiftmailer/swiftmailer/tests/SwiftMailerSmokeTestCase.php index 71c5713..13bd240 100644 --- a/vendor/swiftmailer/swiftmailer/tests/SwiftMailerSmokeTestCase.php +++ b/vendor/swiftmailer/swiftmailer/tests/SwiftMailerSmokeTestCase.php @@ -16,7 +16,7 @@ protected function setUp() } } - protected function _getMailer() + protected function getMailer() { switch (SWIFT_SMOKE_TRANSPORT_TYPE) { case 'smtp': diff --git a/vendor/swiftmailer/swiftmailer/tests/SwiftMailerTestCase.php b/vendor/swiftmailer/swiftmailer/tests/SwiftMailerTestCase.php index f0e2736..fe2c62b 100644 --- a/vendor/swiftmailer/swiftmailer/tests/SwiftMailerTestCase.php +++ b/vendor/swiftmailer/swiftmailer/tests/SwiftMailerTestCase.php @@ -1,19 +1,23 @@ _testFile = sys_get_temp_dir().'/swift-test-file'.__CLASS__; - file_put_contents($this->_testFile, 'abcdefghijklm'); + $this->testFile = sys_get_temp_dir().'/swift-test-file'.__CLASS__; + file_put_contents($this->testFile, 'abcdefghijklm'); } protected function tearDown() { - unlink($this->_testFile); + unlink($this->testFile); } public function testFileDataCanBeRead() { - $file = $this->_createFileStream($this->_testFile); + $file = $this->createFileStream($this->testFile); $str = ''; while (false !== $bytes = $file->read(8192)) { $str .= $bytes; @@ -27,7 +27,7 @@ public function testFileDataCanBeRead() public function testFileDataCanBeReadSequentially() { - $file = $this->_createFileStream($this->_testFile); + $file = $this->createFileStream($this->testFile); $this->assertEquals('abcde', $file->read(5)); $this->assertEquals('fghijklm', $file->read(8)); $this->assertFalse($file->read(1)); @@ -35,20 +35,20 @@ public function testFileDataCanBeReadSequentially() public function testFilenameIsReturned() { - $file = $this->_createFileStream($this->_testFile); - $this->assertEquals($this->_testFile, $file->getPath()); + $file = $this->createFileStream($this->testFile); + $this->assertEquals($this->testFile, $file->getPath()); } public function testFileCanBeWrittenTo() { - $file = $this->_createFileStream($this->_testFile, true); + $file = $this->createFileStream($this->testFile, true); $file->write('foobar'); $this->assertEquals('foobar', $file->read(8192)); } public function testReadingFromThenWritingToFile() { - $file = $this->_createFileStream($this->_testFile, true); + $file = $this->createFileStream($this->testFile, true); $file->write('foobar'); $this->assertEquals('foobar', $file->read(8192)); $file->write('zipbutton'); @@ -57,28 +57,28 @@ public function testReadingFromThenWritingToFile() public function testWritingToFileWithCanonicalization() { - $file = $this->_createFileStream($this->_testFile, true); - $file->addFilter($this->_createFilter(array("\r\n", "\r"), "\n"), 'allToLF'); + $file = $this->createFileStream($this->testFile, true); + $file->addFilter($this->createFilter(["\r\n", "\r"], "\n"), 'allToLF'); $file->write("foo\r\nbar\r"); $file->write("\nzip\r\ntest\r"); $file->flushBuffers(); - $this->assertEquals("foo\nbar\nzip\ntest\n", file_get_contents($this->_testFile)); + $this->assertEquals("foo\nbar\nzip\ntest\n", file_get_contents($this->testFile)); } public function testWritingWithFulleMessageLengthOfAMultipleOf8192() { - $file = $this->_createFileStream($this->_testFile, true); - $file->addFilter($this->_createFilter(array("\r\n", "\r"), "\n"), 'allToLF'); + $file = $this->createFileStream($this->testFile, true); + $file->addFilter($this->createFilter(["\r\n", "\r"], "\n"), 'allToLF'); $file->write(''); $file->flushBuffers(); - $this->assertEquals('', file_get_contents($this->_testFile)); + $this->assertEquals('', file_get_contents($this->testFile)); } public function testBindingOtherStreamsMirrorsWriteOperations() { - $file = $this->_createFileStream($this->_testFile, true); - $is1 = $this->_createMockInputStream(); - $is2 = $this->_createMockInputStream(); + $file = $this->createFileStream($this->testFile, true); + $is1 = $this->createMockInputStream(); + $is2 = $this->createMockInputStream(); $is1->expects($this->at(0)) ->method('write') @@ -102,11 +102,11 @@ public function testBindingOtherStreamsMirrorsWriteOperations() public function testBindingOtherStreamsMirrorsFlushOperations() { - $file = $this->_createFileStream( - $this->_testFile, true + $file = $this->createFileStream( + $this->testFile, true ); - $is1 = $this->_createMockInputStream(); - $is2 = $this->_createMockInputStream(); + $is1 = $this->createMockInputStream(); + $is2 = $this->createMockInputStream(); $is1->expects($this->once()) ->method('flushBuffers'); @@ -121,9 +121,9 @@ public function testBindingOtherStreamsMirrorsFlushOperations() public function testUnbindingStreamPreventsFurtherWrites() { - $file = $this->_createFileStream($this->_testFile, true); - $is1 = $this->_createMockInputStream(); - $is2 = $this->_createMockInputStream(); + $file = $this->createFileStream($this->testFile, true); + $is1 = $this->createMockInputStream(); + $is2 = $this->createMockInputStream(); $is1->expects($this->at(0)) ->method('write') @@ -145,17 +145,17 @@ public function testUnbindingStreamPreventsFurtherWrites() $file->write('y'); } - private function _createFilter($search, $replace) + private function createFilter($search, $replace) { return new Swift_StreamFilters_StringReplacementFilter($search, $replace); } - private function _createMockInputStream() + private function createMockInputStream() { return $this->getMockBuilder('Swift_InputByteStream')->getMock(); } - private function _createFileStream($file, $writable = false) + private function createFileStream($file, $writable = false) { return new Swift_ByteStream_FileByteStream($file, $writable); } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/CharacterReaderFactory/SimpleCharacterReaderFactoryAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/CharacterReaderFactory/SimpleCharacterReaderFactoryAcceptanceTest.php index c13e570..fcc7ad4 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/CharacterReaderFactory/SimpleCharacterReaderFactoryAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/CharacterReaderFactory/SimpleCharacterReaderFactoryAcceptanceTest.php @@ -1,28 +1,28 @@ _factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); + $this->factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); } public function testCreatingUtf8Reader() { - foreach (array('utf8', 'utf-8', 'UTF-8', 'UTF8') as $utf8) { - $reader = $this->_factory->getReaderFor($utf8); - $this->assertInstanceOf($this->_prefix.'Utf8Reader', $reader); + foreach (['utf8', 'utf-8', 'UTF-8', 'UTF8'] as $utf8) { + $reader = $this->factory->getReaderFor($utf8); + $this->assertInstanceOf($this->prefix.'Utf8Reader', $reader); } } public function testCreatingIso8859XReaders() { - $charsets = array(); + $charsets = []; foreach (range(1, 16) as $number) { - foreach (array('iso', 'iec') as $body) { + foreach (['iso', 'iec'] as $body) { $charsets[] = $body.'-8859-'.$number; $charsets[] = $body.'8859-'.$number; $charsets[] = strtoupper($body).'-8859-'.$number; @@ -31,15 +31,15 @@ public function testCreatingIso8859XReaders() } foreach ($charsets as $charset) { - $reader = $this->_factory->getReaderFor($charset); - $this->assertInstanceOf($this->_prefix.'GenericFixedWidthReader', $reader); + $reader = $this->factory->getReaderFor($charset); + $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); $this->assertEquals(1, $reader->getInitialByteSize()); } } public function testCreatingWindows125XReaders() { - $charsets = array(); + $charsets = []; foreach (range(0, 8) as $number) { $charsets[] = 'windows-125'.$number; $charsets[] = 'windows125'.$number; @@ -48,15 +48,15 @@ public function testCreatingWindows125XReaders() } foreach ($charsets as $charset) { - $reader = $this->_factory->getReaderFor($charset); - $this->assertInstanceOf($this->_prefix.'GenericFixedWidthReader', $reader); + $reader = $this->factory->getReaderFor($charset); + $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); $this->assertEquals(1, $reader->getInitialByteSize()); } } public function testCreatingCodePageReaders() { - $charsets = array(); + $charsets = []; foreach (range(0, 8) as $number) { $charsets[] = 'cp-125'.$number; $charsets[] = 'cp125'.$number; @@ -64,8 +64,8 @@ public function testCreatingCodePageReaders() $charsets[] = 'CP125'.$number; } - foreach (array(437, 737, 850, 855, 857, 858, 860, - 861, 863, 865, 866, 869, ) as $number) { + foreach ([437, 737, 850, 855, 857, 858, 860, + 861, 863, 865, 866, 869, ] as $number) { $charsets[] = 'cp-'.$number; $charsets[] = 'cp'.$number; $charsets[] = 'CP-'.$number; @@ -73,34 +73,34 @@ public function testCreatingCodePageReaders() } foreach ($charsets as $charset) { - $reader = $this->_factory->getReaderFor($charset); - $this->assertInstanceOf($this->_prefix.'GenericFixedWidthReader', $reader); + $reader = $this->factory->getReaderFor($charset); + $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); $this->assertEquals(1, $reader->getInitialByteSize()); } } public function testCreatingAnsiReader() { - foreach (array('ansi', 'ANSI') as $ansi) { - $reader = $this->_factory->getReaderFor($ansi); - $this->assertInstanceOf($this->_prefix.'GenericFixedWidthReader', $reader); + foreach (['ansi', 'ANSI'] as $ansi) { + $reader = $this->factory->getReaderFor($ansi); + $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); $this->assertEquals(1, $reader->getInitialByteSize()); } } public function testCreatingMacintoshReader() { - foreach (array('macintosh', 'MACINTOSH') as $mac) { - $reader = $this->_factory->getReaderFor($mac); - $this->assertInstanceOf($this->_prefix.'GenericFixedWidthReader', $reader); + foreach (['macintosh', 'MACINTOSH'] as $mac) { + $reader = $this->factory->getReaderFor($mac); + $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); $this->assertEquals(1, $reader->getInitialByteSize()); } } public function testCreatingKOIReaders() { - $charsets = array(); - foreach (array('7', '8-r', '8-u', '8u', '8r') as $end) { + $charsets = []; + foreach (['7', '8-r', '8-u', '8u', '8r'] as $end) { $charsets[] = 'koi-'.$end; $charsets[] = 'koi'.$end; $charsets[] = 'KOI-'.$end; @@ -108,71 +108,71 @@ public function testCreatingKOIReaders() } foreach ($charsets as $charset) { - $reader = $this->_factory->getReaderFor($charset); - $this->assertInstanceOf($this->_prefix.'GenericFixedWidthReader', $reader); + $reader = $this->factory->getReaderFor($charset); + $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); $this->assertEquals(1, $reader->getInitialByteSize()); } } public function testCreatingIsciiReaders() { - foreach (array('iscii', 'ISCII', 'viscii', 'VISCII') as $charset) { - $reader = $this->_factory->getReaderFor($charset); - $this->assertInstanceOf($this->_prefix.'GenericFixedWidthReader', $reader); + foreach (['iscii', 'ISCII', 'viscii', 'VISCII'] as $charset) { + $reader = $this->factory->getReaderFor($charset); + $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); $this->assertEquals(1, $reader->getInitialByteSize()); } } public function testCreatingMIKReader() { - foreach (array('mik', 'MIK') as $charset) { - $reader = $this->_factory->getReaderFor($charset); - $this->assertInstanceOf($this->_prefix.'GenericFixedWidthReader', $reader); + foreach (['mik', 'MIK'] as $charset) { + $reader = $this->factory->getReaderFor($charset); + $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); $this->assertEquals(1, $reader->getInitialByteSize()); } } public function testCreatingCorkReader() { - foreach (array('cork', 'CORK', 't1', 'T1') as $charset) { - $reader = $this->_factory->getReaderFor($charset); - $this->assertInstanceOf($this->_prefix.'GenericFixedWidthReader', $reader); + foreach (['cork', 'CORK', 't1', 'T1'] as $charset) { + $reader = $this->factory->getReaderFor($charset); + $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); $this->assertEquals(1, $reader->getInitialByteSize()); } } public function testCreatingUcs2Reader() { - foreach (array('ucs-2', 'UCS-2', 'ucs2', 'UCS2') as $charset) { - $reader = $this->_factory->getReaderFor($charset); - $this->assertInstanceOf($this->_prefix.'GenericFixedWidthReader', $reader); + foreach (['ucs-2', 'UCS-2', 'ucs2', 'UCS2'] as $charset) { + $reader = $this->factory->getReaderFor($charset); + $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); $this->assertEquals(2, $reader->getInitialByteSize()); } } public function testCreatingUtf16Reader() { - foreach (array('utf-16', 'UTF-16', 'utf16', 'UTF16') as $charset) { - $reader = $this->_factory->getReaderFor($charset); - $this->assertInstanceOf($this->_prefix.'GenericFixedWidthReader', $reader); + foreach (['utf-16', 'UTF-16', 'utf16', 'UTF16'] as $charset) { + $reader = $this->factory->getReaderFor($charset); + $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); $this->assertEquals(2, $reader->getInitialByteSize()); } } public function testCreatingUcs4Reader() { - foreach (array('ucs-4', 'UCS-4', 'ucs4', 'UCS4') as $charset) { - $reader = $this->_factory->getReaderFor($charset); - $this->assertInstanceOf($this->_prefix.'GenericFixedWidthReader', $reader); + foreach (['ucs-4', 'UCS-4', 'ucs4', 'UCS4'] as $charset) { + $reader = $this->factory->getReaderFor($charset); + $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); $this->assertEquals(4, $reader->getInitialByteSize()); } } public function testCreatingUtf32Reader() { - foreach (array('utf-32', 'UTF-32', 'utf32', 'UTF32') as $charset) { - $reader = $this->_factory->getReaderFor($charset); - $this->assertInstanceOf($this->_prefix.'GenericFixedWidthReader', $reader); + foreach (['utf-32', 'UTF-32', 'utf32', 'UTF32'] as $charset) { + $reader = $this->factory->getReaderFor($charset); + $this->assertInstanceOf($this->prefix.'GenericFixedWidthReader', $reader); $this->assertEquals(4, $reader->getInitialByteSize()); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/DependencyContainerAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/DependencyContainerAcceptanceTest.php index e83c2bf..3c1b515 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/DependencyContainerAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/DependencyContainerAcceptanceTest.php @@ -4,21 +4,19 @@ //This is more of a "cross your fingers and hope it works" test! -class Swift_DependencyContainerAcceptanceTest extends \PHPUnit_Framework_TestCase +class Swift_DependencyContainerAcceptanceTest extends PHPUnit\Framework\TestCase { public function testNoLookupsFail() { $di = Swift_DependencyContainer::getInstance(); foreach ($di->listItems() as $itemName) { try { - // to be removed in 6.0 - if ('transport.mail' === $itemName) { - continue; - } $di->lookup($itemName); } catch (Swift_DependencyException $e) { $this->fail($e->getMessage()); } } + // previous loop would fail if there is an issue + $this->addToAssertionCount(1); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/EmbeddedFileAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/EmbeddedFileAcceptanceTest.php index fc5a814..a172e97 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/EmbeddedFileAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/EmbeddedFileAcceptanceTest.php @@ -5,8 +5,8 @@ class Swift_EmbeddedFileAcceptanceTest extends Swift_Mime_EmbeddedFileAcceptanceTest { - protected function _createEmbeddedFile() + protected function createEmbeddedFile() { - return Swift_EmbeddedFile::newInstance(); + return new Swift_EmbeddedFile(); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/Base64EncoderAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/Base64EncoderAcceptanceTest.php index bada509..f7098c1 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/Base64EncoderAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/Base64EncoderAcceptanceTest.php @@ -1,35 +1,35 @@ _samplesDir = realpath(__DIR__.'/../../../_samples/charsets'); - $this->_encoder = new Swift_Encoder_Base64Encoder(); + $this->samplesDir = realpath(__DIR__.'/../../../_samples/charsets'); + $this->encoder = new Swift_Encoder_Base64Encoder(); } public function testEncodingAndDecodingSamples() { - $sampleFp = opendir($this->_samplesDir); + $sampleFp = opendir($this->samplesDir); while (false !== $encodingDir = readdir($sampleFp)) { - if (substr($encodingDir, 0, 1) == '.') { + if ('.' == substr($encodingDir, 0, 1)) { continue; } - $sampleDir = $this->_samplesDir.'/'.$encodingDir; + $sampleDir = $this->samplesDir.'/'.$encodingDir; if (is_dir($sampleDir)) { $fileFp = opendir($sampleDir); while (false !== $sampleFile = readdir($fileFp)) { - if (substr($sampleFile, 0, 1) == '.') { + if ('.' == substr($sampleFile, 0, 1)) { continue; } $text = file_get_contents($sampleDir.'/'.$sampleFile); - $encodedText = $this->_encoder->encodeString($text); + $encodedText = $this->encoder->encodeString($text); $this->assertEquals( base64_decode($encodedText), $text, diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/QpEncoderAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/QpEncoderAcceptanceTest.php index 442d9a9..deea362 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/QpEncoderAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/QpEncoderAcceptanceTest.php @@ -1,35 +1,35 @@ _samplesDir = realpath(__DIR__.'/../../../_samples/charsets'); - $this->_factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); + $this->samplesDir = realpath(__DIR__.'/../../../_samples/charsets'); + $this->factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); } public function testEncodingAndDecodingSamples() { - $sampleFp = opendir($this->_samplesDir); + $sampleFp = opendir($this->samplesDir); while (false !== $encodingDir = readdir($sampleFp)) { - if (substr($encodingDir, 0, 1) == '.') { + if ('.' == substr($encodingDir, 0, 1)) { continue; } $encoding = $encodingDir; - $charStream = new Swift_CharacterStream_ArrayCharacterStream( - $this->_factory, $encoding); + $charStream = new Swift_CharacterStream_CharacterStream( + $this->factory, $encoding); $encoder = new Swift_Encoder_QpEncoder($charStream); - $sampleDir = $this->_samplesDir.'/'.$encodingDir; + $sampleDir = $this->samplesDir.'/'.$encodingDir; if (is_dir($sampleDir)) { $fileFp = opendir($sampleDir); while (false !== $sampleFile = readdir($fileFp)) { - if (substr($sampleFile, 0, 1) == '.') { + if ('.' == substr($sampleFile, 0, 1)) { continue; } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/Rfc2231EncoderAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/Rfc2231EncoderAcceptanceTest.php index bcb6b95..e28cc93 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/Rfc2231EncoderAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Encoder/Rfc2231EncoderAcceptanceTest.php @@ -1,35 +1,35 @@ _samplesDir = realpath(__DIR__.'/../../../_samples/charsets'); - $this->_factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); + $this->samplesDir = realpath(__DIR__.'/../../../_samples/charsets'); + $this->factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); } public function testEncodingAndDecodingSamples() { - $sampleFp = opendir($this->_samplesDir); + $sampleFp = opendir($this->samplesDir); while (false !== $encodingDir = readdir($sampleFp)) { - if (substr($encodingDir, 0, 1) == '.') { + if ('.' == substr($encodingDir, 0, 1)) { continue; } $encoding = $encodingDir; - $charStream = new Swift_CharacterStream_ArrayCharacterStream( - $this->_factory, $encoding); + $charStream = new Swift_CharacterStream_CharacterStream( + $this->factory, $encoding); $encoder = new Swift_Encoder_Rfc2231Encoder($charStream); - $sampleDir = $this->_samplesDir.'/'.$encodingDir; + $sampleDir = $this->samplesDir.'/'.$encodingDir; if (is_dir($sampleDir)) { $fileFp = opendir($sampleDir); while (false !== $sampleFile = readdir($fileFp)) { - if (substr($sampleFile, 0, 1) == '.') { + if ('.' == substr($sampleFile, 0, 1)) { continue; } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/EncodingAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/EncodingAcceptanceTest.php deleted file mode 100644 index 6a4d05d..0000000 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/EncodingAcceptanceTest.php +++ /dev/null @@ -1,30 +0,0 @@ -assertEquals('7bit', $encoder->getName()); - } - - public function testGet8BitEncodingReturns8BitEncoder() - { - $encoder = Swift_Encoding::get8BitEncoding(); - $this->assertEquals('8bit', $encoder->getName()); - } - - public function testGetQpEncodingReturnsQpEncoder() - { - $encoder = Swift_Encoding::getQpEncoding(); - $this->assertEquals('quoted-printable', $encoder->getName()); - } - - public function testGetBase64EncodingReturnsBase64Encoder() - { - $encoder = Swift_Encoding::getBase64Encoding(); - $this->assertEquals('base64', $encoder->getName()); - } -} diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/KeyCache/ArrayKeyCacheAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/KeyCache/ArrayKeyCacheAcceptanceTest.php index 5fab14c..c54986b 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/KeyCache/ArrayKeyCacheAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/KeyCache/ArrayKeyCacheAcceptanceTest.php @@ -1,79 +1,79 @@ _cache = new Swift_KeyCache_ArrayKeyCache( + $this->cache = new Swift_KeyCache_ArrayKeyCache( new Swift_KeyCache_SimpleKeyCacheInputStream() ); } public function testStringDataCanBeSetAndFetched() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->assertEquals('test', $this->_cache->getString($this->_key1, 'foo')); + $this->assertEquals('test', $this->cache->getString($this->key1, 'foo')); } public function testStringDataCanBeOverwritten() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->_cache->setString( - $this->_key1, 'foo', 'whatever', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'whatever', Swift_KeyCache::MODE_WRITE ); - $this->assertEquals('whatever', $this->_cache->getString($this->_key1, 'foo')); + $this->assertEquals('whatever', $this->cache->getString($this->key1, 'foo')); } public function testStringDataCanBeAppended() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->_cache->setString( - $this->_key1, 'foo', 'ing', Swift_KeyCache::MODE_APPEND + $this->cache->setString( + $this->key1, 'foo', 'ing', Swift_KeyCache::MODE_APPEND ); - $this->assertEquals('testing', $this->_cache->getString($this->_key1, 'foo')); + $this->assertEquals('testing', $this->cache->getString($this->key1, 'foo')); } public function testHasKeyReturnValue() { - $this->assertFalse($this->_cache->hasKey($this->_key1, 'foo')); - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->assertFalse($this->cache->hasKey($this->key1, 'foo')); + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->assertTrue($this->_cache->hasKey($this->_key1, 'foo')); + $this->assertTrue($this->cache->hasKey($this->key1, 'foo')); } public function testNsKeyIsWellPartitioned() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->_cache->setString( - $this->_key2, 'foo', 'ing', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key2, 'foo', 'ing', Swift_KeyCache::MODE_WRITE ); - $this->assertEquals('test', $this->_cache->getString($this->_key1, 'foo')); - $this->assertEquals('ing', $this->_cache->getString($this->_key2, 'foo')); + $this->assertEquals('test', $this->cache->getString($this->key1, 'foo')); + $this->assertEquals('ing', $this->cache->getString($this->key2, 'foo')); } public function testItemKeyIsWellPartitioned() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->_cache->setString( - $this->_key1, 'bar', 'ing', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'bar', 'ing', Swift_KeyCache::MODE_WRITE ); - $this->assertEquals('test', $this->_cache->getString($this->_key1, 'foo')); - $this->assertEquals('ing', $this->_cache->getString($this->_key1, 'bar')); + $this->assertEquals('test', $this->cache->getString($this->key1, 'foo')); + $this->assertEquals('ing', $this->cache->getString($this->key1, 'bar')); } public function testByteStreamCanBeImported() @@ -81,10 +81,10 @@ public function testByteStreamCanBeImported() $os = new Swift_ByteStream_ArrayByteStream(); $os->write('abcdef'); - $this->_cache->importFromByteStream( - $this->_key1, 'foo', $os, Swift_KeyCache::MODE_WRITE + $this->cache->importFromByteStream( + $this->key1, 'foo', $os, Swift_KeyCache::MODE_WRITE ); - $this->assertEquals('abcdef', $this->_cache->getString($this->_key1, 'foo')); + $this->assertEquals('abcdef', $this->cache->getString($this->key1, 'foo')); } public function testByteStreamCanBeAppended() @@ -95,40 +95,40 @@ public function testByteStreamCanBeAppended() $os2 = new Swift_ByteStream_ArrayByteStream(); $os2->write('xyzuvw'); - $this->_cache->importFromByteStream( - $this->_key1, 'foo', $os1, Swift_KeyCache::MODE_APPEND + $this->cache->importFromByteStream( + $this->key1, 'foo', $os1, Swift_KeyCache::MODE_APPEND ); - $this->_cache->importFromByteStream( - $this->_key1, 'foo', $os2, Swift_KeyCache::MODE_APPEND + $this->cache->importFromByteStream( + $this->key1, 'foo', $os2, Swift_KeyCache::MODE_APPEND ); - $this->assertEquals('abcdefxyzuvw', $this->_cache->getString($this->_key1, 'foo')); + $this->assertEquals('abcdefxyzuvw', $this->cache->getString($this->key1, 'foo')); } public function testByteStreamAndStringCanBeAppended() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_APPEND + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_APPEND ); $os = new Swift_ByteStream_ArrayByteStream(); $os->write('abcdef'); - $this->_cache->importFromByteStream( - $this->_key1, 'foo', $os, Swift_KeyCache::MODE_APPEND + $this->cache->importFromByteStream( + $this->key1, 'foo', $os, Swift_KeyCache::MODE_APPEND ); - $this->assertEquals('testabcdef', $this->_cache->getString($this->_key1, 'foo')); + $this->assertEquals('testabcdef', $this->cache->getString($this->key1, 'foo')); } public function testDataCanBeExportedToByteStream() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); $is = new Swift_ByteStream_ArrayByteStream(); - $this->_cache->exportToByteStream($this->_key1, 'foo', $is); + $this->cache->exportToByteStream($this->key1, 'foo', $is); $string = ''; while (false !== $bytes = $is->read(8192)) { @@ -140,34 +140,34 @@ public function testDataCanBeExportedToByteStream() public function testKeyCanBeCleared() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->assertTrue($this->_cache->hasKey($this->_key1, 'foo')); - $this->_cache->clearKey($this->_key1, 'foo'); - $this->assertFalse($this->_cache->hasKey($this->_key1, 'foo')); + $this->assertTrue($this->cache->hasKey($this->key1, 'foo')); + $this->cache->clearKey($this->key1, 'foo'); + $this->assertFalse($this->cache->hasKey($this->key1, 'foo')); } public function testNsKeyCanBeCleared() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->_cache->setString( - $this->_key1, 'bar', 'xyz', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'bar', 'xyz', Swift_KeyCache::MODE_WRITE ); - $this->assertTrue($this->_cache->hasKey($this->_key1, 'foo')); - $this->assertTrue($this->_cache->hasKey($this->_key1, 'bar')); - $this->_cache->clearAll($this->_key1); - $this->assertFalse($this->_cache->hasKey($this->_key1, 'foo')); - $this->assertFalse($this->_cache->hasKey($this->_key1, 'bar')); + $this->assertTrue($this->cache->hasKey($this->key1, 'foo')); + $this->assertTrue($this->cache->hasKey($this->key1, 'bar')); + $this->cache->clearAll($this->key1); + $this->assertFalse($this->cache->hasKey($this->key1, 'foo')); + $this->assertFalse($this->cache->hasKey($this->key1, 'bar')); } public function testKeyCacheInputStream() { - $is = $this->_cache->getInputByteStream($this->_key1, 'foo'); + $is = $this->cache->getInputByteStream($this->key1, 'foo'); $is->write('abc'); $is->write('xyz'); - $this->assertEquals('abcxyz', $this->_cache->getString($this->_key1, 'foo')); + $this->assertEquals('abcxyz', $this->cache->getString($this->key1, 'foo')); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/KeyCache/DiskKeyCacheAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/KeyCache/DiskKeyCacheAcceptanceTest.php index 0e027c2..9764742 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/KeyCache/DiskKeyCacheAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/KeyCache/DiskKeyCacheAcceptanceTest.php @@ -1,79 +1,79 @@ _key1 = uniqid(microtime(true), true); - $this->_key2 = uniqid(microtime(true), true); - $this->_cache = new Swift_KeyCache_DiskKeyCache(new Swift_KeyCache_SimpleKeyCacheInputStream(), sys_get_temp_dir()); + $this->key1 = uniqid(microtime(true), true); + $this->key2 = uniqid(microtime(true), true); + $this->cache = new Swift_KeyCache_DiskKeyCache(new Swift_KeyCache_SimpleKeyCacheInputStream(), sys_get_temp_dir()); } public function testStringDataCanBeSetAndFetched() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->assertEquals('test', $this->_cache->getString($this->_key1, 'foo')); + $this->assertEquals('test', $this->cache->getString($this->key1, 'foo')); } public function testStringDataCanBeOverwritten() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->_cache->setString( - $this->_key1, 'foo', 'whatever', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'whatever', Swift_KeyCache::MODE_WRITE ); - $this->assertEquals('whatever', $this->_cache->getString($this->_key1, 'foo')); + $this->assertEquals('whatever', $this->cache->getString($this->key1, 'foo')); } public function testStringDataCanBeAppended() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->_cache->setString( - $this->_key1, 'foo', 'ing', Swift_KeyCache::MODE_APPEND + $this->cache->setString( + $this->key1, 'foo', 'ing', Swift_KeyCache::MODE_APPEND ); - $this->assertEquals('testing', $this->_cache->getString($this->_key1, 'foo')); + $this->assertEquals('testing', $this->cache->getString($this->key1, 'foo')); } public function testHasKeyReturnValue() { - $this->assertFalse($this->_cache->hasKey($this->_key1, 'foo')); - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->assertFalse($this->cache->hasKey($this->key1, 'foo')); + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->assertTrue($this->_cache->hasKey($this->_key1, 'foo')); + $this->assertTrue($this->cache->hasKey($this->key1, 'foo')); } public function testNsKeyIsWellPartitioned() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->_cache->setString( - $this->_key2, 'foo', 'ing', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key2, 'foo', 'ing', Swift_KeyCache::MODE_WRITE ); - $this->assertEquals('test', $this->_cache->getString($this->_key1, 'foo')); - $this->assertEquals('ing', $this->_cache->getString($this->_key2, 'foo')); + $this->assertEquals('test', $this->cache->getString($this->key1, 'foo')); + $this->assertEquals('ing', $this->cache->getString($this->key2, 'foo')); } public function testItemKeyIsWellPartitioned() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->_cache->setString( - $this->_key1, 'bar', 'ing', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'bar', 'ing', Swift_KeyCache::MODE_WRITE ); - $this->assertEquals('test', $this->_cache->getString($this->_key1, 'foo')); - $this->assertEquals('ing', $this->_cache->getString($this->_key1, 'bar')); + $this->assertEquals('test', $this->cache->getString($this->key1, 'foo')); + $this->assertEquals('ing', $this->cache->getString($this->key1, 'bar')); } public function testByteStreamCanBeImported() @@ -81,10 +81,10 @@ public function testByteStreamCanBeImported() $os = new Swift_ByteStream_ArrayByteStream(); $os->write('abcdef'); - $this->_cache->importFromByteStream( - $this->_key1, 'foo', $os, Swift_KeyCache::MODE_WRITE + $this->cache->importFromByteStream( + $this->key1, 'foo', $os, Swift_KeyCache::MODE_WRITE ); - $this->assertEquals('abcdef', $this->_cache->getString($this->_key1, 'foo')); + $this->assertEquals('abcdef', $this->cache->getString($this->key1, 'foo')); } public function testByteStreamCanBeAppended() @@ -95,40 +95,40 @@ public function testByteStreamCanBeAppended() $os2 = new Swift_ByteStream_ArrayByteStream(); $os2->write('xyzuvw'); - $this->_cache->importFromByteStream( - $this->_key1, 'foo', $os1, Swift_KeyCache::MODE_APPEND + $this->cache->importFromByteStream( + $this->key1, 'foo', $os1, Swift_KeyCache::MODE_APPEND ); - $this->_cache->importFromByteStream( - $this->_key1, 'foo', $os2, Swift_KeyCache::MODE_APPEND + $this->cache->importFromByteStream( + $this->key1, 'foo', $os2, Swift_KeyCache::MODE_APPEND ); - $this->assertEquals('abcdefxyzuvw', $this->_cache->getString($this->_key1, 'foo')); + $this->assertEquals('abcdefxyzuvw', $this->cache->getString($this->key1, 'foo')); } public function testByteStreamAndStringCanBeAppended() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_APPEND + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_APPEND ); $os = new Swift_ByteStream_ArrayByteStream(); $os->write('abcdef'); - $this->_cache->importFromByteStream( - $this->_key1, 'foo', $os, Swift_KeyCache::MODE_APPEND + $this->cache->importFromByteStream( + $this->key1, 'foo', $os, Swift_KeyCache::MODE_APPEND ); - $this->assertEquals('testabcdef', $this->_cache->getString($this->_key1, 'foo')); + $this->assertEquals('testabcdef', $this->cache->getString($this->key1, 'foo')); } public function testDataCanBeExportedToByteStream() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); $is = new Swift_ByteStream_ArrayByteStream(); - $this->_cache->exportToByteStream($this->_key1, 'foo', $is); + $this->cache->exportToByteStream($this->key1, 'foo', $is); $string = ''; while (false !== $bytes = $is->read(8192)) { @@ -140,34 +140,34 @@ public function testDataCanBeExportedToByteStream() public function testKeyCanBeCleared() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->assertTrue($this->_cache->hasKey($this->_key1, 'foo')); - $this->_cache->clearKey($this->_key1, 'foo'); - $this->assertFalse($this->_cache->hasKey($this->_key1, 'foo')); + $this->assertTrue($this->cache->hasKey($this->key1, 'foo')); + $this->cache->clearKey($this->key1, 'foo'); + $this->assertFalse($this->cache->hasKey($this->key1, 'foo')); } public function testNsKeyCanBeCleared() { - $this->_cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->_cache->setString( - $this->_key1, 'bar', 'xyz', Swift_KeyCache::MODE_WRITE + $this->cache->setString( + $this->key1, 'bar', 'xyz', Swift_KeyCache::MODE_WRITE ); - $this->assertTrue($this->_cache->hasKey($this->_key1, 'foo')); - $this->assertTrue($this->_cache->hasKey($this->_key1, 'bar')); - $this->_cache->clearAll($this->_key1); - $this->assertFalse($this->_cache->hasKey($this->_key1, 'foo')); - $this->assertFalse($this->_cache->hasKey($this->_key1, 'bar')); + $this->assertTrue($this->cache->hasKey($this->key1, 'foo')); + $this->assertTrue($this->cache->hasKey($this->key1, 'bar')); + $this->cache->clearAll($this->key1); + $this->assertFalse($this->cache->hasKey($this->key1, 'foo')); + $this->assertFalse($this->cache->hasKey($this->key1, 'bar')); } public function testKeyCacheInputStream() { - $is = $this->_cache->getInputByteStream($this->_key1, 'foo'); + $is = $this->cache->getInputByteStream($this->key1, 'foo'); $is->write('abc'); $is->write('xyz'); - $this->assertEquals('abcxyz', $this->_cache->getString($this->_key1, 'foo')); + $this->assertEquals('abcxyz', $this->cache->getString($this->key1, 'foo')); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/MessageAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/MessageAcceptanceTest.php index 5f4e983..16adb23 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/MessageAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/MessageAcceptanceTest.php @@ -7,10 +7,10 @@ class Swift_MessageAcceptanceTest extends Swift_Mime_SimpleMessageAcceptanceTest { public function testAddPartWrapper() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); - $message->setFrom(array( - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', )); + $message->setFrom([ + 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); $id = $message->getId(); $date = $message->getDate(); @@ -21,7 +21,7 @@ public function testAddPartWrapper() $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris Corbyn '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -45,11 +45,11 @@ public function testAddPartWrapper() ); } - protected function _createMessage() + protected function createMessage() { Swift_DependencyContainer::getInstance() ->register('properties.charset')->asValue(null); - return Swift_Message::newInstance(); + return new Swift_Message(); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/AttachmentAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/AttachmentAcceptanceTest.php index 7353d9d..e931dda 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/AttachmentAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/AttachmentAcceptanceTest.php @@ -1,35 +1,38 @@ _cache = new Swift_KeyCache_ArrayKeyCache( + $this->cache = new Swift_KeyCache_ArrayKeyCache( new Swift_KeyCache_SimpleKeyCacheInputStream() ); $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); - $this->_contentEncoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder(); + $this->contentEncoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder(); $headerEncoder = new Swift_Mime_HeaderEncoder_QpHeaderEncoder( - new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8') + new Swift_CharacterStream_CharacterStream($factory, 'utf-8') ); $paramEncoder = new Swift_Encoder_Rfc2231Encoder( - new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8') + new Swift_CharacterStream_CharacterStream($factory, 'utf-8') ); - $this->_grammar = new Swift_Mime_Grammar(); - $this->_headers = new Swift_Mime_SimpleHeaderSet( - new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $this->_grammar) + $this->emailValidator = new EmailValidator(); + $this->idGenerator = new Swift_Mime_IdGenerator('example.com'); + $this->headers = new Swift_Mime_SimpleHeaderSet( + new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $this->emailValidator) ); } public function testDispositionIsSetInHeader() { - $attachment = $this->_createAttachment(); + $attachment = $this->createAttachment(); $attachment->setContentType('application/pdf'); $attachment->setDisposition('inline'); $this->assertEquals( @@ -42,7 +45,7 @@ public function testDispositionIsSetInHeader() public function testDispositionIsAttachmentByDefault() { - $attachment = $this->_createAttachment(); + $attachment = $this->createAttachment(); $attachment->setContentType('application/pdf'); $this->assertEquals( 'Content-Type: application/pdf'."\r\n". @@ -54,7 +57,7 @@ public function testDispositionIsAttachmentByDefault() public function testFilenameIsSetInHeader() { - $attachment = $this->_createAttachment(); + $attachment = $this->createAttachment(); $attachment->setContentType('application/pdf'); $attachment->setFilename('foo.pdf'); $this->assertEquals( @@ -67,7 +70,7 @@ public function testFilenameIsSetInHeader() public function testSizeIsSetInHeader() { - $attachment = $this->_createAttachment(); + $attachment = $this->createAttachment(); $attachment->setContentType('application/pdf'); $attachment->setSize(12340); $this->assertEquals( @@ -80,7 +83,7 @@ public function testSizeIsSetInHeader() public function testMultipleParametersInHeader() { - $attachment = $this->_createAttachment(); + $attachment = $this->createAttachment(); $attachment->setContentType('application/pdf'); $attachment->setFilename('foo.pdf'); $attachment->setSize(12340); @@ -94,7 +97,7 @@ public function testMultipleParametersInHeader() public function testEndToEnd() { - $attachment = $this->_createAttachment(); + $attachment = $this->createAttachment(); $attachment->setContentType('application/pdf'); $attachment->setFilename('foo.pdf'); $attachment->setSize(12340); @@ -109,13 +112,13 @@ public function testEndToEnd() ); } - protected function _createAttachment() + protected function createAttachment() { $entity = new Swift_Mime_Attachment( - $this->_headers, - $this->_contentEncoder, - $this->_cache, - $this->_grammar + $this->headers, + $this->contentEncoder, + $this->cache, + $this->idGenerator ); return $entity; diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/Base64ContentEncoderAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/Base64ContentEncoderAcceptanceTest.php index a72f5ff..a87b30e 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/Base64ContentEncoderAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/Base64ContentEncoderAcceptanceTest.php @@ -1,30 +1,30 @@ _samplesDir = realpath(__DIR__.'/../../../../_samples/charsets'); - $this->_encoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder(); + $this->samplesDir = realpath(__DIR__.'/../../../../_samples/charsets'); + $this->encoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder(); } public function testEncodingAndDecodingSamples() { - $sampleFp = opendir($this->_samplesDir); + $sampleFp = opendir($this->samplesDir); while (false !== $encodingDir = readdir($sampleFp)) { - if (substr($encodingDir, 0, 1) == '.') { + if ('.' == substr($encodingDir, 0, 1)) { continue; } - $sampleDir = $this->_samplesDir.'/'.$encodingDir; + $sampleDir = $this->samplesDir.'/'.$encodingDir; if (is_dir($sampleDir)) { $fileFp = opendir($sampleDir); while (false !== $sampleFile = readdir($fileFp)) { - if (substr($sampleFile, 0, 1) == '.') { + if ('.' == substr($sampleFile, 0, 1)) { continue; } @@ -35,7 +35,7 @@ public function testEncodingAndDecodingSamples() $is = new Swift_ByteStream_ArrayByteStream(); - $this->_encoder->encodeByteStream($os, $is); + $this->encoder->encodeByteStream($os, $is); $encoded = ''; while (false !== $bytes = $is->read(8192)) { diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/NativeQpContentEncoderAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/NativeQpContentEncoderAcceptanceTest.php index 0dfc4e2..bf0a04e 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/NativeQpContentEncoderAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/NativeQpContentEncoderAcceptanceTest.php @@ -1,34 +1,34 @@ _samplesDir = realpath(__DIR__.'/../../../../_samples/charsets'); - $this->_encoder = new Swift_Mime_ContentEncoder_NativeQpContentEncoder(); + $this->samplesDir = realpath(__DIR__.'/../../../../_samples/charsets'); + $this->encoder = new Swift_Mime_ContentEncoder_NativeQpContentEncoder(); } public function testEncodingAndDecodingSamples() { - $sampleFp = opendir($this->_samplesDir); + $sampleFp = opendir($this->samplesDir); while (false !== $encodingDir = readdir($sampleFp)) { - if (substr($encodingDir, 0, 1) == '.') { + if ('.' == substr($encodingDir, 0, 1)) { continue; } - $sampleDir = $this->_samplesDir.'/'.$encodingDir; + $sampleDir = $this->samplesDir.'/'.$encodingDir; if (is_dir($sampleDir)) { $fileFp = opendir($sampleDir); while (false !== $sampleFile = readdir($fileFp)) { - if (substr($sampleFile, 0, 1) == '.') { + if ('.' == substr($sampleFile, 0, 1)) { continue; } @@ -38,7 +38,7 @@ public function testEncodingAndDecodingSamples() $os->write($text); $is = new Swift_ByteStream_ArrayByteStream(); - $this->_encoder->encodeByteStream($os, $is); + $this->encoder->encodeByteStream($os, $is); $encoded = ''; while (false !== $bytes = $is->read(8192)) { @@ -60,7 +60,7 @@ public function testEncodingAndDecodingSamples() public function testEncodingAndDecodingSamplesFromDiConfiguredInstance() { - $encoder = $this->_createEncoderFromContainer(); + $encoder = $this->createEncoderFromContainer(); $this->assertSame('=C3=A4=C3=B6=C3=BC=C3=9F', $encoder->encodeString('äöüß')); } @@ -69,17 +69,17 @@ public function testEncodingAndDecodingSamplesFromDiConfiguredInstance() */ public function testCharsetChangeNotImplemented() { - $this->_encoder->charsetChanged('utf-8'); - $this->_encoder->charsetChanged('charset'); - $this->_encoder->encodeString('foo'); + $this->encoder->charsetChanged('utf-8'); + $this->encoder->charsetChanged('charset'); + $this->encoder->encodeString('foo'); } public function testGetName() { - $this->assertSame('quoted-printable', $this->_encoder->getName()); + $this->assertSame('quoted-printable', $this->encoder->getName()); } - private function _createEncoderFromContainer() + private function createEncoderFromContainer() { return Swift_DependencyContainer::getInstance() ->lookup('mime.nativeqpcontentencoder') diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/PlainContentEncoderAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/PlainContentEncoderAcceptanceTest.php index 5eff4e2..544873a 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/PlainContentEncoderAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/PlainContentEncoderAcceptanceTest.php @@ -1,35 +1,35 @@ _samplesDir = realpath(__DIR__.'/../../../../_samples/charsets'); - $this->_encoder = new Swift_Mime_ContentEncoder_PlainContentEncoder('8bit'); + $this->samplesDir = realpath(__DIR__.'/../../../../_samples/charsets'); + $this->encoder = new Swift_Mime_ContentEncoder_PlainContentEncoder('8bit'); } public function testEncodingAndDecodingSamplesString() { - $sampleFp = opendir($this->_samplesDir); + $sampleFp = opendir($this->samplesDir); while (false !== $encodingDir = readdir($sampleFp)) { - if (substr($encodingDir, 0, 1) == '.') { + if ('.' == substr($encodingDir, 0, 1)) { continue; } - $sampleDir = $this->_samplesDir.'/'.$encodingDir; + $sampleDir = $this->samplesDir.'/'.$encodingDir; if (is_dir($sampleDir)) { $fileFp = opendir($sampleDir); while (false !== $sampleFile = readdir($fileFp)) { - if (substr($sampleFile, 0, 1) == '.') { + if ('.' == substr($sampleFile, 0, 1)) { continue; } $text = file_get_contents($sampleDir.'/'.$sampleFile); - $encodedText = $this->_encoder->encodeString($text); + $encodedText = $this->encoder->encodeString($text); $this->assertEquals( $encodedText, $text, @@ -45,18 +45,18 @@ public function testEncodingAndDecodingSamplesString() public function testEncodingAndDecodingSamplesByteStream() { - $sampleFp = opendir($this->_samplesDir); + $sampleFp = opendir($this->samplesDir); while (false !== $encodingDir = readdir($sampleFp)) { - if (substr($encodingDir, 0, 1) == '.') { + if ('.' == substr($encodingDir, 0, 1)) { continue; } - $sampleDir = $this->_samplesDir.'/'.$encodingDir; + $sampleDir = $this->samplesDir.'/'.$encodingDir; if (is_dir($sampleDir)) { $fileFp = opendir($sampleDir); while (false !== $sampleFile = readdir($fileFp)) { - if (substr($sampleFile, 0, 1) == '.') { + if ('.' == substr($sampleFile, 0, 1)) { continue; } @@ -67,7 +67,7 @@ public function testEncodingAndDecodingSamplesByteStream() $is = new Swift_ByteStream_ArrayByteStream(); - $this->_encoder->encodeByteStream($os, $is); + $this->encoder->encodeByteStream($os, $is); $encoded = ''; while (false !== $bytes = $is->read(8192)) { diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/QpContentEncoderAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/QpContentEncoderAcceptanceTest.php index a383b58..a4a6395 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/QpContentEncoderAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/ContentEncoder/QpContentEncoderAcceptanceTest.php @@ -1,14 +1,14 @@ _samplesDir = realpath(__DIR__.'/../../../../_samples/charsets'); - $this->_factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); + $this->samplesDir = realpath(__DIR__.'/../../../../_samples/charsets'); + $this->factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); } protected function tearDown() @@ -18,23 +18,23 @@ protected function tearDown() public function testEncodingAndDecodingSamples() { - $sampleFp = opendir($this->_samplesDir); + $sampleFp = opendir($this->samplesDir); while (false !== $encodingDir = readdir($sampleFp)) { - if (substr($encodingDir, 0, 1) == '.') { + if ('.' == substr($encodingDir, 0, 1)) { continue; } $encoding = $encodingDir; - $charStream = new Swift_CharacterStream_NgCharacterStream( - $this->_factory, $encoding); + $charStream = new Swift_CharacterStream_CharacterStream( + $this->factory, $encoding); $encoder = new Swift_Mime_ContentEncoder_QpContentEncoder($charStream); - $sampleDir = $this->_samplesDir.'/'.$encodingDir; + $sampleDir = $this->samplesDir.'/'.$encodingDir; if (is_dir($sampleDir)) { $fileFp = opendir($sampleDir); while (false !== $sampleFile = readdir($fileFp)) { - if (substr($sampleFile, 0, 1) == '.') { + if ('.' == substr($sampleFile, 0, 1)) { continue; } @@ -65,21 +65,21 @@ public function testEncodingAndDecodingSamples() public function testEncodingAndDecodingSamplesFromDiConfiguredInstance() { - $sampleFp = opendir($this->_samplesDir); + $sampleFp = opendir($this->samplesDir); while (false !== $encodingDir = readdir($sampleFp)) { - if (substr($encodingDir, 0, 1) == '.') { + if ('.' == substr($encodingDir, 0, 1)) { continue; } $encoding = $encodingDir; - $encoder = $this->_createEncoderFromContainer(); + $encoder = $this->createEncoderFromContainer(); - $sampleDir = $this->_samplesDir.'/'.$encodingDir; + $sampleDir = $this->samplesDir.'/'.$encodingDir; if (is_dir($sampleDir)) { $fileFp = opendir($sampleDir); while (false !== $sampleFile = readdir($fileFp)) { - if (substr($sampleFile, 0, 1) == '.') { + if ('.' == substr($sampleFile, 0, 1)) { continue; } @@ -110,25 +110,25 @@ public function testEncodingAndDecodingSamplesFromDiConfiguredInstance() public function testEncodingLFTextWithDiConfiguredInstance() { - $encoder = $this->_createEncoderFromContainer(); + $encoder = $this->createEncoderFromContainer(); $this->assertEquals("a\r\nb\r\nc", $encoder->encodeString("a\nb\nc")); } public function testEncodingCRTextWithDiConfiguredInstance() { - $encoder = $this->_createEncoderFromContainer(); + $encoder = $this->createEncoderFromContainer(); $this->assertEquals("a\r\nb\r\nc", $encoder->encodeString("a\rb\rc")); } public function testEncodingLFCRTextWithDiConfiguredInstance() { - $encoder = $this->_createEncoderFromContainer(); + $encoder = $this->createEncoderFromContainer(); $this->assertEquals("a\r\n\r\nb\r\n\r\nc", $encoder->encodeString("a\n\rb\n\rc")); } public function testEncodingCRLFTextWithDiConfiguredInstance() { - $encoder = $this->_createEncoderFromContainer(); + $encoder = $this->createEncoderFromContainer(); $this->assertEquals("a\r\nb\r\nc", $encoder->encodeString("a\r\nb\r\nc")); } @@ -136,11 +136,11 @@ public function testEncodingDotStuffingWithDiConfiguredInstance() { // Enable DotEscaping Swift_Preferences::getInstance()->setQPDotEscape(true); - $encoder = $this->_createEncoderFromContainer(); + $encoder = $this->createEncoderFromContainer(); $this->assertEquals("a=2E\r\n=2E\r\n=2Eb\r\nc", $encoder->encodeString("a.\r\n.\r\n.b\r\nc")); // Return to default Swift_Preferences::getInstance()->setQPDotEscape(false); - $encoder = $this->_createEncoderFromContainer(); + $encoder = $this->createEncoderFromContainer(); $this->assertEquals("a.\r\n.\r\n.b\r\nc", $encoder->encodeString("a.\r\n.\r\n.b\r\nc")); } @@ -151,7 +151,7 @@ public function testDotStuffingEncodingAndDecodingSamplesFromDiConfiguredInstanc $this->testEncodingAndDecodingSamplesFromDiConfiguredInstance(); } - private function _createEncoderFromContainer() + private function createEncoderFromContainer() { return Swift_DependencyContainer::getInstance() ->lookup('mime.qpcontentencoder') diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/EmbeddedFileAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/EmbeddedFileAcceptanceTest.php index 0f7aa72..dbe5592 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/EmbeddedFileAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/EmbeddedFileAcceptanceTest.php @@ -1,35 +1,38 @@ _cache = new Swift_KeyCache_ArrayKeyCache( + $this->cache = new Swift_KeyCache_ArrayKeyCache( new Swift_KeyCache_SimpleKeyCacheInputStream() ); $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); - $this->_contentEncoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder(); + $this->contentEncoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder(); $headerEncoder = new Swift_Mime_HeaderEncoder_QpHeaderEncoder( - new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8') + new Swift_CharacterStream_CharacterStream($factory, 'utf-8') ); $paramEncoder = new Swift_Encoder_Rfc2231Encoder( - new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8') + new Swift_CharacterStream_CharacterStream($factory, 'utf-8') ); - $this->_grammar = new Swift_Mime_Grammar(); - $this->_headers = new Swift_Mime_SimpleHeaderSet( - new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $this->_grammar) + $this->emailValidator = new EmailValidator(); + $this->idGenerator = new Swift_Mime_IdGenerator('example.com'); + $this->headers = new Swift_Mime_SimpleHeaderSet( + new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $this->emailValidator) ); } public function testContentIdIsSetInHeader() { - $file = $this->_createEmbeddedFile(); + $file = $this->createEmbeddedFile(); $file->setContentType('application/pdf'); $file->setId('foo@bar'); $this->assertEquals( @@ -43,7 +46,7 @@ public function testContentIdIsSetInHeader() public function testDispositionIsSetInHeader() { - $file = $this->_createEmbeddedFile(); + $file = $this->createEmbeddedFile(); $id = $file->getId(); $file->setContentType('application/pdf'); $file->setDisposition('attachment'); @@ -58,7 +61,7 @@ public function testDispositionIsSetInHeader() public function testFilenameIsSetInHeader() { - $file = $this->_createEmbeddedFile(); + $file = $this->createEmbeddedFile(); $id = $file->getId(); $file->setContentType('application/pdf'); $file->setFilename('foo.pdf'); @@ -73,7 +76,7 @@ public function testFilenameIsSetInHeader() public function testSizeIsSetInHeader() { - $file = $this->_createEmbeddedFile(); + $file = $this->createEmbeddedFile(); $id = $file->getId(); $file->setContentType('application/pdf'); $file->setSize(12340); @@ -88,7 +91,7 @@ public function testSizeIsSetInHeader() public function testMultipleParametersInHeader() { - $file = $this->_createEmbeddedFile(); + $file = $this->createEmbeddedFile(); $id = $file->getId(); $file->setContentType('application/pdf'); $file->setFilename('foo.pdf'); @@ -105,7 +108,7 @@ public function testMultipleParametersInHeader() public function testEndToEnd() { - $file = $this->_createEmbeddedFile(); + $file = $this->createEmbeddedFile(); $id = $file->getId(); $file->setContentType('application/pdf'); $file->setFilename('foo.pdf'); @@ -122,13 +125,13 @@ public function testEndToEnd() ); } - protected function _createEmbeddedFile() + protected function createEmbeddedFile() { $entity = new Swift_Mime_EmbeddedFile( - $this->_headers, - $this->_contentEncoder, - $this->_cache, - $this->_grammar + $this->headers, + $this->contentEncoder, + $this->cache, + $this->idGenerator ); return $entity; diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/HeaderEncoder/Base64HeaderEncoderAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/HeaderEncoder/Base64HeaderEncoderAcceptanceTest.php index e3fad6d..1379513 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/HeaderEncoder/Base64HeaderEncoderAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/HeaderEncoder/Base64HeaderEncoderAcceptanceTest.php @@ -1,12 +1,12 @@ _encoder = new Swift_Mime_HeaderEncoder_Base64HeaderEncoder(); + $this->encoder = new Swift_Mime_HeaderEncoder_Base64HeaderEncoder(); } public function testEncodingJIS() @@ -15,14 +15,14 @@ public function testEncodingJIS() // base64_encode and split cannot handle long JIS text to fold $subject = '長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い長い件名'; - $encodedWrapperLength = strlen('=?iso-2022-jp?'.$this->_encoder->getName().'??='); + $encodedWrapperLength = strlen('=?iso-2022-jp?'.$this->encoder->getName().'??='); $old = mb_internal_encoding(); mb_internal_encoding('utf-8'); $newstring = mb_encode_mimeheader($subject, 'iso-2022-jp', 'B', "\r\n"); mb_internal_encoding($old); - $encoded = $this->_encoder->encodeString($subject, 0, 75 - $encodedWrapperLength, 'iso-2022-jp'); + $encoded = $this->encoder->encodeString($subject, 0, 75 - $encodedWrapperLength, 'iso-2022-jp'); $this->assertEquals( $encoded, $newstring, 'Encoded string should decode back to original string for sample ' diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/MimePartAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/MimePartAcceptanceTest.php index a7f6fc5..ec3ad72 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/MimePartAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/MimePartAcceptanceTest.php @@ -1,41 +1,44 @@ _cache = new Swift_KeyCache_ArrayKeyCache( + $this->cache = new Swift_KeyCache_ArrayKeyCache( new Swift_KeyCache_SimpleKeyCacheInputStream() ); $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); - $this->_contentEncoder = new Swift_Mime_ContentEncoder_QpContentEncoder( - new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'), + $this->contentEncoder = new Swift_Mime_ContentEncoder_QpContentEncoder( + new Swift_CharacterStream_CharacterStream($factory, 'utf-8'), new Swift_StreamFilters_ByteArrayReplacementFilter( - array(array(0x0D, 0x0A), array(0x0D), array(0x0A)), - array(array(0x0A), array(0x0A), array(0x0D, 0x0A)) + [[0x0D, 0x0A], [0x0D], [0x0A]], + [[0x0A], [0x0A], [0x0D, 0x0A]] ) ); $headerEncoder = new Swift_Mime_HeaderEncoder_QpHeaderEncoder( - new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8') + new Swift_CharacterStream_CharacterStream($factory, 'utf-8') ); $paramEncoder = new Swift_Encoder_Rfc2231Encoder( - new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8') + new Swift_CharacterStream_CharacterStream($factory, 'utf-8') ); - $this->_grammar = new Swift_Mime_Grammar(); - $this->_headers = new Swift_Mime_SimpleHeaderSet( - new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $this->_grammar) + $this->emailValidator = new EmailValidator(); + $this->idGenerator = new Swift_Mime_IdGenerator('example.com'); + $this->headers = new Swift_Mime_SimpleHeaderSet( + new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $this->emailValidator) ); } public function testCharsetIsSetInHeader() { - $part = $this->_createMimePart(); + $part = $this->createMimePart(); $part->setContentType('text/plain'); $part->setCharset('utf-8'); $part->setBody('foobar'); @@ -50,7 +53,7 @@ public function testCharsetIsSetInHeader() public function testFormatIsSetInHeaders() { - $part = $this->_createMimePart(); + $part = $this->createMimePart(); $part->setContentType('text/plain'); $part->setFormat('flowed'); $part->setBody('> foobar'); @@ -65,7 +68,7 @@ public function testFormatIsSetInHeaders() public function testDelSpIsSetInHeaders() { - $part = $this->_createMimePart(); + $part = $this->createMimePart(); $part->setContentType('text/plain'); $part->setDelSp(true); $part->setBody('foobar'); @@ -80,7 +83,7 @@ public function testDelSpIsSetInHeaders() public function testAll3ParamsInHeaders() { - $part = $this->_createMimePart(); + $part = $this->createMimePart(); $part->setContentType('text/plain'); $part->setCharset('utf-8'); $part->setFormat('fixed'); @@ -97,7 +100,7 @@ public function testAll3ParamsInHeaders() public function testBodyIsCanonicalized() { - $part = $this->_createMimePart(); + $part = $this->createMimePart(); $part->setContentType('text/plain'); $part->setCharset('utf-8'); $part->setBody("foobar\r\rtest\ning\r"); @@ -113,14 +116,14 @@ public function testBodyIsCanonicalized() ); } - protected function _createMimePart() + protected function createMimePart() { $entity = new Swift_Mime_MimePart( - $this->_headers, - $this->_contentEncoder, - $this->_cache, - $this->_grammar - ); + $this->headers, + $this->contentEncoder, + $this->cache, + $this->idGenerator + ); return $entity; } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/SimpleMessageAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/SimpleMessageAcceptanceTest.php index 912768e..1d981e7 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/SimpleMessageAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Mime/SimpleMessageAcceptanceTest.php @@ -1,6 +1,6 @@ _createMessage(); + $message = $this->createMessage(); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'From: '."\r\n". 'MIME-Version: 1.0'."\r\n". 'Content-Type: text/plain'."\r\n". @@ -29,13 +29,13 @@ public function testBasicHeaders() public function testSubjectIsDisplayedIfSet() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -47,13 +47,14 @@ public function testSubjectIsDisplayedIfSet() public function testDateCanBeSet() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); $id = $message->getId(); - $message->setDate(1234); + $date = new DateTimeImmutable(); + $message->setDate($date); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', 1234)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -65,13 +66,13 @@ public function testDateCanBeSet() public function testMessageIdCanBeSet() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); $message->setId('foo@bar'); $date = $message->getDate(); $this->assertEquals( 'Message-ID: '."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -83,14 +84,14 @@ public function testMessageIdCanBeSet() public function testContentTypeCanBeChanged() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); $message->setContentType('text/html'); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -102,7 +103,7 @@ public function testContentTypeCanBeChanged() public function testCharsetCanBeSet() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); $message->setContentType('text/html'); $message->setCharset('iso-8859-1'); @@ -110,7 +111,7 @@ public function testCharsetCanBeSet() $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -122,14 +123,14 @@ public function testCharsetCanBeSet() public function testFormatCanBeSet() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); $message->setFormat('flowed'); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -141,7 +142,7 @@ public function testFormatCanBeSet() public function testEncoderCanBeSet() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); $message->setContentType('text/html'); $message->setEncoder( @@ -151,7 +152,7 @@ public function testEncoderCanBeSet() $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -163,14 +164,14 @@ public function testEncoderCanBeSet() public function testFromAddressCanBeSet() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); $message->setFrom('chris.corbyn@swiftmailer.org'); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: chris.corbyn@swiftmailer.org'."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -182,14 +183,14 @@ public function testFromAddressCanBeSet() public function testFromAddressCanBeSetWithName() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); - $message->setFrom(array('chris.corbyn@swiftmailer.org' => 'Chris Corbyn')); + $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris Corbyn']); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris Corbyn '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -201,17 +202,17 @@ public function testFromAddressCanBeSetWithName() public function testMultipleFromAddressesCanBeSet() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); - $message->setFrom(array( + $message->setFrom([ 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', 'mark@swiftmailer.org', - )); + ]); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris Corbyn , mark@swiftmailer.org'."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -223,17 +224,17 @@ public function testMultipleFromAddressesCanBeSet() public function testReturnPathAddressCanBeSet() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setReturnPath('chris@w3style.co.uk'); $message->setSubject('just a test subject'); - $message->setFrom(array( - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', )); + $message->setFrom([ + 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Return-Path: '."\r\n". 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris Corbyn '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -245,17 +246,17 @@ public function testReturnPathAddressCanBeSet() public function testEmptyReturnPathHeaderCanBeUsed() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setReturnPath(''); $message->setSubject('just a test subject'); - $message->setFrom(array( - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', )); + $message->setFrom([ + 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Return-Path: <>'."\r\n". 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris Corbyn '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -267,7 +268,7 @@ public function testEmptyReturnPathHeaderCanBeUsed() public function testSenderCanBeSet() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); $message->setSender('chris.corbyn@swiftmailer.org'); $id = $message->getId(); @@ -275,7 +276,7 @@ public function testSenderCanBeSet() $this->assertEquals( 'Sender: chris.corbyn@swiftmailer.org'."\r\n". 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -287,15 +288,15 @@ public function testSenderCanBeSet() public function testSenderCanBeSetWithName() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); - $message->setSender(array('chris.corbyn@swiftmailer.org' => 'Chris')); + $message->setSender(['chris.corbyn@swiftmailer.org' => 'Chris']); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Sender: Chris '."\r\n". 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -307,15 +308,15 @@ public function testSenderCanBeSetWithName() public function testReplyToCanBeSet() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); - $message->setFrom(array('chris.corbyn@swiftmailer.org' => 'Chris')); - $message->setReplyTo(array('chris@w3style.co.uk' => 'Myself')); + $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']); + $message->setReplyTo(['chris@w3style.co.uk' => 'Myself']); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris '."\r\n". 'Reply-To: Myself '."\r\n". @@ -328,18 +329,18 @@ public function testReplyToCanBeSet() public function testMultipleReplyAddressCanBeUsed() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); - $message->setFrom(array('chris.corbyn@swiftmailer.org' => 'Chris')); - $message->setReplyTo(array( + $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']); + $message->setReplyTo([ 'chris@w3style.co.uk' => 'Myself', 'my.other@address.com' => 'Me', - )); + ]); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris '."\r\n". 'Reply-To: Myself , Me '."\r\n". @@ -352,19 +353,19 @@ public function testMultipleReplyAddressCanBeUsed() public function testToAddressCanBeSet() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); - $message->setFrom(array('chris.corbyn@swiftmailer.org' => 'Chris')); - $message->setReplyTo(array( + $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']); + $message->setReplyTo([ 'chris@w3style.co.uk' => 'Myself', 'my.other@address.com' => 'Me', - )); + ]); $message->setTo('mark@swiftmailer.org'); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris '."\r\n". 'Reply-To: Myself , Me '."\r\n". @@ -378,21 +379,21 @@ public function testToAddressCanBeSet() public function testMultipleToAddressesCanBeSet() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); - $message->setFrom(array('chris.corbyn@swiftmailer.org' => 'Chris')); - $message->setReplyTo(array( + $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']); + $message->setReplyTo([ 'chris@w3style.co.uk' => 'Myself', 'my.other@address.com' => 'Me', - )); - $message->setTo(array( + ]); + $message->setTo([ 'mark@swiftmailer.org', 'chris@swiftmailer.org' => 'Chris Corbyn', - )); + ]); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris '."\r\n". 'Reply-To: Myself , Me '."\r\n". @@ -406,22 +407,22 @@ public function testMultipleToAddressesCanBeSet() public function testCcAddressCanBeSet() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); - $message->setFrom(array('chris.corbyn@swiftmailer.org' => 'Chris')); - $message->setReplyTo(array( + $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']); + $message->setReplyTo([ 'chris@w3style.co.uk' => 'Myself', 'my.other@address.com' => 'Me', - )); - $message->setTo(array( + ]); + $message->setTo([ 'mark@swiftmailer.org', 'chris@swiftmailer.org' => 'Chris Corbyn', - )); + ]); $message->setCc('john@some-site.com'); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris '."\r\n". 'Reply-To: Myself , Me '."\r\n". @@ -436,25 +437,25 @@ public function testCcAddressCanBeSet() public function testMultipleCcAddressesCanBeSet() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); - $message->setFrom(array('chris.corbyn@swiftmailer.org' => 'Chris')); - $message->setReplyTo(array( + $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']); + $message->setReplyTo([ 'chris@w3style.co.uk' => 'Myself', 'my.other@address.com' => 'Me', - )); - $message->setTo(array( + ]); + $message->setTo([ 'mark@swiftmailer.org', 'chris@swiftmailer.org' => 'Chris Corbyn', - )); - $message->setCc(array( + ]); + $message->setCc([ 'john@some-site.com' => 'John West', 'fred@another-site.co.uk' => 'Big Fred', - )); + ]); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris '."\r\n". 'Reply-To: Myself , Me '."\r\n". @@ -471,26 +472,26 @@ public function testBccAddressCanBeSet() { //Obviously Transports need to setBcc(array()) and send to each Bcc recipient // separately in accordance with RFC 2822/2821 - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); - $message->setFrom(array('chris.corbyn@swiftmailer.org' => 'Chris')); - $message->setReplyTo(array( + $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']); + $message->setReplyTo([ 'chris@w3style.co.uk' => 'Myself', 'my.other@address.com' => 'Me', - )); - $message->setTo(array( + ]); + $message->setTo([ 'mark@swiftmailer.org', 'chris@swiftmailer.org' => 'Chris Corbyn', - )); - $message->setCc(array( + ]); + $message->setCc([ 'john@some-site.com' => 'John West', 'fred@another-site.co.uk' => 'Big Fred', - )); + ]); $message->setBcc('x@alphabet.tld'); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris '."\r\n". 'Reply-To: Myself , Me '."\r\n". @@ -508,26 +509,26 @@ public function testMultipleBccAddressesCanBeSet() { //Obviously Transports need to setBcc(array()) and send to each Bcc recipient // separately in accordance with RFC 2822/2821 - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setSubject('just a test subject'); - $message->setFrom(array('chris.corbyn@swiftmailer.org' => 'Chris')); - $message->setReplyTo(array( + $message->setFrom(['chris.corbyn@swiftmailer.org' => 'Chris']); + $message->setReplyTo([ 'chris@w3style.co.uk' => 'Myself', 'my.other@address.com' => 'Me', - )); - $message->setTo(array( + ]); + $message->setTo([ 'mark@swiftmailer.org', 'chris@swiftmailer.org' => 'Chris Corbyn', - )); - $message->setCc(array( + ]); + $message->setCc([ 'john@some-site.com' => 'John West', 'fred@another-site.co.uk' => 'Big Fred', - )); - $message->setBcc(array('x@alphabet.tld', 'a@alphabet.tld' => 'A')); + ]); + $message->setBcc(['x@alphabet.tld', 'a@alphabet.tld' => 'A']); $id = $message->getId(); $date = $message->getDate(); $this->assertEquals( 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris '."\r\n". 'Reply-To: Myself , Me '."\r\n". @@ -543,11 +544,11 @@ public function testMultipleBccAddressesCanBeSet() public function testStringBodyIsAppended() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setReturnPath('chris@w3style.co.uk'); $message->setSubject('just a test subject'); - $message->setFrom(array( - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', )); + $message->setFrom([ + 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); $message->setBody( 'just a test body'."\r\n". 'with a new line' @@ -557,7 +558,7 @@ public function testStringBodyIsAppended() $this->assertEquals( 'Return-Path: '."\r\n". 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris Corbyn '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -572,11 +573,11 @@ public function testStringBodyIsAppended() public function testStringBodyIsEncoded() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setReturnPath('chris@w3style.co.uk'); $message->setSubject('just a test subject'); - $message->setFrom(array( - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', )); + $message->setFrom([ + 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); $message->setBody( 'Just s'.pack('C*', 0xC2, 0x01, 0x01).'me multi-'."\r\n". 'line message!' @@ -586,7 +587,7 @@ public function testStringBodyIsEncoded() $this->assertEquals( 'Return-Path: '."\r\n". 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris Corbyn '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -601,24 +602,24 @@ public function testStringBodyIsEncoded() public function testChildrenCanBeAttached() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setReturnPath('chris@w3style.co.uk'); $message->setSubject('just a test subject'); - $message->setFrom(array( - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', )); + $message->setFrom([ + 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); $id = $message->getId(); $date = $message->getDate(); $boundary = $message->getBoundary(); - $part1 = $this->_createMimePart(); + $part1 = $this->createMimePart(); $part1->setContentType('text/plain'); $part1->setCharset('iso-8859-1'); $part1->setBody('foo'); $message->attach($part1); - $part2 = $this->_createMimePart(); + $part2 = $this->createMimePart(); $part2->setContentType('text/html'); $part2->setCharset('iso-8859-1'); $part2->setBody('test foo'); @@ -628,7 +629,7 @@ public function testChildrenCanBeAttached() $this->assertEquals( 'Return-Path: '."\r\n". 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris Corbyn '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -654,24 +655,24 @@ public function testChildrenCanBeAttached() public function testAttachmentsBeingAttached() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setReturnPath('chris@w3style.co.uk'); $message->setSubject('just a test subject'); - $message->setFrom(array( - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', )); + $message->setFrom([ + 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); $id = $message->getId(); - $date = preg_quote(date('r', $message->getDate()), '~'); + $date = preg_quote($message->getDate()->format('r'), '~'); $boundary = $message->getBoundary(); - $part = $this->_createMimePart(); + $part = $this->createMimePart(); $part->setContentType('text/plain'); $part->setCharset('iso-8859-1'); $part->setBody('foo'); $message->attach($part); - $attachment = $this->_createAttachment(); + $attachment = $this->createAttachment(); $attachment->setContentType('application/pdf'); $attachment->setFilename('foo.pdf'); $attachment->setBody(''); @@ -716,31 +717,31 @@ public function testAttachmentsBeingAttached() public function testAttachmentsAndEmbeddedFilesBeingAttached() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setReturnPath('chris@w3style.co.uk'); $message->setSubject('just a test subject'); - $message->setFrom(array( - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', )); + $message->setFrom([ + 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); $id = $message->getId(); - $date = preg_quote(date('r', $message->getDate()), '~'); + $date = preg_quote($message->getDate()->format('r'), '~'); $boundary = $message->getBoundary(); - $part = $this->_createMimePart(); + $part = $this->createMimePart(); $part->setContentType('text/plain'); $part->setCharset('iso-8859-1'); $part->setBody('foo'); $message->attach($part); - $attachment = $this->_createAttachment(); + $attachment = $this->createAttachment(); $attachment->setContentType('application/pdf'); $attachment->setFilename('foo.pdf'); $attachment->setBody(''); $message->attach($attachment); - $file = $this->_createEmbeddedFile(); + $file = $this->createEmbeddedFile(); $file->setContentType('image/jpeg'); $file->setFilename('myimage.jpg'); $file->setBody(''); @@ -802,29 +803,29 @@ public function testAttachmentsAndEmbeddedFilesBeingAttached() public function testComplexEmbeddingOfContent() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setReturnPath('chris@w3style.co.uk'); $message->setSubject('just a test subject'); - $message->setFrom(array( - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', )); + $message->setFrom([ + 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); $id = $message->getId(); - $date = preg_quote(date('r', $message->getDate()), '~'); + $date = preg_quote($message->getDate()->format('r'), '~'); $boundary = $message->getBoundary(); - $attachment = $this->_createAttachment(); + $attachment = $this->createAttachment(); $attachment->setContentType('application/pdf'); $attachment->setFilename('foo.pdf'); $attachment->setBody(''); $message->attach($attachment); - $file = $this->_createEmbeddedFile(); + $file = $this->createEmbeddedFile(); $file->setContentType('image/jpeg'); $file->setFilename('myimage.jpg'); $file->setBody(''); - $part = $this->_createMimePart(); + $part = $this->createMimePart(); $part->setContentType('text/html'); $part->setCharset('iso-8859-1'); $part->setBody('foo '); @@ -879,31 +880,31 @@ public function testComplexEmbeddingOfContent() public function testAttachingAndDetachingContent() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setReturnPath('chris@w3style.co.uk'); $message->setSubject('just a test subject'); - $message->setFrom(array( - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', )); + $message->setFrom([ + 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); $id = $message->getId(); - $date = preg_quote(date('r', $message->getDate()), '~'); + $date = preg_quote($message->getDate()->format('r'), '~'); $boundary = $message->getBoundary(); - $part = $this->_createMimePart(); + $part = $this->createMimePart(); $part->setContentType('text/plain'); $part->setCharset('iso-8859-1'); $part->setBody('foo'); $message->attach($part); - $attachment = $this->_createAttachment(); + $attachment = $this->createAttachment(); $attachment->setContentType('application/pdf'); $attachment->setFilename('foo.pdf'); $attachment->setBody(''); $message->attach($attachment); - $file = $this->_createEmbeddedFile(); + $file = $this->createEmbeddedFile(); $file->setContentType('image/jpeg'); $file->setFilename('myimage.jpg'); $file->setBody(''); @@ -954,24 +955,24 @@ public function testAttachingAndDetachingContent() public function testBoundaryDoesNotAppearAfterAllPartsAreDetached() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setReturnPath('chris@w3style.co.uk'); $message->setSubject('just a test subject'); - $message->setFrom(array( - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', )); + $message->setFrom([ + 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); $id = $message->getId(); $date = $message->getDate(); $boundary = $message->getBoundary(); - $part1 = $this->_createMimePart(); + $part1 = $this->createMimePart(); $part1->setContentType('text/plain'); $part1->setCharset('iso-8859-1'); $part1->setBody('foo'); $message->attach($part1); - $part2 = $this->_createMimePart(); + $part2 = $this->createMimePart(); $part2->setContentType('text/html'); $part2->setCharset('iso-8859-1'); $part2->setBody('test foo'); @@ -984,7 +985,7 @@ public function testBoundaryDoesNotAppearAfterAllPartsAreDetached() $this->assertEquals( 'Return-Path: '."\r\n". 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris Corbyn '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -997,11 +998,11 @@ public function testBoundaryDoesNotAppearAfterAllPartsAreDetached() public function testCharsetFormatOrDelSpAreNotShownWhenBoundaryIsSet() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setReturnPath('chris@w3style.co.uk'); $message->setSubject('just a test subject'); - $message->setFrom(array( - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', )); + $message->setFrom([ + 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); $message->setCharset('utf-8'); $message->setFormat('flowed'); $message->setDelSp(true); @@ -1010,14 +1011,14 @@ public function testCharsetFormatOrDelSpAreNotShownWhenBoundaryIsSet() $date = $message->getDate(); $boundary = $message->getBoundary(); - $part1 = $this->_createMimePart(); + $part1 = $this->createMimePart(); $part1->setContentType('text/plain'); $part1->setCharset('iso-8859-1'); $part1->setBody('foo'); $message->attach($part1); - $part2 = $this->_createMimePart(); + $part2 = $this->createMimePart(); $part2->setContentType('text/html'); $part2->setCharset('iso-8859-1'); $part2->setBody('test foo'); @@ -1027,7 +1028,7 @@ public function testCharsetFormatOrDelSpAreNotShownWhenBoundaryIsSet() $this->assertEquals( 'Return-Path: '."\r\n". 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris Corbyn '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -1053,20 +1054,20 @@ public function testCharsetFormatOrDelSpAreNotShownWhenBoundaryIsSet() public function testBodyCanBeSetWithAttachments() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setReturnPath('chris@w3style.co.uk'); $message->setSubject('just a test subject'); - $message->setFrom(array( - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', )); + $message->setFrom([ + 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); $message->setContentType('text/html'); $message->setCharset('iso-8859-1'); $message->setBody('foo'); $id = $message->getId(); - $date = date('r', $message->getDate()); + $date = $message->getDate()->format('r'); $boundary = $message->getBoundary(); - $attachment = $this->_createAttachment(); + $attachment = $this->createAttachment(); $attachment->setContentType('application/pdf'); $attachment->setFilename('foo.pdf'); $attachment->setBody(''); @@ -1103,21 +1104,21 @@ public function testBodyCanBeSetWithAttachments() public function testHtmlPartAlwaysAppearsLast() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setReturnPath('chris@w3style.co.uk'); $message->setSubject('just a test subject'); - $message->setFrom(array( - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', )); + $message->setFrom([ + 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); $id = $message->getId(); - $date = date('r', $message->getDate()); + $date = $message->getDate()->format('r'); $boundary = $message->getBoundary(); - $part1 = $this->_createMimePart(); + $part1 = $this->createMimePart(); $part1->setContentType('text/html'); $part1->setBody('foo'); - $part2 = $this->_createMimePart(); + $part2 = $this->createMimePart(); $part2->setContentType('text/plain'); $part2->setBody('bar'); @@ -1153,19 +1154,19 @@ public function testHtmlPartAlwaysAppearsLast() public function testBodyBecomesPartIfOtherPartsAttached() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setReturnPath('chris@w3style.co.uk'); $message->setSubject('just a test subject'); - $message->setFrom(array( - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', )); + $message->setFrom([ + 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); $message->setContentType('text/html'); $message->setBody('foo'); $id = $message->getId(); - $date = date('r', $message->getDate()); + $date = $message->getDate()->format('r'); $boundary = $message->getBoundary(); - $part2 = $this->_createMimePart(); + $part2 = $this->createMimePart(); $part2->setContentType('text/plain'); $part2->setBody('bar'); @@ -1200,11 +1201,11 @@ public function testBodyBecomesPartIfOtherPartsAttached() public function testBodyIsCanonicalized() { - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->setReturnPath('chris@w3style.co.uk'); $message->setSubject('just a test subject'); - $message->setFrom(array( - 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', )); + $message->setFrom([ + 'chris.corbyn@swiftmailer.org' => 'Chris Corbyn', ]); $message->setBody( 'just a test body'."\n". 'with a new line' @@ -1214,7 +1215,7 @@ public function testBodyIsCanonicalized() $this->assertEquals( 'Return-Path: '."\r\n". 'Message-ID: <'.$id.'>'."\r\n". - 'Date: '.date('r', $date)."\r\n". + 'Date: '.$date->format('r')."\r\n". 'Subject: just a test subject'."\r\n". 'From: Chris Corbyn '."\r\n". 'MIME-Version: 1.0'."\r\n". @@ -1227,22 +1228,22 @@ public function testBodyIsCanonicalized() ); } - protected function _createMessage() + protected function createMessage() { return new Swift_Message(); } - protected function _createMimePart() + protected function createMimePart() { return new Swift_MimePart(); } - protected function _createAttachment() + protected function createAttachment() { return new Swift_Attachment(); } - protected function _createEmbeddedFile() + protected function createEmbeddedFile() { return new Swift_EmbeddedFile(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/MimePartAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/MimePartAcceptanceTest.php index f42405d..581afc7 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/MimePartAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/MimePartAcceptanceTest.php @@ -5,11 +5,11 @@ class Swift_MimePartAcceptanceTest extends Swift_Mime_MimePartAcceptanceTest { - protected function _createMimePart() + protected function createMimePart() { Swift_DependencyContainer::getInstance() ->register('properties.charset')->asValue(null); - return Swift_MimePart::newInstance(); + return new Swift_MimePart(); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/AbstractStreamBufferAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/AbstractStreamBufferAcceptanceTest.php index 21abc13..9bc09f8 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/AbstractStreamBufferAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/AbstractStreamBufferAcceptanceTest.php @@ -1,10 +1,10 @@ _buffer = new Swift_Transport_StreamBuffer( + $this->buffer = new Swift_Transport_StreamBuffer( $this->getMockBuilder('Swift_ReplacementFilterFactory')->getMock() ); } public function testReadLine() { - $this->_initializeBuffer(); + $this->initializeBuffer(); - $line = $this->_buffer->readLine(0); + $line = $this->buffer->readLine(0); $this->assertRegExp('/^[0-9]{3}.*?\r\n$/D', $line); - $seq = $this->_buffer->write("QUIT\r\n"); + $seq = $this->buffer->write("QUIT\r\n"); $this->assertTrue((bool) $seq); - $line = $this->_buffer->readLine($seq); + $line = $this->buffer->readLine($seq); $this->assertRegExp('/^[0-9]{3}.*?\r\n$/D', $line); - $this->_buffer->terminate(); + $this->buffer->terminate(); } public function testWrite() { - $this->_initializeBuffer(); + $this->initializeBuffer(); - $line = $this->_buffer->readLine(0); + $line = $this->buffer->readLine(0); $this->assertRegExp('/^[0-9]{3}.*?\r\n$/D', $line); - $seq = $this->_buffer->write("HELO foo\r\n"); + $seq = $this->buffer->write("HELO foo\r\n"); $this->assertTrue((bool) $seq); - $line = $this->_buffer->readLine($seq); + $line = $this->buffer->readLine($seq); $this->assertRegExp('/^[0-9]{3}.*?\r\n$/D', $line); - $seq = $this->_buffer->write("QUIT\r\n"); + $seq = $this->buffer->write("QUIT\r\n"); $this->assertTrue((bool) $seq); - $line = $this->_buffer->readLine($seq); + $line = $this->buffer->readLine($seq); $this->assertRegExp('/^[0-9]{3}.*?\r\n$/D', $line); - $this->_buffer->terminate(); + $this->buffer->terminate(); } public function testBindingOtherStreamsMirrorsWriteOperations() { - $this->_initializeBuffer(); + $this->initializeBuffer(); - $is1 = $this->_createMockInputStream(); - $is2 = $this->_createMockInputStream(); + $is1 = $this->createMockInputStream(); + $is2 = $this->createMockInputStream(); $is1->expects($this->at(0)) ->method('write') @@ -72,37 +72,37 @@ public function testBindingOtherStreamsMirrorsWriteOperations() ->method('write') ->with('y'); - $this->_buffer->bind($is1); - $this->_buffer->bind($is2); + $this->buffer->bind($is1); + $this->buffer->bind($is2); - $this->_buffer->write('x'); - $this->_buffer->write('y'); + $this->buffer->write('x'); + $this->buffer->write('y'); } public function testBindingOtherStreamsMirrorsFlushOperations() { - $this->_initializeBuffer(); + $this->initializeBuffer(); - $is1 = $this->_createMockInputStream(); - $is2 = $this->_createMockInputStream(); + $is1 = $this->createMockInputStream(); + $is2 = $this->createMockInputStream(); $is1->expects($this->once()) ->method('flushBuffers'); $is2->expects($this->once()) ->method('flushBuffers'); - $this->_buffer->bind($is1); - $this->_buffer->bind($is2); + $this->buffer->bind($is1); + $this->buffer->bind($is2); - $this->_buffer->flushBuffers(); + $this->buffer->flushBuffers(); } public function testUnbindingStreamPreventsFurtherWrites() { - $this->_initializeBuffer(); + $this->initializeBuffer(); - $is1 = $this->_createMockInputStream(); - $is2 = $this->_createMockInputStream(); + $is1 = $this->createMockInputStream(); + $is2 = $this->createMockInputStream(); $is1->expects($this->at(0)) ->method('write') @@ -114,17 +114,17 @@ public function testUnbindingStreamPreventsFurtherWrites() ->method('write') ->with('x'); - $this->_buffer->bind($is1); - $this->_buffer->bind($is2); + $this->buffer->bind($is1); + $this->buffer->bind($is2); - $this->_buffer->write('x'); + $this->buffer->write('x'); - $this->_buffer->unbind($is2); + $this->buffer->unbind($is2); - $this->_buffer->write('y'); + $this->buffer->write('y'); } - private function _createMockInputStream() + private function createMockInputStream() { return $this->getMockBuilder('Swift_InputByteStream')->getMock(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/BasicSocketAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/BasicSocketAcceptanceTest.php index 4c3c7d3..739a7ec 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/BasicSocketAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/BasicSocketAcceptanceTest.php @@ -15,19 +15,19 @@ protected function setUp() parent::setUp(); } - protected function _initializeBuffer() + protected function initializeBuffer() { $parts = explode(':', SWIFT_SMTP_HOST); $host = $parts[0]; - $port = isset($parts[1]) ? $parts[1] : 25; + $port = $parts[1] ?? 25; - $this->_buffer->initialize(array( + $this->buffer->initialize([ 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET, 'host' => $host, 'port' => $port, 'protocol' => 'tcp', 'blocking' => 1, 'timeout' => 15, - )); + ]); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/ProcessAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/ProcessAcceptanceTest.php index a37439d..34ef3cb 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/ProcessAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/ProcessAcceptanceTest.php @@ -16,11 +16,11 @@ protected function setUp() parent::setUp(); } - protected function _initializeBuffer() + protected function initializeBuffer() { - $this->_buffer->initialize(array( + $this->buffer->initialize([ 'type' => Swift_Transport_IoBuffer::TYPE_PROCESS, 'command' => SWIFT_SENDMAIL_PATH.' -bs', - )); + ]); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SocketTimeoutTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SocketTimeoutTest.php index 59362b0..67073f8 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SocketTimeoutTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SocketTimeoutTest.php @@ -1,12 +1,10 @@ _randomHighPort = rand(50000, 65000); - $this->_server = stream_socket_server('tcp://127.0.0.1:'.$this->_randomHighPort); - if ($this->_server) { + $this->randomHighPort = random_int(50000, 65000); + $this->server = stream_socket_server('tcp://127.0.0.1:'.$this->randomHighPort); + if ($this->server) { $serverStarted = true; } } - $this->_buffer = new Swift_Transport_StreamBuffer( + $this->buffer = new Swift_Transport_StreamBuffer( $this->getMockBuilder('Swift_ReplacementFilterFactory')->getMock() ); } - protected function _initializeBuffer() + protected function initializeBuffer() { $host = '127.0.0.1'; - $port = $this->_randomHighPort; + $port = $this->randomHighPort; - $this->_buffer->initialize(array( + $this->buffer->initialize([ 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET, 'host' => $host, 'port' => $port, 'protocol' => 'tcp', 'blocking' => 1, 'timeout' => 1, - )); + ]); } public function testTimeoutException() { - $this->_initializeBuffer(); + $this->initializeBuffer(); $e = null; try { - $line = $this->_buffer->readLine(0); + $line = $this->buffer->readLine(0); } catch (Exception $e) { } $this->assertInstanceOf('Swift_IoException', $e, 'IO Exception Not Thrown On Connection Timeout'); @@ -60,8 +58,8 @@ public function testTimeoutException() protected function tearDown() { - if ($this->_server) { - stream_socket_shutdown($this->_server, STREAM_SHUT_RDWR); + if ($this->server) { + stream_socket_shutdown($this->server, STREAM_SHUT_RDWR); } } } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SslSocketAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SslSocketAcceptanceTest.php index 32e0fe8..e3bee2c 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SslSocketAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/SslSocketAcceptanceTest.php @@ -22,19 +22,19 @@ protected function setUp() parent::setUp(); } - protected function _initializeBuffer() + protected function initializeBuffer() { $parts = explode(':', SWIFT_SSL_HOST); $host = $parts[0]; - $port = isset($parts[1]) ? $parts[1] : 25; + $port = $parts[1] ?? 25; - $this->_buffer->initialize(array( + $this->buffer->initialize([ 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET, 'host' => $host, 'port' => $port, 'protocol' => 'ssl', 'blocking' => 1, 'timeout' => 15, - )); + ]); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/TlsSocketAcceptanceTest.php b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/TlsSocketAcceptanceTest.php index 1053a87..a5092a2 100644 --- a/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/TlsSocketAcceptanceTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/acceptance/Swift/Transport/StreamBuffer/TlsSocketAcceptanceTest.php @@ -21,19 +21,19 @@ protected function setUp() parent::setUp(); } - protected function _initializeBuffer() + protected function initializeBuffer() { $parts = explode(':', SWIFT_TLS_HOST); $host = $parts[0]; - $port = isset($parts[1]) ? $parts[1] : 25; + $port = $parts[1] ?? 25; - $this->_buffer->initialize(array( + $this->buffer->initialize([ 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET, 'host' => $host, 'port' => $port, 'protocol' => 'tls', 'blocking' => 1, 'timeout' => 15, - )); + ]); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug111Test.php b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug111Test.php index ba29ba8..e9085a9 100644 --- a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug111Test.php +++ b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug111Test.php @@ -1,34 +1,34 @@ array( + $complicated_header = [ + 'to' => [ 'email1@example.com', 'email2@example.com', 'email3@example.com', 'email4@example.com', 'email5@example.com', - ), - 'sub' => array( - '-name-' => array( + ], + 'sub' => [ + '-name-' => [ 'email1', '"email2"', 'email3\\', 'email4', 'email5', - ), - '-url-' => array( + ], + '-url-' => [ 'http://google.com', 'http://yahoo.com', 'http://hotmail.com', 'http://aol.com', 'http://facebook.com', - ), - ), - ); + ], + ], + ]; $json = json_encode($complicated_header); $message = new Swift_Message(); diff --git a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug118Test.php b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug118Test.php index 40b5a77..34aa136 100644 --- a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug118Test.php +++ b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug118Test.php @@ -1,19 +1,19 @@ _message = new Swift_Message(); + $this->message = new Swift_Message(); } public function testCallingGenerateIdChangesTheMessageId() { - $currentId = $this->_message->getId(); - $this->_message->generateId(); - $newId = $this->_message->getId(); + $currentId = $this->message->getId(); + $this->message->generateId(); + $newId = $this->message->getId(); $this->assertNotEquals($currentId, $newId); } diff --git a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug206Test.php b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug206Test.php index 7563f4d..da75d59 100644 --- a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug206Test.php +++ b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug206Test.php @@ -1,35 +1,37 @@ _factory = new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $grammar); + $emailValidator = new EmailValidator(); + $this->factory = new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $emailValidator); } public function testMailboxHeaderEncoding() { - $this->_testHeaderIsFullyEncoded('email@example.org', 'Family Name, Name', ' "Family Name, Name" '); - $this->_testHeaderIsFullyEncoded('email@example.org', 'Family Namé, Name', ' Family =?utf-8?Q?Nam=C3=A9=2C?= Name'); - $this->_testHeaderIsFullyEncoded('email@example.org', 'Family Namé , Name', ' Family =?utf-8?Q?Nam=C3=A9_=2C?= Name'); - $this->_testHeaderIsFullyEncoded('email@example.org', 'Family Namé ;Name', ' Family =?utf-8?Q?Nam=C3=A9_=3BName?= '); + $this->doTestHeaderIsFullyEncoded('email@example.org', 'Family Name, Name', ' "Family Name, Name" '); + $this->doTestHeaderIsFullyEncoded('email@example.org', 'Family Namé, Name', ' Family =?utf-8?Q?Nam=C3=A9=2C?= Name'); + $this->doTestHeaderIsFullyEncoded('email@example.org', 'Family Namé , Name', ' Family =?utf-8?Q?Nam=C3=A9_=2C?= Name'); + $this->doTestHeaderIsFullyEncoded('email@example.org', 'Family Namé ;Name', ' Family =?utf-8?Q?Nam=C3=A9_=3BName?= '); } - private function _testHeaderIsFullyEncoded($email, $name, $expected) + private function doTestHeaderIsFullyEncoded($email, $name, $expected) { - $mailboxHeader = $this->_factory->createMailboxHeader('To', array( + $mailboxHeader = $this->factory->createMailboxHeader('To', [ $email => $name, - )); + ]); $headerBody = substr($mailboxHeader->toString(), 3, strlen($expected)); diff --git a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug274Test.php b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug274Test.php index f5f057a..ddf6ca1 100644 --- a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug274Test.php +++ b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug274Test.php @@ -1,11 +1,14 @@ setExpectedException('Swift_IoException', 'The path cannot be empty'); $message->attach(Swift_Attachment::fromPath('')); } @@ -17,5 +20,6 @@ public function testNonEmptyFileNameAsAttachment() } catch (Exception $e) { $this->fail('Path should not be empty'); } + $this->addToAssertionCount(1); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug34Test.php b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug34Test.php index 768bf3d..0c8dd17 100644 --- a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug34Test.php +++ b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug34Test.php @@ -1,6 +1,6 @@ setCharset('utf-8'); $message->setSubject('test subject'); $message->addPart('plain part', 'text/plain'); - $image = Swift_Image::newInstance('', 'image.gif', 'image/gif'); + $image = new Swift_Image('', 'image.gif', 'image/gif'); $cid = $message->embed($image); $message->setBody('', 'text/html'); - $message->setTo(array('user@domain.tld' => 'User')); + $message->setTo(['user@domain.tld' => 'User']); - $message->setFrom(array('other@domain.tld' => 'Other')); - $message->setSender(array('other@domain.tld' => 'Other')); + $message->setFrom(['other@domain.tld' => 'Other']); + $message->setSender(['other@domain.tld' => 'Other']); $id = $message->getId(); - $date = preg_quote(date('r', $message->getDate()), '~'); + $date = preg_quote($message->getDate()->format('r'), '~'); $boundary = $message->getBoundary(); $cidVal = $image->getId(); diff --git a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug35Test.php b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug35Test.php index 98999f0..66644e9 100644 --- a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug35Test.php +++ b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug35Test.php @@ -1,6 +1,6 @@ setCharset('utf-8'); $message->setSubject('test subject'); $message->addPart('plain part', 'text/plain'); - $attachment = Swift_Attachment::newInstance('', 'image.gif', 'image/gif'); + $attachment = new Swift_Attachment('', 'image.gif', 'image/gif'); $message->attach($attachment); $message->setBody('HTML part', 'text/html'); - $message->setTo(array('user@domain.tld' => 'User')); + $message->setTo(['user@domain.tld' => 'User']); - $message->setFrom(array('other@domain.tld' => 'Other')); - $message->setSender(array('other@domain.tld' => 'Other')); + $message->setFrom(['other@domain.tld' => 'Other']); + $message->setSender(['other@domain.tld' => 'Other']); $id = $message->getId(); - $date = preg_quote(date('r', $message->getDate()), '~'); + $date = preg_quote($message->getDate()->format('r'), '~'); $boundary = $message->getBoundary(); $this->assertRegExp( diff --git a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug38Test.php b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug38Test.php index 9deae4f..472c805 100644 --- a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug38Test.php +++ b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug38Test.php @@ -1,16 +1,16 @@ _attFileName = 'data.txt'; - $this->_attFileType = 'text/plain'; - $this->_attFile = __DIR__.'/../../_samples/files/data.txt'; + $this->attFileName = 'data.txt'; + $this->attFileType = 'text/plain'; + $this->attFile = __DIR__.'/../../_samples/files/data.txt'; Swift_Preferences::getInstance()->setCharset('utf-8'); } @@ -28,7 +28,7 @@ public function testWritingMessageToByteStreamProducesCorrectStructure() $message->setBody('HTML part', 'text/html'); $id = $message->getId(); - $date = preg_quote(date('r', $message->getDate()), '~'); + $date = preg_quote($message->getDate()->format('r'), '~'); $boundary = $message->getBoundary(); $imgId = $image->getId(); @@ -82,7 +82,7 @@ public function testWritingMessageToByteStreamTwiceProducesCorrectStructure() $message->setBody('HTML part', 'text/html'); $id = $message->getId(); - $date = preg_quote(date('r', $message->getDate()), '~'); + $date = preg_quote($message->getDate()->format('r'), '~'); $boundary = $message->getBoundary(); $imgId = $image->getId(); @@ -133,14 +133,14 @@ public function testWritingMessageToByteStreamTwiceUsingAFileAttachment() $message->setCc('other@domain.tld'); $message->setFrom('user@domain.tld'); - $attachment = Swift_Attachment::fromPath($this->_attFile); + $attachment = Swift_Attachment::fromPath($this->attFile); $message->attach($attachment); $message->setBody('HTML part', 'text/html'); $id = $message->getId(); - $date = preg_quote(date('r', $message->getDate()), '~'); + $date = preg_quote($message->getDate()->format('r'), '~'); $boundary = $message->getBoundary(); $streamA = new Swift_ByteStream_ArrayByteStream(); @@ -164,11 +164,11 @@ public function testWritingMessageToByteStreamTwiceUsingAFileAttachment() 'HTML part'. "\r\n\r\n". '--'.$boundary."\r\n". - 'Content-Type: '.$this->_attFileType.'; name='.$this->_attFileName."\r\n". + 'Content-Type: '.$this->attFileType.'; name='.$this->attFileName."\r\n". 'Content-Transfer-Encoding: base64'."\r\n". - 'Content-Disposition: attachment; filename='.$this->_attFileName."\r\n". + 'Content-Disposition: attachment; filename='.$this->attFileName."\r\n". "\r\n". - preg_quote(base64_encode(file_get_contents($this->_attFile)), '~'). + preg_quote(base64_encode(file_get_contents($this->attFile)), '~'). "\r\n\r\n". '--'.$boundary.'--'."\r\n". '$~D' diff --git a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug518Test.php b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug518Test.php index b83984f..e4d1d7c 100644 --- a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug518Test.php +++ b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug518Test.php @@ -2,7 +2,7 @@ use Mockery as m; -class Swift_Bug518Test extends \PHPUnit_Framework_TestCase +class Swift_Bug518Test extends \SwiftMailerTestCase { public function testIfEmailChangesAfterQueued() { diff --git a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug51Test.php b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug51Test.php index 48074f0..fdeb89b 100644 --- a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug51Test.php +++ b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug51Test.php @@ -2,41 +2,41 @@ class Swift_Bug51Test extends \SwiftMailerTestCase { - private $_attachmentFile; - private $_outputFile; + private $attachmentFile; + private $outputFile; protected function setUp() { - $this->_attachmentFile = sys_get_temp_dir().'/attach.rand.bin'; - file_put_contents($this->_attachmentFile, ''); + $this->attachmentFile = sys_get_temp_dir().'/attach.rand.bin'; + file_put_contents($this->attachmentFile, ''); - $this->_outputFile = sys_get_temp_dir().'/attach.out.bin'; - file_put_contents($this->_outputFile, ''); + $this->outputFile = sys_get_temp_dir().'/attach.out.bin'; + file_put_contents($this->outputFile, ''); } protected function tearDown() { - unlink($this->_attachmentFile); - unlink($this->_outputFile); + unlink($this->attachmentFile); + unlink($this->outputFile); } public function testAttachmentsDoNotGetTruncatedUsingToByteStream() { //Run 100 times with 10KB attachments for ($i = 0; $i < 10; ++$i) { - $message = $this->_createMessageWithRandomAttachment( - 10000, $this->_attachmentFile + $message = $this->createMessageWithRandomAttachment( + 10000, $this->attachmentFile ); - file_put_contents($this->_outputFile, ''); + file_put_contents($this->outputFile, ''); $message->toByteStream( - new Swift_ByteStream_FileByteStream($this->_outputFile, true) + new Swift_ByteStream_FileByteStream($this->outputFile, true) ); - $emailSource = file_get_contents($this->_outputFile); + $emailSource = file_get_contents($this->outputFile); $this->assertAttachmentFromSourceMatches( - file_get_contents($this->_attachmentFile), + file_get_contents($this->attachmentFile), $emailSource ); } @@ -46,14 +46,14 @@ public function testAttachmentsDoNotGetTruncatedUsingToString() { //Run 100 times with 10KB attachments for ($i = 0; $i < 10; ++$i) { - $message = $this->_createMessageWithRandomAttachment( - 10000, $this->_attachmentFile + $message = $this->createMessageWithRandomAttachment( + 10000, $this->attachmentFile ); $emailSource = $message->toString(); $this->assertAttachmentFromSourceMatches( - file_get_contents($this->_attachmentFile), + file_get_contents($this->attachmentFile), $emailSource ); } @@ -79,7 +79,7 @@ public function assertAttachmentFromSourceMatches($attachmentData, $source) $this->assertIdenticalBinary($attachmentData, base64_decode($attachmentBase64)); } - private function _fillFileWithRandomBytes($byteCount, $file) + private function fillFileWithRandomBytes($byteCount, $file) { // I was going to use dd with if=/dev/random but this way seems more // cross platform even if a hella expensive!! @@ -87,17 +87,17 @@ private function _fillFileWithRandomBytes($byteCount, $file) file_put_contents($file, ''); $fp = fopen($file, 'wb'); for ($i = 0; $i < $byteCount; ++$i) { - $byteVal = rand(0, 255); + $byteVal = random_int(0, 255); fwrite($fp, pack('i', $byteVal)); } fclose($fp); } - private function _createMessageWithRandomAttachment($size, $attachmentPath) + private function createMessageWithRandomAttachment($size, $attachmentPath) { - $this->_fillFileWithRandomBytes($size, $attachmentPath); + $this->fillFileWithRandomBytes($size, $attachmentPath); - $message = Swift_Message::newInstance() + $message = (new Swift_Message()) ->setSubject('test') ->setBody('test') ->setFrom('a@b.c') diff --git a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug534Test.php b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug534Test.php index 263cae5..6b224f1 100644 --- a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug534Test.php +++ b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug534Test.php @@ -2,11 +2,11 @@ use Mockery as m; -class Swift_Bug534Test extends \PHPUnit_Framework_TestCase +class Swift_Bug534Test extends \SwiftMailerTestCase { public function testEmbeddedImagesAreEmbedded() { - $message = Swift_Message::newInstance() + $message = (new Swift_Message()) ->setFrom('from@example.com') ->setTo('to@example.com') ->setSubject('test') @@ -15,7 +15,7 @@ public function testEmbeddedImagesAreEmbedded() $message->setBody('', 'text/html'); $that = $this; - $messageValidation = function (Swift_Mime_Message $message) use ($that) { + $messageValidation = function (Swift_Mime_SimpleMessage $message) use ($that) { preg_match('/cid:(.*)"/', $message->toString(), $matches); $cid = $matches[1]; preg_match('/Content-ID: <(.*)>/', $message->toString(), $matches); @@ -25,7 +25,7 @@ public function testEmbeddedImagesAreEmbedded() return true; }; - $failedRecipients = array(); + $failedRecipients = []; $transport = m::mock('Swift_Transport'); $transport->shouldReceive('isStarted')->andReturn(true); diff --git a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug650Test.php b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug650Test.php index 3393fb8..60da76d 100644 --- a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug650Test.php +++ b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug650Test.php @@ -1,6 +1,8 @@ setCharset('utf-8'); - $header->setNameAddresses(array( + $header->setNameAddresses([ 'test@example.com' => $name, - )); + ]); $this->assertSame('To: '.$expectedEncodedName." \r\n", $header->toString()); } public function encodingDataProvider() { - return array( - array('this is " a test ö', 'this is =?utf-8?Q?=22?= a test =?utf-8?Q?=C3=B6?='), - array(': this is a test ö', '=?utf-8?Q?=3A?= this is a test =?utf-8?Q?=C3=B6?='), - array('( test ö', '=?utf-8?Q?=28?= test =?utf-8?Q?=C3=B6?='), - array('[ test ö', '=?utf-8?Q?=5B?= test =?utf-8?Q?=C3=B6?='), - array('@ test ö)', '=?utf-8?Q?=40?= test =?utf-8?Q?=C3=B6=29?='), - ); + return [ + ['this is " a test ö', 'this is =?utf-8?Q?=22?= a test =?utf-8?Q?=C3=B6?='], + [': this is a test ö', '=?utf-8?Q?=3A?= this is a test =?utf-8?Q?=C3=B6?='], + ['( test ö', '=?utf-8?Q?=28?= test =?utf-8?Q?=C3=B6?='], + ['[ test ö', '=?utf-8?Q?=5B?= test =?utf-8?Q?=C3=B6?='], + ['@ test ö)', '=?utf-8?Q?=40?= test =?utf-8?Q?=C3=B6=29?='], + ]; } } diff --git a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug71Test.php b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug71Test.php index d58242f..3075f67 100644 --- a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug71Test.php +++ b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug71Test.php @@ -1,20 +1,20 @@ _message = new Swift_Message('test'); + $this->message = new Swift_Message('test'); } public function testCallingToStringAfterSettingNewBodyReflectsChanges() { - $this->_message->setBody('BODY1'); - $this->assertRegExp('/BODY1/', $this->_message->toString()); + $this->message->setBody('BODY1'); + $this->assertRegExp('/BODY1/', $this->message->toString()); - $this->_message->setBody('BODY2'); - $this->assertRegExp('/BODY2/', $this->_message->toString()); + $this->message->setBody('BODY2'); + $this->assertRegExp('/BODY2/', $this->message->toString()); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug76Test.php b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug76Test.php index 899083c..1db2035 100644 --- a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug76Test.php +++ b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/Bug76Test.php @@ -1,38 +1,38 @@ _inputFile = sys_get_temp_dir().'/in.bin'; - file_put_contents($this->_inputFile, ''); + $this->inputFile = sys_get_temp_dir().'/in.bin'; + file_put_contents($this->inputFile, ''); - $this->_outputFile = sys_get_temp_dir().'/out.bin'; - file_put_contents($this->_outputFile, ''); + $this->outputFile = sys_get_temp_dir().'/out.bin'; + file_put_contents($this->outputFile, ''); - $this->_encoder = $this->_createEncoder(); + $this->encoder = $this->createEncoder(); } protected function tearDown() { - unlink($this->_inputFile); - unlink($this->_outputFile); + unlink($this->inputFile); + unlink($this->outputFile); } public function testBase64EncodedLineLengthNeverExceeds76CharactersEvenIfArgsDo() { - $this->_fillFileWithRandomBytes(1000, $this->_inputFile); + $this->fillFileWithRandomBytes(1000, $this->inputFile); - $os = $this->_createStream($this->_inputFile); - $is = $this->_createStream($this->_outputFile); + $os = $this->createStream($this->inputFile); + $is = $this->createStream($this->outputFile); - $this->_encoder->encodeByteStream($os, $is, 0, 80); //Exceeds 76 + $this->encoder->encodeByteStream($os, $is, 0, 80); //Exceeds 76 - $this->assertMaxLineLength(76, $this->_outputFile, + $this->assertMaxLineLength(76, $this->outputFile, '%s: Line length should not exceed 76 characters' ); } @@ -45,7 +45,7 @@ public function assertMaxLineLength($length, $filePath, $message = '%s') } } - private function _fillFileWithRandomBytes($byteCount, $file) + private function fillFileWithRandomBytes($byteCount, $file) { // I was going to use dd with if=/dev/random but this way seems more // cross platform even if a hella expensive!! @@ -53,18 +53,18 @@ private function _fillFileWithRandomBytes($byteCount, $file) file_put_contents($file, ''); $fp = fopen($file, 'wb'); for ($i = 0; $i < $byteCount; ++$i) { - $byteVal = rand(0, 255); + $byteVal = random_int(0, 255); fwrite($fp, pack('i', $byteVal)); } fclose($fp); } - private function _createEncoder() + private function createEncoder() { return new Swift_Mime_ContentEncoder_Base64ContentEncoder(); } - private function _createStream($file) + private function createStream($file) { return new Swift_ByteStream_FileByteStream($file, true); } diff --git a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/BugFileByteStreamConsecutiveReadCallsTest.php b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/BugFileByteStreamConsecutiveReadCallsTest.php index 35733ec..eb58071 100644 --- a/vendor/swiftmailer/swiftmailer/tests/bug/Swift/BugFileByteStreamConsecutiveReadCallsTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/bug/Swift/BugFileByteStreamConsecutiveReadCallsTest.php @@ -1,7 +1,6 @@ _attFile = __DIR__.'/../../../_samples/files/textfile.zip'; + parent::setUp(); // For skip + $this->attFile = __DIR__.'/../../../_samples/files/textfile.zip'; } public function testAttachmentSending() { - $mailer = $this->_getMailer(); - $message = Swift_Message::newInstance() + $mailer = $this->getMailer(); + $message = (new Swift_Message()) ->setSubject('[Swift Mailer] AttachmentSmokeTest') - ->setFrom(array(SWIFT_SMOKE_EMAIL_ADDRESS => 'Swift Mailer')) + ->setFrom([SWIFT_SMOKE_EMAIL_ADDRESS => 'Swift Mailer']) ->setTo(SWIFT_SMOKE_EMAIL_ADDRESS) ->setBody('This message should contain an attached ZIP file (named "textfile.zip").'.PHP_EOL. 'When unzipped, the archive should produce a text file which reads:'.PHP_EOL. - '"This is part of a Swift Mailer v4 smoke test."' + '"This is part of a Swift Mailer smoke test."' ) - ->attach(Swift_Attachment::fromPath($this->_attFile)) + ->attach(Swift_Attachment::fromPath($this->attFile)) ; $this->assertEquals(1, $mailer->send($message), '%s: The smoke test should send a single message' diff --git a/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/BasicSmokeTest.php b/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/BasicSmokeTest.php index c7501d4..79915b3 100644 --- a/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/BasicSmokeTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/BasicSmokeTest.php @@ -7,10 +7,10 @@ class Swift_Smoke_BasicSmokeTest extends SwiftMailerSmokeTestCase { public function testBasicSending() { - $mailer = $this->_getMailer(); - $message = Swift_Message::newInstance() + $mailer = $this->getMailer(); + $message = (new Swift_Message()) ->setSubject('[Swift Mailer] BasicSmokeTest') - ->setFrom(array(SWIFT_SMOKE_EMAIL_ADDRESS => 'Swift Mailer')) + ->setFrom([SWIFT_SMOKE_EMAIL_ADDRESS => 'Swift Mailer']) ->setTo(SWIFT_SMOKE_EMAIL_ADDRESS) ->setBody('One, two, three, four, five...'.PHP_EOL. 'six, seven, eight...' diff --git a/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/HtmlWithAttachmentSmokeTest.php b/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/HtmlWithAttachmentSmokeTest.php index 3b13cc5..5ed6c33 100644 --- a/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/HtmlWithAttachmentSmokeTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/HtmlWithAttachmentSmokeTest.php @@ -5,23 +5,25 @@ */ class Swift_Smoke_HtmlWithAttachmentSmokeTest extends SwiftMailerSmokeTestCase { - private $_attFile; + private $attFile; protected function setUp() { - $this->_attFile = __DIR__.'/../../../_samples/files/textfile.zip'; + parent::setUp(); + + $this->attFile = __DIR__.'/../../../_samples/files/textfile.zip'; } public function testAttachmentSending() { - $mailer = $this->_getMailer(); - $message = Swift_Message::newInstance('[Swift Mailer] HtmlWithAttachmentSmokeTest') - ->setFrom(array(SWIFT_SMOKE_EMAIL_ADDRESS => 'Swift Mailer')) + $mailer = $this->getMailer(); + $message = (new Swift_Message('[Swift Mailer] HtmlWithAttachmentSmokeTest')) + ->setFrom([SWIFT_SMOKE_EMAIL_ADDRESS => 'Swift Mailer']) ->setTo(SWIFT_SMOKE_EMAIL_ADDRESS) - ->attach(Swift_Attachment::fromPath($this->_attFile)) + ->attach(Swift_Attachment::fromPath($this->attFile)) ->setBody('

This HTML-formatted message should contain an attached ZIP file (named "textfile.zip").'.PHP_EOL. 'When unzipped, the archive should produce a text file which reads:

'.PHP_EOL. - '

This is part of a Swift Mailer v4 smoke test.

', 'text/html' + '

This is part of a Swift Mailer smoke test.

', 'text/html' ) ; $this->assertEquals(1, $mailer->send($message), diff --git a/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/InternationalSmokeTest.php b/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/InternationalSmokeTest.php index b9ebef5..6dc715e 100644 --- a/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/InternationalSmokeTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/smoke/Swift/Smoke/InternationalSmokeTest.php @@ -9,26 +9,26 @@ class Swift_Smoke_InternationalSmokeTest extends SwiftMailerSmokeTestCase protected function setUp() { - parent::setup(); // For skip - $this->_attFile = __DIR__.'/../../../_samples/files/textfile.zip'; + parent::setUp(); // For skip + $this->attFile = __DIR__.'/../../../_samples/files/textfile.zip'; } public function testAttachmentSending() { - $mailer = $this->_getMailer(); - $message = Swift_Message::newInstance() + $mailer = $this->getMailer(); + $message = (new Swift_Message()) ->setCharset('utf-8') ->setSubject('[Swift Mailer] InternationalSmokeTest (διεθνής)') - ->setFrom(array(SWIFT_SMOKE_EMAIL_ADDRESS => 'Χριστοφορου (Swift Mailer)')) + ->setFrom([SWIFT_SMOKE_EMAIL_ADDRESS => 'Χριστοφορου (Swift Mailer)']) ->setTo(SWIFT_SMOKE_EMAIL_ADDRESS) ->setBody('This message should contain an attached ZIP file (named "κείμενο, εδάφιο, θέμα.zip").'.PHP_EOL. 'When unzipped, the archive should produce a text file which reads:'.PHP_EOL. - '"This is part of a Swift Mailer v4 smoke test."'.PHP_EOL. + '"This is part of a Swift Mailer smoke test."'.PHP_EOL. PHP_EOL. 'Following is some arbitrary Greek text:'.PHP_EOL. 'Δεν βρέθηκαν λέξεις.' ) - ->attach(Swift_Attachment::fromPath($this->_attFile) + ->attach(Swift_Attachment::fromPath($this->attFile) ->setContentType('application/zip') ->setFilename('κείμενο, εδάφιο, θέμα.zip') ) diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/ByteStream/ArrayByteStreamTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/ByteStream/ArrayByteStreamTest.php index 60ebb66..29fe390 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/ByteStream/ArrayByteStreamTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/ByteStream/ArrayByteStreamTest.php @@ -1,12 +1,12 @@ _createArrayStream($input); - $output = array(); + $input = ['a', 'b', 'c']; + $bs = $this->createArrayStream($input); + $output = []; while (false !== $bytes = $bs->read(1)) { $output[] = $bytes; } @@ -17,34 +17,34 @@ public function testReadingSingleBytesFromBaseInput() public function testReadingMultipleBytesFromBaseInput() { - $input = array('a', 'b', 'c', 'd'); - $bs = $this->_createArrayStream($input); - $output = array(); + $input = ['a', 'b', 'c', 'd']; + $bs = $this->createArrayStream($input); + $output = []; while (false !== $bytes = $bs->read(2)) { $output[] = $bytes; } - $this->assertEquals(array('ab', 'cd'), $output, + $this->assertEquals(['ab', 'cd'], $output, '%s: Bytes read from stream should be in pairs' ); } public function testReadingOddOffsetOnLastByte() { - $input = array('a', 'b', 'c', 'd', 'e'); - $bs = $this->_createArrayStream($input); - $output = array(); + $input = ['a', 'b', 'c', 'd', 'e']; + $bs = $this->createArrayStream($input); + $output = []; while (false !== $bytes = $bs->read(2)) { $output[] = $bytes; } - $this->assertEquals(array('ab', 'cd', 'e'), $output, + $this->assertEquals(['ab', 'cd', 'e'], $output, '%s: Bytes read from stream should be in pairs except final read' ); } public function testSettingPointerPartway() { - $input = array('a', 'b', 'c'); - $bs = $this->_createArrayStream($input); + $input = ['a', 'b', 'c']; + $bs = $this->createArrayStream($input); $bs->setReadPointer(1); $this->assertEquals('b', $bs->read(1), '%s: Byte should be second byte since pointer as at offset 1' @@ -53,8 +53,9 @@ public function testSettingPointerPartway() public function testResettingPointerAfterExhaustion() { - $input = array('a', 'b', 'c'); - $bs = $this->_createArrayStream($input); + $input = ['a', 'b', 'c']; + + $bs = $this->createArrayStream($input); while (false !== $bs->read(1)); $bs->setReadPointer(0); @@ -65,8 +66,8 @@ public function testResettingPointerAfterExhaustion() public function testPointerNeverSetsBelowZero() { - $input = array('a', 'b', 'c'); - $bs = $this->_createArrayStream($input); + $input = ['a', 'b', 'c']; + $bs = $this->createArrayStream($input); $bs->setReadPointer(-1); $this->assertEquals('a', $bs->read(1), @@ -76,8 +77,8 @@ public function testPointerNeverSetsBelowZero() public function testPointerNeverSetsAboveStackSize() { - $input = array('a', 'b', 'c'); - $bs = $this->_createArrayStream($input); + $input = ['a', 'b', 'c']; + $bs = $this->createArrayStream($input); $bs->setReadPointer(3); $this->assertFalse($bs->read(1), @@ -87,24 +88,24 @@ public function testPointerNeverSetsAboveStackSize() public function testBytesCanBeWrittenToStream() { - $input = array('a', 'b', 'c'); - $bs = $this->_createArrayStream($input); + $input = ['a', 'b', 'c']; + $bs = $this->createArrayStream($input); $bs->write('de'); - $output = array(); + $output = []; while (false !== $bytes = $bs->read(1)) { $output[] = $bytes; } - $this->assertEquals(array('a', 'b', 'c', 'd', 'e'), $output, + $this->assertEquals(['a', 'b', 'c', 'd', 'e'], $output, '%s: Bytes read from stream should be from initial stack + written' ); } public function testContentsCanBeFlushed() { - $input = array('a', 'b', 'c'); - $bs = $this->_createArrayStream($input); + $input = ['a', 'b', 'c']; + $bs = $this->createArrayStream($input); $bs->flushBuffers(); @@ -115,19 +116,19 @@ public function testContentsCanBeFlushed() public function testConstructorCanTakeStringArgument() { - $bs = $this->_createArrayStream('abc'); - $output = array(); + $bs = $this->createArrayStream('abc'); + $output = []; while (false !== $bytes = $bs->read(1)) { $output[] = $bytes; } - $this->assertEquals(array('a', 'b', 'c'), $output, + $this->assertEquals(['a', 'b', 'c'], $output, '%s: Bytes read from stream should be the same as bytes in constructor' ); } public function testBindingOtherStreamsMirrorsWriteOperations() { - $bs = $this->_createArrayStream(''); + $bs = $this->createArrayStream(''); $is1 = $this->getMockBuilder('Swift_InputByteStream')->getMock(); $is2 = $this->getMockBuilder('Swift_InputByteStream')->getMock(); @@ -153,7 +154,7 @@ public function testBindingOtherStreamsMirrorsWriteOperations() public function testBindingOtherStreamsMirrorsFlushOperations() { - $bs = $this->_createArrayStream(''); + $bs = $this->createArrayStream(''); $is1 = $this->getMockBuilder('Swift_InputByteStream')->getMock(); $is2 = $this->getMockBuilder('Swift_InputByteStream')->getMock(); @@ -170,7 +171,7 @@ public function testBindingOtherStreamsMirrorsFlushOperations() public function testUnbindingStreamPreventsFurtherWrites() { - $bs = $this->_createArrayStream(''); + $bs = $this->createArrayStream(''); $is1 = $this->getMockBuilder('Swift_InputByteStream')->getMock(); $is2 = $this->getMockBuilder('Swift_InputByteStream')->getMock(); @@ -194,7 +195,7 @@ public function testUnbindingStreamPreventsFurtherWrites() $bs->write('y'); } - private function _createArrayStream($input) + private function createArrayStream($input) { return new Swift_ByteStream_ArrayByteStream($input); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/GenericFixedWidthReaderTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/GenericFixedWidthReaderTest.php index 3f7a46c..1ba5e78 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/GenericFixedWidthReaderTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/GenericFixedWidthReaderTest.php @@ -1,6 +1,6 @@ assertSame( - 1, $reader->validateByteSequence(array(0x01, 0x02, 0x03), 3) + 1, $reader->validateByteSequence([0x01, 0x02, 0x03], 3) ); //3 octets $this->assertSame( - 2, $reader->validateByteSequence(array(0x01, 0x0A), 2) + 2, $reader->validateByteSequence([0x01, 0x0A], 2) ); //2 octets $this->assertSame( - 3, $reader->validateByteSequence(array(0xFE), 1) + 3, $reader->validateByteSequence([0xFE], 1) ); //1 octet $this->assertSame( - 0, $reader->validateByteSequence(array(0xFE, 0x03, 0x67, 0x9A), 4) + 0, $reader->validateByteSequence([0xFE, 0x03, 0x67, 0x9A], 4) ); //All 4 octets } @@ -37,7 +37,7 @@ public function testValidationFailsIfTooManyOctets() $reader = new Swift_CharacterReader_GenericFixedWidthReader(6); $this->assertSame(-1, $reader->validateByteSequence( - array(0xFE, 0x03, 0x67, 0x9A, 0x10, 0x09, 0x85), 7 + [0xFE, 0x03, 0x67, 0x9A, 0x10, 0x09, 0x85], 7 )); //7 octets } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/UsAsciiReaderTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/UsAsciiReaderTest.php index 0d56736..b85b0ab 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/UsAsciiReaderTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/UsAsciiReaderTest.php @@ -1,6 +1,6 @@ _reader = new Swift_CharacterReader_UsAsciiReader(); + $this->reader = new Swift_CharacterReader_UsAsciiReader(); } public function testAllValidAsciiCharactersReturnZero() { for ($ordinal = 0x00; $ordinal <= 0x7F; ++$ordinal) { $this->assertSame( - 0, $this->_reader->validateByteSequence(array($ordinal), 1) + 0, $this->reader->validateByteSequence([$ordinal], 1) ); } } @@ -36,7 +36,7 @@ public function testMultipleBytesAreInvalid() { for ($ordinal = 0x00; $ordinal <= 0x7F; $ordinal += 2) { $this->assertSame( - -1, $this->_reader->validateByteSequence(array($ordinal, $ordinal + 1), 2) + -1, $this->reader->validateByteSequence([$ordinal, $ordinal + 1], 2) ); } } @@ -45,7 +45,7 @@ public function testBytesAboveAsciiRangeAreInvalid() { for ($ordinal = 0x80; $ordinal <= 0xFF; ++$ordinal) { $this->assertSame( - -1, $this->_reader->validateByteSequence(array($ordinal), 1) + -1, $this->reader->validateByteSequence([$ordinal], 1) ); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/Utf8ReaderTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/Utf8ReaderTest.php index ec17eeb..0637911 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/Utf8ReaderTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterReader/Utf8ReaderTest.php @@ -1,19 +1,19 @@ _reader = new Swift_CharacterReader_Utf8Reader(); + $this->reader = new Swift_CharacterReader_Utf8Reader(); } public function testLeading7BitOctetCausesReturnZero() { for ($ordinal = 0x00; $ordinal <= 0x7F; ++$ordinal) { $this->assertSame( - 0, $this->_reader->validateByteSequence(array($ordinal), 1) + 0, $this->reader->validateByteSequence([$ordinal], 1) ); } } @@ -22,7 +22,7 @@ public function testLeadingByteOf2OctetCharCausesReturn1() { for ($octet = 0xC0; $octet <= 0xDF; ++$octet) { $this->assertSame( - 1, $this->_reader->validateByteSequence(array($octet), 1) + 1, $this->reader->validateByteSequence([$octet], 1) ); } } @@ -31,7 +31,7 @@ public function testLeadingByteOf3OctetCharCausesReturn2() { for ($octet = 0xE0; $octet <= 0xEF; ++$octet) { $this->assertSame( - 2, $this->_reader->validateByteSequence(array($octet), 1) + 2, $this->reader->validateByteSequence([$octet], 1) ); } } @@ -40,7 +40,7 @@ public function testLeadingByteOf4OctetCharCausesReturn3() { for ($octet = 0xF0; $octet <= 0xF7; ++$octet) { $this->assertSame( - 3, $this->_reader->validateByteSequence(array($octet), 1) + 3, $this->reader->validateByteSequence([$octet], 1) ); } } @@ -49,7 +49,7 @@ public function testLeadingByteOf5OctetCharCausesReturn4() { for ($octet = 0xF8; $octet <= 0xFB; ++$octet) { $this->assertSame( - 4, $this->_reader->validateByteSequence(array($octet), 1) + 4, $this->reader->validateByteSequence([$octet], 1) ); } } @@ -58,7 +58,7 @@ public function testLeadingByteOf6OctetCharCausesReturn5() { for ($octet = 0xFC; $octet <= 0xFD; ++$octet) { $this->assertSame( - 5, $this->_reader->validateByteSequence(array($octet), 1) + 5, $this->reader->validateByteSequence([$octet], 1) ); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterStream/ArrayCharacterStreamTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterStream/ArrayCharacterStreamTest.php index 977051e..3500f9f 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterStream/ArrayCharacterStreamTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/CharacterStream/ArrayCharacterStreamTest.php @@ -1,23 +1,26 @@ _getReader(); - $factory = $this->_getFactory($reader); + $reader = $this->getReader(); + $factory = $this->getFactory($reader); $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); $reader->shouldReceive('getInitialByteSize') ->zeroOrMoreTimes() ->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD1), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); $stream->importString(pack('C*', 0xD0, 0x94, @@ -32,22 +35,22 @@ public function testValidatorAlgorithmOnImportString() public function testCharactersWrittenUseValidator() { - $reader = $this->_getReader(); - $factory = $this->_getFactory($reader); + $reader = $this->getReader(); + $factory = $this->getFactory($reader); $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); $reader->shouldReceive('getInitialByteSize') ->zeroOrMoreTimes() ->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD1), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD1), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD1), 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); $stream->importString(pack('C*', 0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE)); @@ -63,8 +66,8 @@ public function testCharactersWrittenUseValidator() public function testReadCharactersAreInTact() { - $reader = $this->_getReader(); - $factory = $this->_getFactory($reader); + $reader = $this->getReader(); + $factory = $this->getFactory($reader); $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); @@ -72,15 +75,15 @@ public function testReadCharactersAreInTact() ->zeroOrMoreTimes() ->andReturn(1); //String - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); //Stream - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD1), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD1), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD1), 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); $stream->importString(pack('C*', 0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE)); @@ -108,8 +111,8 @@ public function testReadCharactersAreInTact() public function testCharactersCanBeReadAsByteArrays() { - $reader = $this->_getReader(); - $factory = $this->_getFactory($reader); + $reader = $this->getReader(); + $factory = $this->getFactory($reader); $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); @@ -117,15 +120,15 @@ public function testCharactersCanBeReadAsByteArrays() ->zeroOrMoreTimes() ->andReturn(1); //String - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); //Stream - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD1), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD1), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD1), 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD1], 1)->andReturn(1); $stream->importString(pack('C*', 0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE)); @@ -138,30 +141,30 @@ public function testCharactersCanBeReadAsByteArrays() ) ); - $this->assertEquals(array(0xD0, 0x94), $stream->readBytes(1)); - $this->assertEquals(array(0xD0, 0xB6, 0xD0, 0xBE), $stream->readBytes(2)); - $this->assertEquals(array(0xD0, 0xBB), $stream->readBytes(1)); + $this->assertEquals([0xD0, 0x94], $stream->readBytes(1)); + $this->assertEquals([0xD0, 0xB6, 0xD0, 0xBE], $stream->readBytes(2)); + $this->assertEquals([0xD0, 0xBB], $stream->readBytes(1)); $this->assertEquals( - array(0xD1, 0x8E, 0xD0, 0xB1, 0xD1, 0x8B), $stream->readBytes(3) + [0xD1, 0x8E, 0xD0, 0xB1, 0xD1, 0x8B], $stream->readBytes(3) ); - $this->assertEquals(array(0xD1, 0x85), $stream->readBytes(1)); + $this->assertEquals([0xD1, 0x85], $stream->readBytes(1)); $this->assertFalse($stream->readBytes(1)); } public function testRequestingLargeCharCountPastEndOfStream() { - $reader = $this->_getReader(); - $factory = $this->_getFactory($reader); + $reader = $this->getReader(); + $factory = $this->getFactory($reader); $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); $reader->shouldReceive('getInitialByteSize') ->zeroOrMoreTimes() ->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); $stream->importString(pack('C*', 0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE)); @@ -174,21 +177,21 @@ public function testRequestingLargeCharCountPastEndOfStream() public function testRequestingByteArrayCountPastEndOfStream() { - $reader = $this->_getReader(); - $factory = $this->_getFactory($reader); + $reader = $this->getReader(); + $factory = $this->getFactory($reader); $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); $reader->shouldReceive('getInitialByteSize') ->zeroOrMoreTimes() ->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); $stream->importString(pack('C*', 0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE)); - $this->assertEquals(array(0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE), + $this->assertEquals([0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE], $stream->readBytes(100) ); @@ -197,17 +200,17 @@ public function testRequestingByteArrayCountPastEndOfStream() public function testPointerOffsetCanBeSet() { - $reader = $this->_getReader(); - $factory = $this->_getFactory($reader); + $reader = $this->getReader(); + $factory = $this->getFactory($reader); $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); $reader->shouldReceive('getInitialByteSize') ->zeroOrMoreTimes() ->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); $stream->importString(pack('C*', 0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE)); @@ -224,17 +227,17 @@ public function testPointerOffsetCanBeSet() public function testContentsCanBeFlushed() { - $reader = $this->_getReader(); - $factory = $this->_getFactory($reader); + $reader = $this->getReader(); + $factory = $this->getFactory($reader); $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); $reader->shouldReceive('getInitialByteSize') ->zeroOrMoreTimes() ->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); $stream->importString(pack('C*', 0xD0, 0x94, 0xD0, 0xB6, 0xD0, 0xBE)); @@ -245,9 +248,9 @@ public function testContentsCanBeFlushed() public function testByteStreamCanBeImportingUsesValidator() { - $reader = $this->_getReader(); - $factory = $this->_getFactory($reader); - $os = $this->_getByteStream(); + $reader = $this->getReader(); + $factory = $this->getFactory($reader); + $os = $this->getByteStream(); $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); @@ -267,18 +270,18 @@ public function testByteStreamCanBeImportingUsesValidator() $reader->shouldReceive('getInitialByteSize') ->zeroOrMoreTimes() ->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); $stream->importByteStream($os); } public function testImportingStreamProducesCorrectCharArray() { - $reader = $this->_getReader(); - $factory = $this->_getFactory($reader); - $os = $this->_getByteStream(); + $reader = $this->getReader(); + $factory = $this->getFactory($reader); + $os = $this->getByteStream(); $stream = new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8'); @@ -298,9 +301,9 @@ public function testImportingStreamProducesCorrectCharArray() $reader->shouldReceive('getInitialByteSize') ->zeroOrMoreTimes() ->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0), 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0], 1)->andReturn(1); $stream->importByteStream($os); @@ -313,15 +316,15 @@ public function testImportingStreamProducesCorrectCharArray() public function testAlgorithmWithFixedWidthCharsets() { - $reader = $this->_getReader(); - $factory = $this->_getFactory($reader); + $reader = $this->getReader(); + $factory = $this->getFactory($reader); $reader->shouldReceive('getInitialByteSize') ->zeroOrMoreTimes() ->andReturn(2); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD1, 0x8D), 2); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0, 0xBB), 2); - $reader->shouldReceive('validateByteSequence')->once()->with(array(0xD0, 0xB0), 2); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD1, 0x8D], 2); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0, 0xBB], 2); + $reader->shouldReceive('validateByteSequence')->once()->with([0xD0, 0xB0], 2); $stream = new Swift_CharacterStream_ArrayCharacterStream( $factory, 'utf-8' @@ -335,12 +338,12 @@ public function testAlgorithmWithFixedWidthCharsets() $this->assertFalse($stream->read(1)); } - private function _getReader() + private function getReader() { return $this->getMockery('Swift_CharacterReader'); } - private function _getFactory($reader) + private function getFactory($reader) { $factory = $this->getMockery('Swift_CharacterReaderFactory'); $factory->shouldReceive('getReaderFor') @@ -351,7 +354,7 @@ private function _getFactory($reader) return $factory; } - private function _getByteStream() + private function getByteStream() { return $this->getMockery('Swift_OutputByteStream'); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/DependencyContainerTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/DependencyContainerTest.php index ccd14f6..286f832 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/DependencyContainerTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/DependencyContainerTest.php @@ -12,165 +12,180 @@ public function __construct($arg1 = null, $arg2 = null) } } -class Swift_DependencyContainerTest extends \PHPUnit_Framework_TestCase +class Swift_DependencyContainerTest extends \PHPUnit\Framework\TestCase { - private $_container; + private $container; protected function setUp() { - $this->_container = new Swift_DependencyContainer(); + $this->container = new Swift_DependencyContainer(); } public function testRegisterAndLookupValue() { - $this->_container->register('foo')->asValue('bar'); - $this->assertEquals('bar', $this->_container->lookup('foo')); + $this->container->register('foo')->asValue('bar'); + $this->assertEquals('bar', $this->container->lookup('foo')); } public function testHasReturnsTrueForRegisteredValue() { - $this->_container->register('foo')->asValue('bar'); - $this->assertTrue($this->_container->has('foo')); + $this->container->register('foo')->asValue('bar'); + $this->assertTrue($this->container->has('foo')); } public function testHasReturnsFalseForUnregisteredValue() { - $this->assertFalse($this->_container->has('foo')); + $this->assertFalse($this->container->has('foo')); } public function testRegisterAndLookupNewInstance() { - $this->_container->register('one')->asNewInstanceOf('One'); - $this->assertInstanceOf('One', $this->_container->lookup('one')); + $this->container->register('one')->asNewInstanceOf('One'); + $this->assertInstanceOf('One', $this->container->lookup('one')); } public function testHasReturnsTrueForRegisteredInstance() { - $this->_container->register('one')->asNewInstanceOf('One'); - $this->assertTrue($this->_container->has('one')); + $this->container->register('one')->asNewInstanceOf('One'); + $this->assertTrue($this->container->has('one')); } public function testNewInstanceIsAlwaysNew() { - $this->_container->register('one')->asNewInstanceOf('One'); - $a = $this->_container->lookup('one'); - $b = $this->_container->lookup('one'); + $this->container->register('one')->asNewInstanceOf('One'); + $a = $this->container->lookup('one'); + $b = $this->container->lookup('one'); $this->assertEquals($a, $b); } public function testRegisterAndLookupSharedInstance() { - $this->_container->register('one')->asSharedInstanceOf('One'); - $this->assertInstanceOf('One', $this->_container->lookup('one')); + $this->container->register('one')->asSharedInstanceOf('One'); + $this->assertInstanceOf('One', $this->container->lookup('one')); } public function testHasReturnsTrueForSharedInstance() { - $this->_container->register('one')->asSharedInstanceOf('One'); - $this->assertTrue($this->_container->has('one')); + $this->container->register('one')->asSharedInstanceOf('One'); + $this->assertTrue($this->container->has('one')); } public function testMultipleSharedInstancesAreSameInstance() { - $this->_container->register('one')->asSharedInstanceOf('One'); - $a = $this->_container->lookup('one'); - $b = $this->_container->lookup('one'); + $this->container->register('one')->asSharedInstanceOf('One'); + $a = $this->container->lookup('one'); + $b = $this->container->lookup('one'); $this->assertEquals($a, $b); } + public function testRegisterAndLookupArray() + { + $this->container->register('One')->asArray(); + $this->assertSame([], $this->container->lookup('One')); + } + public function testNewInstanceWithDependencies() { - $this->_container->register('foo')->asValue('FOO'); - $this->_container->register('one')->asNewInstanceOf('One') - ->withDependencies(array('foo')); - $obj = $this->_container->lookup('one'); + $this->container->register('foo')->asValue('FOO'); + $this->container->register('one')->asNewInstanceOf('One') + ->withDependencies(['foo']); + $obj = $this->container->lookup('one'); $this->assertSame('FOO', $obj->arg1); } public function testNewInstanceWithMultipleDependencies() { - $this->_container->register('foo')->asValue('FOO'); - $this->_container->register('bar')->asValue(42); - $this->_container->register('one')->asNewInstanceOf('One') - ->withDependencies(array('foo', 'bar')); - $obj = $this->_container->lookup('one'); + $this->container->register('foo')->asValue('FOO'); + $this->container->register('bar')->asValue(42); + $this->container->register('one')->asNewInstanceOf('One') + ->withDependencies(['foo', 'bar']); + $obj = $this->container->lookup('one'); $this->assertSame('FOO', $obj->arg1); $this->assertSame(42, $obj->arg2); } public function testNewInstanceWithInjectedObjects() { - $this->_container->register('foo')->asValue('FOO'); - $this->_container->register('one')->asNewInstanceOf('One'); - $this->_container->register('two')->asNewInstanceOf('One') - ->withDependencies(array('one', 'foo')); - $obj = $this->_container->lookup('two'); - $this->assertEquals($this->_container->lookup('one'), $obj->arg1); + $this->container->register('foo')->asValue('FOO'); + $this->container->register('one')->asNewInstanceOf('One'); + $this->container->register('two')->asNewInstanceOf('One') + ->withDependencies(['one', 'foo']); + $obj = $this->container->lookup('two'); + $this->assertEquals($this->container->lookup('one'), $obj->arg1); $this->assertSame('FOO', $obj->arg2); } public function testNewInstanceWithAddConstructorValue() { - $this->_container->register('one')->asNewInstanceOf('One') + $this->container->register('one')->asNewInstanceOf('One') ->addConstructorValue('x') ->addConstructorValue(99); - $obj = $this->_container->lookup('one'); + $obj = $this->container->lookup('one'); $this->assertSame('x', $obj->arg1); $this->assertSame(99, $obj->arg2); } public function testNewInstanceWithAddConstructorLookup() { - $this->_container->register('foo')->asValue('FOO'); - $this->_container->register('bar')->asValue(42); - $this->_container->register('one')->asNewInstanceOf('One') + $this->container->register('foo')->asValue('FOO'); + $this->container->register('bar')->asValue(42); + $this->container->register('one')->asNewInstanceOf('One') ->addConstructorLookup('foo') ->addConstructorLookup('bar'); - $obj = $this->_container->lookup('one'); + $obj = $this->container->lookup('one'); $this->assertSame('FOO', $obj->arg1); $this->assertSame(42, $obj->arg2); } public function testResolvedDependenciesCanBeLookedUp() { - $this->_container->register('foo')->asValue('FOO'); - $this->_container->register('one')->asNewInstanceOf('One'); - $this->_container->register('two')->asNewInstanceOf('One') - ->withDependencies(array('one', 'foo')); - $deps = $this->_container->createDependenciesFor('two'); + $this->container->register('foo')->asValue('FOO'); + $this->container->register('one')->asNewInstanceOf('One'); + $this->container->register('two')->asNewInstanceOf('One') + ->withDependencies(['one', 'foo']); + $deps = $this->container->createDependenciesFor('two'); $this->assertEquals( - array($this->_container->lookup('one'), 'FOO'), $deps + [$this->container->lookup('one'), 'FOO'], $deps ); } public function testArrayOfDependenciesCanBeSpecified() { - $this->_container->register('foo')->asValue('FOO'); - $this->_container->register('one')->asNewInstanceOf('One'); - $this->_container->register('two')->asNewInstanceOf('One') - ->withDependencies(array(array('one', 'foo'), 'foo')); + $this->container->register('foo')->asValue('FOO'); + $this->container->register('one')->asNewInstanceOf('One'); + $this->container->register('two')->asNewInstanceOf('One') + ->withDependencies([['one', 'foo'], 'foo']); - $obj = $this->_container->lookup('two'); - $this->assertEquals(array($this->_container->lookup('one'), 'FOO'), $obj->arg1); + $obj = $this->container->lookup('two'); + $this->assertEquals([$this->container->lookup('one'), 'FOO'], $obj->arg1); $this->assertSame('FOO', $obj->arg2); } + public function testArrayWithDependencies() + { + $this->container->register('foo')->asValue('FOO'); + $this->container->register('bar')->asValue(42); + $this->container->register('one')->asArray('One') + ->withDependencies(['foo', 'bar']); + $this->assertSame(['FOO', 42], $this->container->lookup('one')); + } + public function testAliasCanBeSet() { - $this->_container->register('foo')->asValue('FOO'); - $this->_container->register('bar')->asAliasOf('foo'); + $this->container->register('foo')->asValue('FOO'); + $this->container->register('bar')->asAliasOf('foo'); - $this->assertSame('FOO', $this->_container->lookup('bar')); + $this->assertSame('FOO', $this->container->lookup('bar')); } public function testAliasOfAliasCanBeSet() { - $this->_container->register('foo')->asValue('FOO'); - $this->_container->register('bar')->asAliasOf('foo'); - $this->_container->register('zip')->asAliasOf('bar'); - $this->_container->register('button')->asAliasOf('zip'); + $this->container->register('foo')->asValue('FOO'); + $this->container->register('bar')->asAliasOf('foo'); + $this->container->register('zip')->asAliasOf('bar'); + $this->container->register('button')->asAliasOf('zip'); - $this->assertSame('FOO', $this->_container->lookup('button')); + $this->assertSame('FOO', $this->container->lookup('button')); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/Base64EncoderTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/Base64EncoderTest.php index b89eb9f..6387bad 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/Base64EncoderTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/Base64EncoderTest.php @@ -1,12 +1,12 @@ _encoder = new Swift_Encoder_Base64Encoder(); + $this->encoder = new Swift_Encoder_Base64Encoder(); } /* @@ -28,15 +28,15 @@ public function testInputOutputRatioIs3to4Bytes() */ $this->assertEquals( - 'MTIz', $this->_encoder->encodeString('123'), + 'MTIz', $this->encoder->encodeString('123'), '%s: 3 bytes of input should yield 4 bytes of output' ); $this->assertEquals( - 'MTIzNDU2', $this->_encoder->encodeString('123456'), + 'MTIzNDU2', $this->encoder->encodeString('123456'), '%s: 6 bytes in input should yield 8 bytes of output' ); $this->assertEquals( - 'MTIzNDU2Nzg5', $this->_encoder->encodeString('123456789'), + 'MTIzNDU2Nzg5', $this->encoder->encodeString('123456789'), '%s: 9 bytes in input should yield 12 bytes of output' ); } @@ -64,25 +64,25 @@ public function testPadLength() */ for ($i = 0; $i < 30; ++$i) { - $input = pack('C', rand(0, 255)); + $input = pack('C', random_int(0, 255)); $this->assertRegExp( - '~^[a-zA-Z0-9/\+]{2}==$~', $this->_encoder->encodeString($input), + '~^[a-zA-Z0-9/\+]{2}==$~', $this->encoder->encodeString($input), '%s: A single byte should have 2 bytes of padding' ); } for ($i = 0; $i < 30; ++$i) { - $input = pack('C*', rand(0, 255), rand(0, 255)); + $input = pack('C*', random_int(0, 255), random_int(0, 255)); $this->assertRegExp( - '~^[a-zA-Z0-9/\+]{3}=$~', $this->_encoder->encodeString($input), + '~^[a-zA-Z0-9/\+]{3}=$~', $this->encoder->encodeString($input), '%s: Two bytes should have 1 byte of padding' ); } for ($i = 0; $i < 30; ++$i) { - $input = pack('C*', rand(0, 255), rand(0, 255), rand(0, 255)); + $input = pack('C*', random_int(0, 255), random_int(0, 255), random_int(0, 255)); $this->assertRegExp( - '~^[a-zA-Z0-9/\+]{4}$~', $this->_encoder->encodeString($input), + '~^[a-zA-Z0-9/\+]{4}$~', $this->encoder->encodeString($input), '%s: Three bytes should have no padding' ); } @@ -114,7 +114,7 @@ public function testMaximumLineLengthIs76Characters() 'NUVVZXWFla'; //48 $this->assertEquals( - $output, $this->_encoder->encodeString($input), + $output, $this->encoder->encodeString($input), '%s: Lines should be no more than 76 characters' ); } @@ -141,7 +141,7 @@ public function testMaximumLineLengthCanBeSpecified() 'UlNUVVZXWFla'; //50 * $this->assertEquals( - $output, $this->_encoder->encodeString($input, 0, 50), + $output, $this->encoder->encodeString($input, 0, 50), '%s: Lines should be no more than 100 characters' ); } @@ -166,7 +166,7 @@ public function testFirstLineLengthCanBeDifferent() 'FRkdISUpLTE1OT1BRUlNUVVZXWFla'; //67 $this->assertEquals( - $output, $this->_encoder->encodeString($input, 19), + $output, $this->encoder->encodeString($input, 19), '%s: First line offset is 19 so first line should be 57 chars long' ); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/QpEncoderTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/QpEncoderTest.php index 6740f22..e67b9d8 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/QpEncoderTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/QpEncoderTest.php @@ -32,7 +32,7 @@ public function testPermittedCharactersAreNotEncoded() foreach (array_merge(range(33, 60), range(62, 126)) as $ordinal) { $char = chr($ordinal); - $charStream = $this->_createCharStream(); + $charStream = $this->createCharStream(); $charStream->shouldReceive('flushContents') ->once(); $charStream->shouldReceive('importString') @@ -40,7 +40,7 @@ public function testPermittedCharactersAreNotEncoded() ->with($char); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array($ordinal)); + ->andReturn([$ordinal]); $charStream->shouldReceive('readBytes') ->atLeast()->times(1) ->andReturn(false); @@ -82,19 +82,19 @@ public function testWhiteSpaceAtLineEndingIsEncoded() //HT $string = 'a'.$HT.$HT."\r\n".'b'; - $charStream = $this->_createCharStream(); + $charStream = $this->createCharStream(); $charStream->shouldReceive('flushContents') ->once(); $charStream->shouldReceive('importString') ->once() ->with($string); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(ord('a'))); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(0x09)); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(0x09)); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(0x0D)); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(0x0A)); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(ord('b'))); + $charStream->shouldReceive('readBytes')->once()->andReturn([ord('a')]); + $charStream->shouldReceive('readBytes')->once()->andReturn([0x09]); + $charStream->shouldReceive('readBytes')->once()->andReturn([0x09]); + $charStream->shouldReceive('readBytes')->once()->andReturn([0x0D]); + $charStream->shouldReceive('readBytes')->once()->andReturn([0x0A]); + $charStream->shouldReceive('readBytes')->once()->andReturn([ord('b')]); $charStream->shouldReceive('readBytes')->once()->andReturn(false); $encoder = new Swift_Encoder_QpEncoder($charStream); @@ -106,19 +106,19 @@ public function testWhiteSpaceAtLineEndingIsEncoded() //SPACE $string = 'a'.$SPACE.$SPACE."\r\n".'b'; - $charStream = $this->_createCharStream(); + $charStream = $this->createCharStream(); $charStream->shouldReceive('flushContents') ->once(); $charStream->shouldReceive('importString') ->once() ->with($string); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(ord('a'))); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(0x20)); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(0x20)); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(0x0D)); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(0x0A)); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(ord('b'))); + $charStream->shouldReceive('readBytes')->once()->andReturn([ord('a')]); + $charStream->shouldReceive('readBytes')->once()->andReturn([0x20]); + $charStream->shouldReceive('readBytes')->once()->andReturn([0x20]); + $charStream->shouldReceive('readBytes')->once()->andReturn([0x0D]); + $charStream->shouldReceive('readBytes')->once()->andReturn([0x0A]); + $charStream->shouldReceive('readBytes')->once()->andReturn([ord('b')]); $charStream->shouldReceive('readBytes')->once()->andReturn(false); $encoder = new Swift_Encoder_QpEncoder($charStream); @@ -159,22 +159,22 @@ public function testCRLFIsLeftAlone() $string = 'a'."\r\n".'b'."\r\n".'c'."\r\n"; - $charStream = $this->_createCharStream(); + $charStream = $this->createCharStream(); $charStream->shouldReceive('flushContents') ->once(); $charStream->shouldReceive('importString') ->once() ->with($string); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(ord('a'))); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(0x0D)); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(0x0A)); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(ord('b'))); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(0x0D)); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(0x0A)); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(ord('c'))); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(0x0D)); - $charStream->shouldReceive('readBytes')->once()->andReturn(array(0x0A)); + $charStream->shouldReceive('readBytes')->once()->andReturn([ord('a')]); + $charStream->shouldReceive('readBytes')->once()->andReturn([0x0D]); + $charStream->shouldReceive('readBytes')->once()->andReturn([0x0A]); + $charStream->shouldReceive('readBytes')->once()->andReturn([ord('b')]); + $charStream->shouldReceive('readBytes')->once()->andReturn([0x0D]); + $charStream->shouldReceive('readBytes')->once()->andReturn([0x0A]); + $charStream->shouldReceive('readBytes')->once()->andReturn([ord('c')]); + $charStream->shouldReceive('readBytes')->once()->andReturn([0x0D]); + $charStream->shouldReceive('readBytes')->once()->andReturn([0x0A]); $charStream->shouldReceive('readBytes')->once()->andReturn(false); $encoder = new Swift_Encoder_QpEncoder($charStream); @@ -195,7 +195,7 @@ public function testLinesLongerThan76CharactersAreSoftBroken() $input = str_repeat('a', 140); - $charStream = $this->_createCharStream(); + $charStream = $this->createCharStream(); $charStream->shouldReceive('flushContents') ->once(); $charStream->shouldReceive('importString') @@ -206,7 +206,7 @@ public function testLinesLongerThan76CharactersAreSoftBroken() for ($i = 0; $i < 140; ++$i) { $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('a'))); + ->andReturn([ord('a')]); if (75 == $i) { $output .= "=\r\n"; @@ -226,7 +226,7 @@ public function testMaxLineLengthCanBeSpecified() { $input = str_repeat('a', 100); - $charStream = $this->_createCharStream(); + $charStream = $this->createCharStream(); $charStream->shouldReceive('flushContents') ->once(); $charStream->shouldReceive('importString') @@ -237,7 +237,7 @@ public function testMaxLineLengthCanBeSpecified() for ($i = 0; $i < 100; ++$i) { $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('a'))); + ->andReturn([ord('a')]); if (53 == $i) { $output .= "=\r\n"; @@ -261,7 +261,7 @@ public function testBytesBelowPermittedRangeAreEncoded() foreach (range(0, 32) as $ordinal) { $char = chr($ordinal); - $charStream = $this->_createCharStream(); + $charStream = $this->createCharStream(); $charStream->shouldReceive('flushContents') ->once(); $charStream->shouldReceive('importString') @@ -269,7 +269,7 @@ public function testBytesBelowPermittedRangeAreEncoded() ->with($char); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array($ordinal)); + ->andReturn([$ordinal]); $charStream->shouldReceive('readBytes') ->atLeast()->times(1) ->andReturn(false); @@ -290,7 +290,7 @@ public function testDecimalByte61IsEncoded() $char = '='; - $charStream = $this->_createCharStream(); + $charStream = $this->createCharStream(); $charStream->shouldReceive('flushContents') ->once(); $charStream->shouldReceive('importString') @@ -298,7 +298,7 @@ public function testDecimalByte61IsEncoded() ->with($char); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(61)); + ->andReturn([61]); $charStream->shouldReceive('readBytes') ->atLeast()->times(1) ->andReturn(false); @@ -317,7 +317,7 @@ public function testBytesAbovePermittedRangeAreEncoded() foreach (range(127, 255) as $ordinal) { $char = chr($ordinal); - $charStream = $this->_createCharStream(); + $charStream = $this->createCharStream(); $charStream->shouldReceive('flushContents') ->once(); $charStream->shouldReceive('importString') @@ -325,7 +325,7 @@ public function testBytesAbovePermittedRangeAreEncoded() ->with($char); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array($ordinal)); + ->andReturn([$ordinal]); $charStream->shouldReceive('readBytes') ->atLeast()->times(1) ->andReturn(false); @@ -342,7 +342,7 @@ public function testFirstLineLengthCanBeDifferent() { $input = str_repeat('a', 140); - $charStream = $this->_createCharStream(); + $charStream = $this->createCharStream(); $charStream->shouldReceive('flushContents') ->once(); $charStream->shouldReceive('importString') @@ -353,7 +353,7 @@ public function testFirstLineLengthCanBeDifferent() for ($i = 0; $i < 140; ++$i) { $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('a'))); + ->andReturn([ord('a')]); if (53 == $i || 53 + 75 == $i) { $output .= "=\r\n"; @@ -385,7 +385,7 @@ public function testTextIsPreWrapped() ); } - private function _createCharStream() + private function createCharStream() { return $this->getMockery('Swift_CharacterStream')->shouldIgnoreMissing(); } @@ -393,7 +393,7 @@ private function _createCharStream() private function createEncoder() { $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); - $charStream = new Swift_CharacterStream_NgCharacterStream($factory, 'utf-8'); + $charStream = new Swift_CharacterStream_CharacterStream($factory, 'utf-8'); return new Swift_Encoder_QpEncoder($charStream); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/Rfc2231EncoderTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/Rfc2231EncoderTest.php index 28eae6f..0ab8aa4 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/Rfc2231EncoderTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Encoder/Rfc2231EncoderTest.php @@ -2,7 +2,7 @@ class Swift_Encoder_Rfc2231EncoderTest extends \SwiftMailerTestCase { - private $_rfc2045Token = '/^[\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E]+$/D'; + private $rfc2045Token = '/^[\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E]+$/D'; /* -- This algorithm is described in RFC 2231, but is barely touched upon except @@ -39,7 +39,7 @@ public function testEncodingAsciiCharactersProducesValidToken() $encoded = $encoder->encodeString($string); foreach (explode("\r\n", $encoded) as $line) { - $this->assertRegExp($this->_rfc2045Token, $line, + $this->assertRegExp($this->rfc2045Token, $line, '%s: Encoder should always return a valid RFC 2045 token.'); } } @@ -69,7 +69,7 @@ public function testEncodingNonAsciiCharactersProducesValidToken() $encoded = $encoder->encodeString($string); foreach (explode("\r\n", $encoded) as $line) { - $this->assertRegExp($this->_rfc2045Token, $line, + $this->assertRegExp($this->rfc2045Token, $line, '%s: Encoder should always return a valid RFC 2045 token.'); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/CommandEventTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/CommandEventTest.php index a78bc3a..2915870 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/CommandEventTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/CommandEventTest.php @@ -1,33 +1,33 @@ _createEvent($this->_createTransport(), "FOO\r\n"); + $evt = $this->createEvent($this->createTransport(), "FOO\r\n"); $this->assertEquals("FOO\r\n", $evt->getCommand()); } public function testSuccessCodesCanBeFetchedViaGetter() { - $evt = $this->_createEvent($this->_createTransport(), "FOO\r\n", array(250)); - $this->assertEquals(array(250), $evt->getSuccessCodes()); + $evt = $this->createEvent($this->createTransport(), "FOO\r\n", [250]); + $this->assertEquals([250], $evt->getSuccessCodes()); } public function testSourceIsBuffer() { - $transport = $this->_createTransport(); - $evt = $this->_createEvent($transport, "FOO\r\n"); + $transport = $this->createTransport(); + $evt = $this->createEvent($transport, "FOO\r\n"); $ref = $evt->getSource(); $this->assertEquals($transport, $ref); } - private function _createEvent(Swift_Transport $source, $command, $successCodes = array()) + private function createEvent(Swift_Transport $source, $command, $successCodes = []) { return new Swift_Events_CommandEvent($source, $command, $successCodes); } - private function _createTransport() + private function createTransport() { return $this->getMockBuilder('Swift_Transport')->getMock(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/EventObjectTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/EventObjectTest.php index 0cfe3ca..b67461f 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/EventObjectTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/EventObjectTest.php @@ -1,11 +1,11 @@ _createEvent($source); + $evt = $this->createEvent($source); $ref = $evt->getSource(); $this->assertEquals($source, $ref); } @@ -13,19 +13,19 @@ public function testEventSourceCanBeReturnedViaGetter() public function testEventDoesNotHaveCancelledBubbleWhenNew() { $source = new stdClass(); - $evt = $this->_createEvent($source); + $evt = $this->createEvent($source); $this->assertFalse($evt->bubbleCancelled()); } public function testBubbleCanBeCancelledInEvent() { $source = new stdClass(); - $evt = $this->_createEvent($source); + $evt = $this->createEvent($source); $evt->cancelBubble(); $this->assertTrue($evt->bubbleCancelled()); } - private function _createEvent($source) + private function createEvent($source) { return new Swift_Events_EventObject($source); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/ResponseEventTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/ResponseEventTest.php index 6f611ac..ba5c191 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/ResponseEventTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/ResponseEventTest.php @@ -1,10 +1,10 @@ _createEvent($this->_createTransport(), "250 Ok\r\n", true); + $evt = $this->createEvent($this->createTransport(), "250 Ok\r\n", true); $this->assertEquals("250 Ok\r\n", $evt->getResponse(), '%s: Response should be available via getResponse()' ); @@ -12,7 +12,7 @@ public function testResponseCanBeFetchViaGetter() public function testResultCanBeFetchedViaGetter() { - $evt = $this->_createEvent($this->_createTransport(), "250 Ok\r\n", false); + $evt = $this->createEvent($this->createTransport(), "250 Ok\r\n", false); $this->assertFalse($evt->isValid(), '%s: Result should be checkable via isValid()' ); @@ -20,18 +20,18 @@ public function testResultCanBeFetchedViaGetter() public function testSourceIsBuffer() { - $transport = $this->_createTransport(); - $evt = $this->_createEvent($transport, "250 Ok\r\n", true); + $transport = $this->createTransport(); + $evt = $this->createEvent($transport, "250 Ok\r\n", true); $ref = $evt->getSource(); $this->assertEquals($transport, $ref); } - private function _createEvent(Swift_Transport $source, $response, $result) + private function createEvent(Swift_Transport $source, $response, $result) { return new Swift_Events_ResponseEvent($source, $response, $result); } - private function _createTransport() + private function createTransport() { return $this->getMockBuilder('Swift_Transport')->getMock(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SendEventTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SendEventTest.php index c4a6a7e..9f55589 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SendEventTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SendEventTest.php @@ -1,13 +1,13 @@ _createMessage(); - $transport = $this->_createTransport(); + $message = $this->createMessage(); + $transport = $this->createTransport(); - $evt = $this->_createEvent($transport, $message); + $evt = $this->createEvent($transport, $message); $ref = $evt->getMessage(); $this->assertEquals($message, $ref, @@ -17,10 +17,10 @@ public function testMessageCanBeFetchedViaGetter() public function testTransportCanBeFetchViaGetter() { - $message = $this->_createMessage(); - $transport = $this->_createTransport(); + $message = $this->createMessage(); + $transport = $this->createTransport(); - $evt = $this->_createEvent($transport, $message); + $evt = $this->createEvent($transport, $message); $ref = $evt->getTransport(); $this->assertEquals($transport, $ref, @@ -30,10 +30,10 @@ public function testTransportCanBeFetchViaGetter() public function testTransportCanBeFetchViaGetSource() { - $message = $this->_createMessage(); - $transport = $this->_createTransport(); + $message = $this->createMessage(); + $transport = $this->createTransport(); - $evt = $this->_createEvent($transport, $message); + $evt = $this->createEvent($transport, $message); $ref = $evt->getSource(); $this->assertEquals($transport, $ref, @@ -43,10 +43,10 @@ public function testTransportCanBeFetchViaGetSource() public function testResultCanBeSetAndGet() { - $message = $this->_createMessage(); - $transport = $this->_createTransport(); + $message = $this->createMessage(); + $transport = $this->createTransport(); - $evt = $this->_createEvent($transport, $message); + $evt = $this->createEvent($transport, $message); $evt->setResult( Swift_Events_SendEvent::RESULT_SUCCESS | Swift_Events_SendEvent::RESULT_TENTATIVE @@ -58,40 +58,39 @@ public function testResultCanBeSetAndGet() public function testFailedRecipientsCanBeSetAndGet() { - $message = $this->_createMessage(); - $transport = $this->_createTransport(); + $message = $this->createMessage(); + $transport = $this->createTransport(); - $evt = $this->_createEvent($transport, $message); + $evt = $this->createEvent($transport, $message); - $evt->setFailedRecipients(array('foo@bar', 'zip@button')); + $evt->setFailedRecipients(['foo@bar', 'zip@button']); - $this->assertEquals(array('foo@bar', 'zip@button'), $evt->getFailedRecipients(), + $this->assertEquals(['foo@bar', 'zip@button'], $evt->getFailedRecipients(), '%s: FailedRecipients should be returned from getter' ); } public function testFailedRecipientsGetsPickedUpCorrectly() { - $message = $this->_createMessage(); - $transport = $this->_createTransport(); + $message = $this->createMessage(); + $transport = $this->createTransport(); - $evt = $this->_createEvent($transport, $message); - $this->assertEquals(array(), $evt->getFailedRecipients()); + $evt = $this->createEvent($transport, $message); + $this->assertEquals([], $evt->getFailedRecipients()); } - private function _createEvent(Swift_Transport $source, - Swift_Mime_Message $message) + private function createEvent(Swift_Transport $source, Swift_Mime_SimpleMessage $message) { return new Swift_Events_SendEvent($source, $message); } - private function _createTransport() + private function createTransport() { return $this->getMockBuilder('Swift_Transport')->getMock(); } - private function _createMessage() + private function createMessage() { - return $this->getMockBuilder('Swift_Mime_Message')->getMock(); + return $this->getMockBuilder('Swift_Mime_SimpleMessage')->disableOriginalConstructor()->getMock(); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SimpleEventDispatcherTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SimpleEventDispatcherTest.php index 3f063ff..d5dce2b 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SimpleEventDispatcherTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/SimpleEventDispatcherTest.php @@ -1,19 +1,19 @@ _dispatcher = new Swift_Events_SimpleEventDispatcher(); + $this->dispatcher = new Swift_Events_SimpleEventDispatcher(); } public function testSendEventCanBeCreated() { $transport = $this->getMockBuilder('Swift_Transport')->getMock(); - $message = $this->getMockBuilder('Swift_Mime_Message')->getMock(); - $evt = $this->_dispatcher->createSendEvent($transport, $message); + $message = $this->getMockBuilder('Swift_Mime_SimpleMessage')->disableOriginalConstructor()->getMock(); + $evt = $this->dispatcher->createSendEvent($transport, $message); $this->assertInstanceOf('Swift_Events_SendEvent', $evt); $this->assertSame($message, $evt->getMessage()); $this->assertSame($transport, $evt->getTransport()); @@ -22,17 +22,17 @@ public function testSendEventCanBeCreated() public function testCommandEventCanBeCreated() { $buf = $this->getMockBuilder('Swift_Transport')->getMock(); - $evt = $this->_dispatcher->createCommandEvent($buf, "FOO\r\n", array(250)); + $evt = $this->dispatcher->createCommandEvent($buf, "FOO\r\n", [250]); $this->assertInstanceOf('Swift_Events_CommandEvent', $evt); $this->assertSame($buf, $evt->getSource()); $this->assertEquals("FOO\r\n", $evt->getCommand()); - $this->assertEquals(array(250), $evt->getSuccessCodes()); + $this->assertEquals([250], $evt->getSuccessCodes()); } public function testResponseEventCanBeCreated() { $buf = $this->getMockBuilder('Swift_Transport')->getMock(); - $evt = $this->_dispatcher->createResponseEvent($buf, "250 Ok\r\n", true); + $evt = $this->dispatcher->createResponseEvent($buf, "250 Ok\r\n", true); $this->assertInstanceOf('Swift_Events_ResponseEvent', $evt); $this->assertSame($buf, $evt->getSource()); $this->assertEquals("250 Ok\r\n", $evt->getResponse()); @@ -42,7 +42,7 @@ public function testResponseEventCanBeCreated() public function testTransportChangeEventCanBeCreated() { $transport = $this->getMockBuilder('Swift_Transport')->getMock(); - $evt = $this->_dispatcher->createTransportChangeEvent($transport); + $evt = $this->dispatcher->createTransportChangeEvent($transport); $this->assertInstanceOf('Swift_Events_TransportChangeEvent', $evt); $this->assertSame($transport, $evt->getSource()); } @@ -51,7 +51,7 @@ public function testTransportExceptionEventCanBeCreated() { $transport = $this->getMockBuilder('Swift_Transport')->getMock(); $ex = new Swift_TransportException(''); - $evt = $this->_dispatcher->createTransportExceptionEvent($transport, $ex); + $evt = $this->dispatcher->createTransportExceptionEvent($transport, $ex); $this->assertInstanceOf('Swift_Events_TransportExceptionEvent', $evt); $this->assertSame($transport, $evt->getSource()); $this->assertSame($ex, $evt->getException()); @@ -61,13 +61,13 @@ public function testListenersAreNotifiedOfDispatchedEvent() { $transport = $this->getMockBuilder('Swift_Transport')->getMock(); - $evt = $this->_dispatcher->createTransportChangeEvent($transport); + $evt = $this->dispatcher->createTransportChangeEvent($transport); $listenerA = $this->getMockBuilder('Swift_Events_TransportChangeListener')->getMock(); $listenerB = $this->getMockBuilder('Swift_Events_TransportChangeListener')->getMock(); - $this->_dispatcher->bindEventListener($listenerA); - $this->_dispatcher->bindEventListener($listenerB); + $this->dispatcher->bindEventListener($listenerA); + $this->dispatcher->bindEventListener($listenerB); $listenerA->expects($this->once()) ->method('transportStarted') @@ -76,21 +76,21 @@ public function testListenersAreNotifiedOfDispatchedEvent() ->method('transportStarted') ->with($evt); - $this->_dispatcher->dispatchEvent($evt, 'transportStarted'); + $this->dispatcher->dispatchEvent($evt, 'transportStarted'); } public function testListenersAreOnlyCalledIfImplementingCorrectInterface() { $transport = $this->getMockBuilder('Swift_Transport')->getMock(); - $message = $this->getMockBuilder('Swift_Mime_Message')->getMock(); + $message = $this->getMockBuilder('Swift_Mime_SimpleMessage')->disableOriginalConstructor()->getMock(); - $evt = $this->_dispatcher->createSendEvent($transport, $message); + $evt = $this->dispatcher->createSendEvent($transport, $message); $targetListener = $this->getMockBuilder('Swift_Events_SendListener')->getMock(); $otherListener = $this->getMockBuilder('DummyListener')->getMock(); - $this->_dispatcher->bindEventListener($targetListener); - $this->_dispatcher->bindEventListener($otherListener); + $this->dispatcher->bindEventListener($targetListener); + $this->dispatcher->bindEventListener($otherListener); $targetListener->expects($this->once()) ->method('sendPerformed') @@ -98,21 +98,21 @@ public function testListenersAreOnlyCalledIfImplementingCorrectInterface() $otherListener->expects($this->never()) ->method('sendPerformed'); - $this->_dispatcher->dispatchEvent($evt, 'sendPerformed'); + $this->dispatcher->dispatchEvent($evt, 'sendPerformed'); } public function testListenersCanCancelBubblingOfEvent() { $transport = $this->getMockBuilder('Swift_Transport')->getMock(); - $message = $this->getMockBuilder('Swift_Mime_Message')->getMock(); + $message = $this->getMockBuilder('Swift_Mime_SimpleMessage')->disableOriginalConstructor()->getMock(); - $evt = $this->_dispatcher->createSendEvent($transport, $message); + $evt = $this->dispatcher->createSendEvent($transport, $message); $listenerA = $this->getMockBuilder('Swift_Events_SendListener')->getMock(); $listenerB = $this->getMockBuilder('Swift_Events_SendListener')->getMock(); - $this->_dispatcher->bindEventListener($listenerA); - $this->_dispatcher->bindEventListener($listenerB); + $this->dispatcher->bindEventListener($listenerA); + $this->dispatcher->bindEventListener($listenerB); $listenerA->expects($this->once()) ->method('sendPerformed') @@ -123,12 +123,12 @@ public function testListenersCanCancelBubblingOfEvent() $listenerB->expects($this->never()) ->method('sendPerformed'); - $this->_dispatcher->dispatchEvent($evt, 'sendPerformed'); + $this->dispatcher->dispatchEvent($evt, 'sendPerformed'); $this->assertTrue($evt->bubbleCancelled()); } - private function _createDispatcher(array $map) + private function createDispatcher(array $map) { return new Swift_Events_SimpleEventDispatcher($map); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportChangeEventTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportChangeEventTest.php index a260ccb..625b96c 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportChangeEventTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportChangeEventTest.php @@ -1,29 +1,29 @@ _createTransport(); - $evt = $this->_createEvent($transport); + $transport = $this->createTransport(); + $evt = $this->createEvent($transport); $ref = $evt->getTransport(); $this->assertEquals($transport, $ref); } public function testSourceIsTransport() { - $transport = $this->_createTransport(); - $evt = $this->_createEvent($transport); + $transport = $this->createTransport(); + $evt = $this->createEvent($transport); $ref = $evt->getSource(); $this->assertEquals($transport, $ref); } - private function _createEvent(Swift_Transport $source) + private function createEvent(Swift_Transport $source) { return new Swift_Events_TransportChangeEvent($source); } - private function _createTransport() + private function createTransport() { return $this->getMockBuilder('Swift_Transport')->getMock(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportExceptionEventTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportExceptionEventTest.php index 731dfad..033b0e5 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportExceptionEventTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Events/TransportExceptionEventTest.php @@ -1,12 +1,12 @@ _createException(); - $transport = $this->_createTransport(); - $evt = $this->_createEvent($transport, $ex); + $ex = $this->createException(); + $transport = $this->createTransport(); + $evt = $this->createEvent($transport, $ex); $ref = $evt->getException(); $this->assertEquals($ex, $ref, '%s: Exception should be available via getException()' @@ -15,26 +15,26 @@ public function testExceptionCanBeFetchViaGetter() public function testSourceIsTransport() { - $ex = $this->_createException(); - $transport = $this->_createTransport(); - $evt = $this->_createEvent($transport, $ex); + $ex = $this->createException(); + $transport = $this->createTransport(); + $evt = $this->createEvent($transport, $ex); $ref = $evt->getSource(); $this->assertEquals($transport, $ref, '%s: Transport should be available via getSource()' ); } - private function _createEvent(Swift_Transport $transport, Swift_TransportException $ex) + private function createEvent(Swift_Transport $transport, Swift_TransportException $ex) { return new Swift_Events_TransportExceptionEvent($transport, $ex); } - private function _createTransport() + private function createTransport() { return $this->getMockBuilder('Swift_Transport')->getMock(); } - private function _createException() + private function createException() { return new Swift_TransportException(''); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/ArrayKeyCacheTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/ArrayKeyCacheTest.php index f2ed5dd..129c99e 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/ArrayKeyCacheTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/ArrayKeyCacheTest.php @@ -1,92 +1,92 @@ _createKeyCacheInputStream(); - $cache = $this->_createCache($is); + $is = $this->createKeyCacheInputStream(); + $cache = $this->createCache($is); $cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->assertEquals('test', $cache->getString($this->_key1, 'foo')); + $this->assertEquals('test', $cache->getString($this->key1, 'foo')); } public function testStringDataCanBeOverwritten() { - $is = $this->_createKeyCacheInputStream(); - $cache = $this->_createCache($is); + $is = $this->createKeyCacheInputStream(); + $cache = $this->createCache($is); $cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); $cache->setString( - $this->_key1, 'foo', 'whatever', Swift_KeyCache::MODE_WRITE + $this->key1, 'foo', 'whatever', Swift_KeyCache::MODE_WRITE ); - $this->assertEquals('whatever', $cache->getString($this->_key1, 'foo')); + $this->assertEquals('whatever', $cache->getString($this->key1, 'foo')); } public function testStringDataCanBeAppended() { - $is = $this->_createKeyCacheInputStream(); - $cache = $this->_createCache($is); + $is = $this->createKeyCacheInputStream(); + $cache = $this->createCache($is); $cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); $cache->setString( - $this->_key1, 'foo', 'ing', Swift_KeyCache::MODE_APPEND + $this->key1, 'foo', 'ing', Swift_KeyCache::MODE_APPEND ); - $this->assertEquals('testing', $cache->getString($this->_key1, 'foo')); + $this->assertEquals('testing', $cache->getString($this->key1, 'foo')); } public function testHasKeyReturnValue() { - $is = $this->_createKeyCacheInputStream(); - $cache = $this->_createCache($is); + $is = $this->createKeyCacheInputStream(); + $cache = $this->createCache($is); $cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->assertTrue($cache->hasKey($this->_key1, 'foo')); + $this->assertTrue($cache->hasKey($this->key1, 'foo')); } public function testNsKeyIsWellPartitioned() { - $is = $this->_createKeyCacheInputStream(); - $cache = $this->_createCache($is); + $is = $this->createKeyCacheInputStream(); + $cache = $this->createCache($is); $cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); $cache->setString( - $this->_key2, 'foo', 'ing', Swift_KeyCache::MODE_WRITE + $this->key2, 'foo', 'ing', Swift_KeyCache::MODE_WRITE ); - $this->assertEquals('test', $cache->getString($this->_key1, 'foo')); - $this->assertEquals('ing', $cache->getString($this->_key2, 'foo')); + $this->assertEquals('test', $cache->getString($this->key1, 'foo')); + $this->assertEquals('ing', $cache->getString($this->key2, 'foo')); } public function testItemKeyIsWellPartitioned() { - $is = $this->_createKeyCacheInputStream(); - $cache = $this->_createCache($is); + $is = $this->createKeyCacheInputStream(); + $cache = $this->createCache($is); $cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); $cache->setString( - $this->_key1, 'bar', 'ing', Swift_KeyCache::MODE_WRITE + $this->key1, 'bar', 'ing', Swift_KeyCache::MODE_WRITE ); - $this->assertEquals('test', $cache->getString($this->_key1, 'foo')); - $this->assertEquals('ing', $cache->getString($this->_key1, 'bar')); + $this->assertEquals('test', $cache->getString($this->key1, 'foo')); + $this->assertEquals('ing', $cache->getString($this->key1, 'bar')); } public function testByteStreamCanBeImported() { - $os = $this->_createOutputStream(); + $os = $this->createOutputStream(); $os->expects($this->at(0)) ->method('read') ->will($this->returnValue('abc')); @@ -97,17 +97,17 @@ public function testByteStreamCanBeImported() ->method('read') ->will($this->returnValue(false)); - $is = $this->_createKeyCacheInputStream(); - $cache = $this->_createCache($is); + $is = $this->createKeyCacheInputStream(); + $cache = $this->createCache($is); $cache->importFromByteStream( - $this->_key1, 'foo', $os, Swift_KeyCache::MODE_WRITE + $this->key1, 'foo', $os, Swift_KeyCache::MODE_WRITE ); - $this->assertEquals('abcdef', $cache->getString($this->_key1, 'foo')); + $this->assertEquals('abcdef', $cache->getString($this->key1, 'foo')); } public function testByteStreamCanBeAppended() { - $os1 = $this->_createOutputStream(); + $os1 = $this->createOutputStream(); $os1->expects($this->at(0)) ->method('read') ->will($this->returnValue('abc')); @@ -118,7 +118,7 @@ public function testByteStreamCanBeAppended() ->method('read') ->will($this->returnValue(false)); - $os2 = $this->_createOutputStream(); + $os2 = $this->createOutputStream(); $os2->expects($this->at(0)) ->method('read') ->will($this->returnValue('xyz')); @@ -129,23 +129,23 @@ public function testByteStreamCanBeAppended() ->method('read') ->will($this->returnValue(false)); - $is = $this->_createKeyCacheInputStream(true); + $is = $this->createKeyCacheInputStream(true); - $cache = $this->_createCache($is); + $cache = $this->createCache($is); $cache->importFromByteStream( - $this->_key1, 'foo', $os1, Swift_KeyCache::MODE_APPEND + $this->key1, 'foo', $os1, Swift_KeyCache::MODE_APPEND ); $cache->importFromByteStream( - $this->_key1, 'foo', $os2, Swift_KeyCache::MODE_APPEND + $this->key1, 'foo', $os2, Swift_KeyCache::MODE_APPEND ); - $this->assertEquals('abcdefxyzuvw', $cache->getString($this->_key1, 'foo')); + $this->assertEquals('abcdefxyzuvw', $cache->getString($this->key1, 'foo')); } public function testByteStreamAndStringCanBeAppended() { - $os = $this->_createOutputStream(); + $os = $this->createOutputStream(); $os->expects($this->at(0)) ->method('read') ->will($this->returnValue('abc')); @@ -156,84 +156,84 @@ public function testByteStreamAndStringCanBeAppended() ->method('read') ->will($this->returnValue(false)); - $is = $this->_createKeyCacheInputStream(true); + $is = $this->createKeyCacheInputStream(true); - $cache = $this->_createCache($is); + $cache = $this->createCache($is); $cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_APPEND + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_APPEND ); $cache->importFromByteStream( - $this->_key1, 'foo', $os, Swift_KeyCache::MODE_APPEND + $this->key1, 'foo', $os, Swift_KeyCache::MODE_APPEND ); - $this->assertEquals('testabcdef', $cache->getString($this->_key1, 'foo')); + $this->assertEquals('testabcdef', $cache->getString($this->key1, 'foo')); } public function testDataCanBeExportedToByteStream() { //See acceptance test for more detail - $is = $this->_createInputStream(); + $is = $this->createInputStream(); $is->expects($this->atLeastOnce()) ->method('write'); - $kcis = $this->_createKeyCacheInputStream(true); + $kcis = $this->createKeyCacheInputStream(true); - $cache = $this->_createCache($kcis); + $cache = $this->createCache($kcis); $cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $cache->exportToByteStream($this->_key1, 'foo', $is); + $cache->exportToByteStream($this->key1, 'foo', $is); } public function testKeyCanBeCleared() { - $is = $this->_createKeyCacheInputStream(); - $cache = $this->_createCache($is); + $is = $this->createKeyCacheInputStream(); + $cache = $this->createCache($is); $cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); - $this->assertTrue($cache->hasKey($this->_key1, 'foo')); - $cache->clearKey($this->_key1, 'foo'); - $this->assertFalse($cache->hasKey($this->_key1, 'foo')); + $this->assertTrue($cache->hasKey($this->key1, 'foo')); + $cache->clearKey($this->key1, 'foo'); + $this->assertFalse($cache->hasKey($this->key1, 'foo')); } public function testNsKeyCanBeCleared() { - $is = $this->_createKeyCacheInputStream(); - $cache = $this->_createCache($is); + $is = $this->createKeyCacheInputStream(); + $cache = $this->createCache($is); $cache->setString( - $this->_key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE + $this->key1, 'foo', 'test', Swift_KeyCache::MODE_WRITE ); $cache->setString( - $this->_key1, 'bar', 'xyz', Swift_KeyCache::MODE_WRITE + $this->key1, 'bar', 'xyz', Swift_KeyCache::MODE_WRITE ); - $this->assertTrue($cache->hasKey($this->_key1, 'foo')); - $this->assertTrue($cache->hasKey($this->_key1, 'bar')); - $cache->clearAll($this->_key1); - $this->assertFalse($cache->hasKey($this->_key1, 'foo')); - $this->assertFalse($cache->hasKey($this->_key1, 'bar')); + $this->assertTrue($cache->hasKey($this->key1, 'foo')); + $this->assertTrue($cache->hasKey($this->key1, 'bar')); + $cache->clearAll($this->key1); + $this->assertFalse($cache->hasKey($this->key1, 'foo')); + $this->assertFalse($cache->hasKey($this->key1, 'bar')); } - private function _createCache($is) + private function createCache($is) { return new Swift_KeyCache_ArrayKeyCache($is); } - private function _createKeyCacheInputStream() + private function createKeyCacheInputStream() { return $this->getMockBuilder('Swift_KeyCache_KeyCacheInputStream')->getMock(); } - private function _createOutputStream() + private function createOutputStream() { return $this->getMockBuilder('Swift_OutputByteStream')->getMock(); } - private function _createInputStream() + private function createInputStream() { return $this->getMockBuilder('Swift_InputByteStream')->getMock(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/SimpleKeyCacheInputStreamTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/SimpleKeyCacheInputStreamTest.php index 38fbc0d..4274aaf 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/SimpleKeyCacheInputStreamTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/KeyCache/SimpleKeyCacheInputStreamTest.php @@ -1,25 +1,25 @@ getMockBuilder('Swift_KeyCache')->getMock(); $cache->expects($this->at(0)) ->method('setString') - ->with($this->_nsKey, 'foo', 'a', Swift_KeyCache::MODE_APPEND); + ->with($this->nsKey, 'foo', 'a', Swift_KeyCache::MODE_APPEND); $cache->expects($this->at(1)) ->method('setString') - ->with($this->_nsKey, 'foo', 'b', Swift_KeyCache::MODE_APPEND); + ->with($this->nsKey, 'foo', 'b', Swift_KeyCache::MODE_APPEND); $cache->expects($this->at(2)) ->method('setString') - ->with($this->_nsKey, 'foo', 'c', Swift_KeyCache::MODE_APPEND); + ->with($this->nsKey, 'foo', 'c', Swift_KeyCache::MODE_APPEND); $stream = new Swift_KeyCache_SimpleKeyCacheInputStream(); $stream->setKeyCache($cache); - $stream->setNsKey($this->_nsKey); + $stream->setNsKey($this->nsKey); $stream->setItemKey('foo'); $stream->write('a'); @@ -32,11 +32,11 @@ public function testFlushContentClearsKey() $cache = $this->getMockBuilder('Swift_KeyCache')->getMock(); $cache->expects($this->once()) ->method('clearKey') - ->with($this->_nsKey, 'foo'); + ->with($this->nsKey, 'foo'); $stream = new Swift_KeyCache_SimpleKeyCacheInputStream(); $stream->setKeyCache($cache); - $stream->setNsKey($this->_nsKey); + $stream->setNsKey($this->nsKey); $stream->setItemKey('foo'); $stream->flushBuffers(); @@ -47,17 +47,17 @@ public function testClonedStreamStillReferencesSameCache() $cache = $this->getMockBuilder('Swift_KeyCache')->getMock(); $cache->expects($this->at(0)) ->method('setString') - ->with($this->_nsKey, 'foo', 'a', Swift_KeyCache::MODE_APPEND); + ->with($this->nsKey, 'foo', 'a', Swift_KeyCache::MODE_APPEND); $cache->expects($this->at(1)) ->method('setString') - ->with($this->_nsKey, 'foo', 'b', Swift_KeyCache::MODE_APPEND); + ->with($this->nsKey, 'foo', 'b', Swift_KeyCache::MODE_APPEND); $cache->expects($this->at(2)) ->method('setString') ->with('test', 'bar', 'x', Swift_KeyCache::MODE_APPEND); $stream = new Swift_KeyCache_SimpleKeyCacheInputStream(); $stream->setKeyCache($cache); - $stream->setNsKey($this->_nsKey); + $stream->setNsKey($this->nsKey); $stream->setItemKey('foo'); $stream->write('a'); diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mailer/ArrayRecipientIteratorTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mailer/ArrayRecipientIteratorTest.php index ff0bce4..12506dd 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mailer/ArrayRecipientIteratorTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mailer/ArrayRecipientIteratorTest.php @@ -1,22 +1,22 @@ assertFalse($it->hasNext()); } public function testHasNextReturnsTrueIfItemsLeft() { - $it = new Swift_Mailer_ArrayRecipientIterator(array('foo@bar' => 'Foo')); + $it = new Swift_Mailer_ArrayRecipientIterator(['foo@bar' => 'Foo']); $this->assertTrue($it->hasNext()); } public function testReadingToEndOfListCausesHasNextToReturnFalse() { - $it = new Swift_Mailer_ArrayRecipientIterator(array('foo@bar' => 'Foo')); + $it = new Swift_Mailer_ArrayRecipientIterator(['foo@bar' => 'Foo']); $this->assertTrue($it->hasNext()); $it->nextRecipient(); $this->assertFalse($it->hasNext()); @@ -24,19 +24,19 @@ public function testReadingToEndOfListCausesHasNextToReturnFalse() public function testReturnedValueHasPreservedKeyValuePair() { - $it = new Swift_Mailer_ArrayRecipientIterator(array('foo@bar' => 'Foo')); - $this->assertEquals(array('foo@bar' => 'Foo'), $it->nextRecipient()); + $it = new Swift_Mailer_ArrayRecipientIterator(['foo@bar' => 'Foo']); + $this->assertEquals(['foo@bar' => 'Foo'], $it->nextRecipient()); } public function testIteratorMovesNextAfterEachIteration() { - $it = new Swift_Mailer_ArrayRecipientIterator(array( + $it = new Swift_Mailer_ArrayRecipientIterator([ 'foo@bar' => 'Foo', 'zip@button' => 'Zip thing', 'test@test' => null, - )); - $this->assertEquals(array('foo@bar' => 'Foo'), $it->nextRecipient()); - $this->assertEquals(array('zip@button' => 'Zip thing'), $it->nextRecipient()); - $this->assertEquals(array('test@test' => null), $it->nextRecipient()); + ]); + $this->assertEquals(['foo@bar' => 'Foo'], $it->nextRecipient()); + $this->assertEquals(['zip@button' => 'Zip thing'], $it->nextRecipient()); + $this->assertEquals(['test@test' => null], $it->nextRecipient()); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/MailerTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/MailerTest.php index 74951a7..a2a96d0 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/MailerTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/MailerTest.php @@ -4,8 +4,8 @@ class Swift_MailerTest extends \SwiftMailerTestCase { public function testTransportIsStartedWhenSending() { - $transport = $this->_createTransport(); - $message = $this->_createMessage(); + $transport = $this->createTransport(); + $message = $this->createMessage(); $started = false; $transport->shouldReceive('isStarted') @@ -21,14 +21,14 @@ public function testTransportIsStartedWhenSending() return; }); - $mailer = $this->_createMailer($transport); + $mailer = $this->createMailer($transport); $mailer->send($message); } public function testTransportIsOnlyStartedOnce() { - $transport = $this->_createTransport(); - $message = $this->_createMessage(); + $transport = $this->createTransport(); + $message = $this->createMessage(); $started = false; $transport->shouldReceive('isStarted') @@ -44,7 +44,7 @@ public function testTransportIsOnlyStartedOnce() return; }); - $mailer = $this->_createMailer($transport); + $mailer = $this->createMailer($transport); for ($i = 0; $i < 10; ++$i) { $mailer->send($message); } @@ -52,69 +52,69 @@ public function testTransportIsOnlyStartedOnce() public function testMessageIsPassedToTransport() { - $transport = $this->_createTransport(); - $message = $this->_createMessage(); + $transport = $this->createTransport(); + $message = $this->createMessage(); $transport->shouldReceive('send') ->once() ->with($message, \Mockery::any()); - $mailer = $this->_createMailer($transport); + $mailer = $this->createMailer($transport); $mailer->send($message); } public function testSendReturnsCountFromTransport() { - $transport = $this->_createTransport(); - $message = $this->_createMessage(); + $transport = $this->createTransport(); + $message = $this->createMessage(); $transport->shouldReceive('send') ->once() ->with($message, \Mockery::any()) ->andReturn(57); - $mailer = $this->_createMailer($transport); + $mailer = $this->createMailer($transport); $this->assertEquals(57, $mailer->send($message)); } public function testFailedRecipientReferenceIsPassedToTransport() { - $failures = array(); + $failures = []; - $transport = $this->_createTransport(); - $message = $this->_createMessage(); + $transport = $this->createTransport(); + $message = $this->createMessage(); $transport->shouldReceive('send') ->once() ->with($message, $failures) ->andReturn(57); - $mailer = $this->_createMailer($transport); + $mailer = $this->createMailer($transport); $mailer->send($message, $failures); } public function testSendRecordsRfcComplianceExceptionAsEntireSendFailure() { - $failures = array(); + $failures = []; $rfcException = new Swift_RfcComplianceException('test'); - $transport = $this->_createTransport(); - $message = $this->_createMessage(); + $transport = $this->createTransport(); + $message = $this->createMessage(); $message->shouldReceive('getTo') ->once() - ->andReturn(array('foo&invalid' => 'Foo', 'bar@valid.tld' => 'Bar')); + ->andReturn(['foo&invalid' => 'Foo', 'bar@valid.tld' => 'Bar']); $transport->shouldReceive('send') ->once() ->with($message, $failures) ->andThrow($rfcException); - $mailer = $this->_createMailer($transport); + $mailer = $this->createMailer($transport); $this->assertEquals(0, $mailer->send($message, $failures), '%s: Should return 0'); - $this->assertEquals(array('foo&invalid', 'bar@valid.tld'), $failures, '%s: Failures should contain all addresses since the entire message failed to compile'); + $this->assertEquals(['foo&invalid', 'bar@valid.tld'], $failures, '%s: Failures should contain all addresses since the entire message failed to compile'); } public function testRegisterPluginDelegatesToTransport() { - $plugin = $this->_createPlugin(); - $transport = $this->_createTransport(); - $mailer = $this->_createMailer($transport); + $plugin = $this->createPlugin(); + $transport = $this->createTransport(); + $mailer = $this->createMailer($transport); $transport->shouldReceive('registerPlugin') ->once() @@ -123,22 +123,22 @@ public function testRegisterPluginDelegatesToTransport() $mailer->registerPlugin($plugin); } - private function _createPlugin() + private function createPlugin() { return $this->getMockery('Swift_Events_EventListener')->shouldIgnoreMissing(); } - private function _createTransport() + private function createTransport() { return $this->getMockery('Swift_Transport')->shouldIgnoreMissing(); } - private function _createMessage() + private function createMessage() { - return $this->getMockery('Swift_Mime_Message')->shouldIgnoreMissing(); + return $this->getMockery('Swift_Mime_SimpleMessage')->shouldIgnoreMissing(); } - private function _createMailer(Swift_Transport $transport) + private function createMailer(Swift_Transport $transport) { return new Swift_Mailer($transport); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/MessageTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/MessageTest.php index 35a568c..3ebbd7e 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/MessageTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/MessageTest.php @@ -1,6 +1,6 @@ _recursiveObjectCloningCheck($message1, $message2, $message1_clone); + $this->recursiveObjectCloningCheck($message1, $message2, $message1_clone); + // the test above will fail if the two messages are not identical + $this->addToAssertionCount(1); } public function testCloningWithSigners() @@ -21,13 +23,15 @@ public function testCloningWithSigners() $message2->attachSigner($signer); $message1_clone = clone $message1; - $this->_recursiveObjectCloningCheck($message1, $message2, $message1_clone); + $this->recursiveObjectCloningCheck($message1, $message2, $message1_clone); + // the test above will fail if the two messages are not identical + $this->addToAssertionCount(1); } public function testBodySwap() { $message1 = new Swift_Message('Test'); - $html = Swift_MimePart::newInstance('', 'text/html'); + $html = new Swift_MimePart('', 'text/html'); $html->getHeaders()->addTextHeader('X-Test-Remove', 'Test-Value'); $html->getHeaders()->addTextHeader('X-Test-Alter', 'Test-Value'); $message1->attach($html); @@ -54,7 +58,7 @@ public function testBodySwap() $this->assertNotEquals($id_1, $id_2, 'Message Ids are the same'); } - protected function _recursiveObjectCloningCheck($obj1, $obj2, $obj1_clone) + protected function recursiveObjectCloningCheck($obj1, $obj2, $obj1_clone) { $obj1_properties = (array) $obj1; $obj2_properties = (array) $obj2; @@ -82,18 +86,18 @@ protected function _recursiveObjectCloningCheck($obj1, $obj2, $obj1_clone) ); } // recurse - $this->_recursiveObjectCloningCheck($obj1_value, $obj2_value, $obj1_clone_value); + $this->recursiveObjectCloningCheck($obj1_value, $obj2_value, $obj1_clone_value); } elseif (is_array($value)) { $obj1_value = $obj1_properties[$property]; $obj2_value = $obj2_properties[$property]; $obj1_clone_value = $obj1_clone_properties[$property]; - return $this->_recursiveArrayCloningCheck($obj1_value, $obj2_value, $obj1_clone_value); + return $this->recursiveArrayCloningCheck($obj1_value, $obj2_value, $obj1_clone_value); } } } - protected function _recursiveArrayCloningCheck($array1, $array2, $array1_clone) + protected function recursiveArrayCloningCheck($array1, $array2, $array1_clone) { foreach ($array1 as $key => $value) { if (is_object($value)) { @@ -116,13 +120,13 @@ protected function _recursiveArrayCloningCheck($array1, $array2, $array1_clone) ); } // recurse - $this->_recursiveObjectCloningCheck($arr1_value, $arr2_value, $arr1_clone_value); + $this->recursiveObjectCloningCheck($arr1_value, $arr2_value, $arr1_clone_value); } elseif (is_array($value)) { $arr1_value = $array1[$key]; $arr2_value = $array2[$key]; $arr1_clone_value = $array1_clone[$key]; - return $this->_recursiveArrayCloningCheck($arr1_value, $arr2_value, $arr1_clone_value); + return $this->recursiveArrayCloningCheck($arr1_value, $arr2_value, $arr1_clone_value); } } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AbstractMimeEntityTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AbstractMimeEntityTest.php index 3efe6ec..c7c2c03 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AbstractMimeEntityTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AbstractMimeEntityTest.php @@ -6,27 +6,27 @@ abstract class Swift_Mime_AbstractMimeEntityTest extends \SwiftMailerTestCase { public function testGetHeadersReturnsHeaderSet() { - $headers = $this->_createHeaderSet(); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $headers = $this->createHeaderSet(); + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $this->assertSame($headers, $entity->getHeaders()); } public function testContentTypeIsReturnedFromHeader() { - $ctype = $this->_createHeader('Content-Type', 'image/jpeg-test'); - $headers = $this->_createHeaderSet(array('Content-Type' => $ctype)); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $ctype = $this->createHeader('Content-Type', 'image/jpeg-test'); + $headers = $this->createHeaderSet(['Content-Type' => $ctype]); + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $this->assertEquals('image/jpeg-test', $entity->getContentType()); } public function testContentTypeIsSetInHeader() { - $ctype = $this->_createHeader('Content-Type', 'text/plain', array(), false); - $headers = $this->_createHeaderSet(array('Content-Type' => $ctype)); + $ctype = $this->createHeader('Content-Type', 'text/plain', [], false); + $headers = $this->createHeaderSet(['Content-Type' => $ctype]); $ctype->shouldReceive('setFieldBodyModel') ->once() @@ -35,57 +35,57 @@ public function testContentTypeIsSetInHeader() ->zeroOrMoreTimes() ->with(\Mockery::not('image/jpeg')); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $entity->setContentType('image/jpeg'); } public function testContentTypeHeaderIsAddedIfNoneSet() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addParameterizedHeader') ->once() ->with('Content-Type', 'image/jpeg'); $headers->shouldReceive('addParameterizedHeader') ->zeroOrMoreTimes(); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $entity->setContentType('image/jpeg'); } public function testContentTypeCanBeSetViaSetBody() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addParameterizedHeader') ->once() ->with('Content-Type', 'text/html'); $headers->shouldReceive('addParameterizedHeader') ->zeroOrMoreTimes(); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $entity->setBody('foo', 'text/html'); } public function testGetEncoderFromConstructor() { - $encoder = $this->_createEncoder('base64'); - $entity = $this->_createEntity($this->_createHeaderSet(), $encoder, - $this->_createCache() + $encoder = $this->createEncoder('base64'); + $entity = $this->createEntity($this->createHeaderSet(), $encoder, + $this->createCache() ); $this->assertSame($encoder, $entity->getEncoder()); } public function testSetAndGetEncoder() { - $encoder = $this->_createEncoder('base64'); - $headers = $this->_createHeaderSet(); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $encoder = $this->createEncoder('base64'); + $headers = $this->createHeaderSet(); + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $entity->setEncoder($encoder); $this->assertSame($encoder, $entity->getEncoder()); @@ -93,38 +93,38 @@ public function testSetAndGetEncoder() public function testSettingEncoderUpdatesTransferEncoding() { - $encoder = $this->_createEncoder('base64'); - $encoding = $this->_createHeader( - 'Content-Transfer-Encoding', '8bit', array(), false + $encoder = $this->createEncoder('base64'); + $encoding = $this->createHeader( + 'Content-Transfer-Encoding', '8bit', [], false ); - $headers = $this->_createHeaderSet(array( + $headers = $this->createHeaderSet([ 'Content-Transfer-Encoding' => $encoding, - )); + ]); $encoding->shouldReceive('setFieldBodyModel') ->once() ->with('base64'); $encoding->shouldReceive('setFieldBodyModel') ->zeroOrMoreTimes(); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $entity->setEncoder($encoder); } public function testSettingEncoderAddsEncodingHeaderIfNonePresent() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addTextHeader') ->once() ->with('Content-Transfer-Encoding', 'something'); $headers->shouldReceive('addTextHeader') ->zeroOrMoreTimes(); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); - $entity->setEncoder($this->_createEncoder('something')); + $entity->setEncoder($this->createEncoder('something')); } public function testIdIsReturnedFromHeader() @@ -136,18 +136,18 @@ public function testIdIsReturnedFromHeader() identical to the "Message-ID" header field */ - $cid = $this->_createHeader('Content-ID', 'zip@button'); - $headers = $this->_createHeaderSet(array('Content-ID' => $cid)); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $cid = $this->createHeader('Content-ID', 'zip@button'); + $headers = $this->createHeaderSet(['Content-ID' => $cid]); + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $this->assertEquals('zip@button', $entity->getId()); } public function testIdIsSetInHeader() { - $cid = $this->_createHeader('Content-ID', 'zip@button', array(), false); - $headers = $this->_createHeaderSet(array('Content-ID' => $cid)); + $cid = $this->createHeader('Content-ID', 'zip@button', [], false); + $headers = $this->createHeaderSet(['Content-ID' => $cid]); $cid->shouldReceive('setFieldBodyModel') ->once() @@ -155,25 +155,25 @@ public function testIdIsSetInHeader() $cid->shouldReceive('setFieldBodyModel') ->zeroOrMoreTimes(); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $entity->setId('foo@bar'); } public function testIdIsAutoGenerated() { - $entity = $this->_createEntity($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $this->assertRegExp('/^.*?@.*?$/D', $entity->getId()); } public function testGenerateIdCreatesNewId() { - $headers = $this->_createHeaderSet(); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $headers = $this->createHeaderSet(); + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $id1 = $entity->generateId(); $id2 = $entity->generateId(); @@ -182,9 +182,9 @@ public function testGenerateIdCreatesNewId() public function testGenerateIdSetsNewId() { - $headers = $this->_createHeaderSet(); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $headers = $this->createHeaderSet(); + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $id = $entity->generateId(); $this->assertEquals($id, $entity->getId()); @@ -200,46 +200,46 @@ public function testDescriptionIsReadFromHeader() field is always optional. */ - $desc = $this->_createHeader('Content-Description', 'something'); - $headers = $this->_createHeaderSet(array('Content-Description' => $desc)); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $desc = $this->createHeader('Content-Description', 'something'); + $headers = $this->createHeaderSet(['Content-Description' => $desc]); + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $this->assertEquals('something', $entity->getDescription()); } public function testDescriptionIsSetInHeader() { - $desc = $this->_createHeader('Content-Description', '', array(), false); + $desc = $this->createHeader('Content-Description', '', [], false); $desc->shouldReceive('setFieldBodyModel')->once()->with('whatever'); - $headers = $this->_createHeaderSet(array('Content-Description' => $desc)); + $headers = $this->createHeaderSet(['Content-Description' => $desc]); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $entity->setDescription('whatever'); } public function testDescriptionHeaderIsAddedIfNotPresent() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addTextHeader') ->once() ->with('Content-Description', 'whatever'); $headers->shouldReceive('addTextHeader') ->zeroOrMoreTimes(); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $entity->setDescription('whatever'); } public function testSetAndGetMaxLineLength() { - $entity = $this->_createEntity($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $entity->setMaxLineLength(60); $this->assertEquals(60, $entity->getMaxLineLength()); @@ -247,13 +247,13 @@ public function testSetAndGetMaxLineLength() public function testEncoderIsUsedForStringGeneration() { - $encoder = $this->_createEncoder('base64', false); + $encoder = $this->createEncoder('base64', false); $encoder->expects($this->once()) ->method('encodeString') ->with('blah'); - $entity = $this->_createEntity($this->_createHeaderSet(), - $encoder, $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet(), + $encoder, $this->createCache() ); $entity->setBody('blah'); $entity->toString(); @@ -261,13 +261,13 @@ public function testEncoderIsUsedForStringGeneration() public function testMaxLineLengthIsProvidedWhenEncoding() { - $encoder = $this->_createEncoder('base64', false); + $encoder = $this->createEncoder('base64', false); $encoder->expects($this->once()) ->method('encodeString') ->with('blah', 0, 65); - $entity = $this->_createEntity($this->_createHeaderSet(), - $encoder, $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet(), + $encoder, $this->createCache() ); $entity->setBody('blah'); $entity->setMaxLineLength(65); @@ -276,7 +276,7 @@ public function testMaxLineLengthIsProvidedWhenEncoding() public function testHeadersAppearInString() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('toString') ->once() ->andReturn( @@ -284,8 +284,8 @@ public function testHeadersAppearInString() "X-MyHeader: foobar\r\n" ); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $this->assertEquals( "Content-Type: text/plain; charset=utf-8\r\n". @@ -296,8 +296,8 @@ public function testHeadersAppearInString() public function testSetAndGetBody() { - $entity = $this->_createEntity($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $entity->setBody("blah\r\nblah!"); $this->assertEquals("blah\r\nblah!", $entity->getBody()); @@ -305,13 +305,13 @@ public function testSetAndGetBody() public function testBodyIsAppended() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('toString') ->once() ->andReturn("Content-Type: text/plain; charset=utf-8\r\n"); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $entity->setBody("blah\r\nblah!"); $this->assertEquals( @@ -324,9 +324,9 @@ public function testBodyIsAppended() public function testGetBodyReturnsStringFromByteStream() { - $os = $this->_createOutputStream('byte stream string'); - $entity = $this->_createEntity($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $os = $this->createOutputStream('byte stream string'); + $entity = $this->createEntity($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $entity->setBody($os); $this->assertEquals('byte stream string', $entity->getBody()); @@ -334,14 +334,14 @@ public function testGetBodyReturnsStringFromByteStream() public function testByteStreamBodyIsAppended() { - $headers = $this->_createHeaderSet(array(), false); - $os = $this->_createOutputStream('streamed'); + $headers = $this->createHeaderSet([], false); + $os = $this->createOutputStream('streamed'); $headers->shouldReceive('toString') ->once() ->andReturn("Content-Type: text/plain; charset=utf-8\r\n"); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $entity->setBody($os); $this->assertEquals( @@ -364,8 +364,8 @@ public function testBoundaryCanBeRetrieved() "/" / ":" / "=" / "?" */ - $entity = $this->_createEntity($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $this->assertRegExp( '/^[a-zA-Z0-9\'\(\)\+_\-,\.\/:=\?\ ]{0,69}[a-zA-Z0-9\'\(\)\+_\-,\.\/:=\?]$/D', @@ -375,8 +375,8 @@ public function testBoundaryCanBeRetrieved() public function testBoundaryNeverChanges() { - $entity = $this->_createEntity($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $firstBoundary = $entity->getBoundary(); for ($i = 0; $i < 10; ++$i) { @@ -386,8 +386,8 @@ public function testBoundaryNeverChanges() public function testBoundaryCanBeSet() { - $entity = $this->_createEntity($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $entity->setBoundary('foobar'); $this->assertEquals('foobar', $entity->getBoundary()); @@ -395,29 +395,29 @@ public function testBoundaryCanBeSet() public function testAddingChildrenGeneratesBoundaryInHeaders() { - $child = $this->_createChild(); - $cType = $this->_createHeader('Content-Type', 'text/plain', array(), false); + $child = $this->createChild(); + $cType = $this->createHeader('Content-Type', 'text/plain', [], false); $cType->shouldReceive('setParameter') ->once() ->with('boundary', \Mockery::any()); $cType->shouldReceive('setParameter') ->zeroOrMoreTimes(); - $entity = $this->_createEntity($this->_createHeaderSet(array( + $entity = $this->createEntity($this->createHeaderSet([ 'Content-Type' => $cType, - )), - $this->_createEncoder(), $this->_createCache() + ]), + $this->createEncoder(), $this->createCache() ); - $entity->setChildren(array($child)); + $entity->setChildren([$child]); } public function testChildrenOfLevelAttachmentAndLessCauseMultipartMixed() { - for ($level = Swift_Mime_MimeEntity::LEVEL_MIXED; - $level > Swift_Mime_MimeEntity::LEVEL_TOP; $level /= 2) { - $child = $this->_createChild($level); - $cType = $this->_createHeader( - 'Content-Type', 'text/plain', array(), false + for ($level = Swift_Mime_SimpleMimeEntity::LEVEL_MIXED; + $level > Swift_Mime_SimpleMimeEntity::LEVEL_TOP; $level /= 2) { + $child = $this->createChild($level); + $cType = $this->createHeader( + 'Content-Type', 'text/plain', [], false ); $cType->shouldReceive('setFieldBodyModel') ->once() @@ -425,21 +425,21 @@ public function testChildrenOfLevelAttachmentAndLessCauseMultipartMixed() $cType->shouldReceive('setFieldBodyModel') ->zeroOrMoreTimes(); - $entity = $this->_createEntity($this->_createHeaderSet(array( - 'Content-Type' => $cType, )), - $this->_createEncoder(), $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet([ + 'Content-Type' => $cType, ]), + $this->createEncoder(), $this->createCache() ); - $entity->setChildren(array($child)); + $entity->setChildren([$child]); } } public function testChildrenOfLevelAlternativeAndLessCauseMultipartAlternative() { - for ($level = Swift_Mime_MimeEntity::LEVEL_ALTERNATIVE; - $level > Swift_Mime_MimeEntity::LEVEL_MIXED; $level /= 2) { - $child = $this->_createChild($level); - $cType = $this->_createHeader( - 'Content-Type', 'text/plain', array(), false + for ($level = Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE; + $level > Swift_Mime_SimpleMimeEntity::LEVEL_MIXED; $level /= 2) { + $child = $this->createChild($level); + $cType = $this->createHeader( + 'Content-Type', 'text/plain', [], false ); $cType->shouldReceive('setFieldBodyModel') ->once() @@ -447,21 +447,21 @@ public function testChildrenOfLevelAlternativeAndLessCauseMultipartAlternative() $cType->shouldReceive('setFieldBodyModel') ->zeroOrMoreTimes(); - $entity = $this->_createEntity($this->_createHeaderSet(array( - 'Content-Type' => $cType, )), - $this->_createEncoder(), $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet([ + 'Content-Type' => $cType, ]), + $this->createEncoder(), $this->createCache() ); - $entity->setChildren(array($child)); + $entity->setChildren([$child]); } } public function testChildrenOfLevelRelatedAndLessCauseMultipartRelated() { - for ($level = Swift_Mime_MimeEntity::LEVEL_RELATED; - $level > Swift_Mime_MimeEntity::LEVEL_ALTERNATIVE; $level /= 2) { - $child = $this->_createChild($level); - $cType = $this->_createHeader( - 'Content-Type', 'text/plain', array(), false + for ($level = Swift_Mime_SimpleMimeEntity::LEVEL_RELATED; + $level > Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE; $level /= 2) { + $child = $this->createChild($level); + $cType = $this->createHeader( + 'Content-Type', 'text/plain', [], false ); $cType->shouldReceive('setFieldBodyModel') ->once() @@ -469,61 +469,61 @@ public function testChildrenOfLevelRelatedAndLessCauseMultipartRelated() $cType->shouldReceive('setFieldBodyModel') ->zeroOrMoreTimes(); - $entity = $this->_createEntity($this->_createHeaderSet(array( - 'Content-Type' => $cType, )), - $this->_createEncoder(), $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet([ + 'Content-Type' => $cType, ]), + $this->createEncoder(), $this->createCache() ); - $entity->setChildren(array($child)); + $entity->setChildren([$child]); } } public function testHighestLevelChildDeterminesContentType() { - $combinations = array( - array('levels' => array(Swift_Mime_MimeEntity::LEVEL_MIXED, - Swift_Mime_MimeEntity::LEVEL_ALTERNATIVE, - Swift_Mime_MimeEntity::LEVEL_RELATED, - ), + $combinations = [ + ['levels' => [Swift_Mime_SimpleMimeEntity::LEVEL_MIXED, + Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, + Swift_Mime_SimpleMimeEntity::LEVEL_RELATED, + ], 'type' => 'multipart/mixed', - ), - array('levels' => array(Swift_Mime_MimeEntity::LEVEL_MIXED, - Swift_Mime_MimeEntity::LEVEL_RELATED, - ), + ], + ['levels' => [Swift_Mime_SimpleMimeEntity::LEVEL_MIXED, + Swift_Mime_SimpleMimeEntity::LEVEL_RELATED, + ], 'type' => 'multipart/mixed', - ), - array('levels' => array(Swift_Mime_MimeEntity::LEVEL_MIXED, - Swift_Mime_MimeEntity::LEVEL_ALTERNATIVE, - ), + ], + ['levels' => [Swift_Mime_SimpleMimeEntity::LEVEL_MIXED, + Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, + ], 'type' => 'multipart/mixed', - ), - array('levels' => array(Swift_Mime_MimeEntity::LEVEL_ALTERNATIVE, - Swift_Mime_MimeEntity::LEVEL_RELATED, - ), + ], + ['levels' => [Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, + Swift_Mime_SimpleMimeEntity::LEVEL_RELATED, + ], 'type' => 'multipart/alternative', - ), - ); + ], + ]; foreach ($combinations as $combination) { - $children = array(); + $children = []; foreach ($combination['levels'] as $level) { - $children[] = $this->_createChild($level); + $children[] = $this->createChild($level); } - $cType = $this->_createHeader( - 'Content-Type', 'text/plain', array(), false + $cType = $this->createHeader( + 'Content-Type', 'text/plain', [], false ); $cType->shouldReceive('setFieldBodyModel') ->once() ->with($combination['type']); - $headerSet = $this->_createHeaderSet(array('Content-Type' => $cType)); + $headerSet = $this->createHeaderSet(['Content-Type' => $cType]); $headerSet->shouldReceive('newInstance') ->zeroOrMoreTimes() ->andReturnUsing(function () use ($headerSet) { return $headerSet; }); - $entity = $this->_createEntity($headerSet, - $this->_createEncoder(), $this->_createCache() + $entity = $this->createEntity($headerSet, + $this->createEncoder(), $this->createCache() ); $entity->setChildren($children); } @@ -535,15 +535,15 @@ public function testChildrenAppearNestedInString() (excerpt too verbose to paste here) */ - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); - $child1 = new MimeEntityFixture(Swift_Mime_MimeEntity::LEVEL_ALTERNATIVE, + $child1 = new MimeEntityFixture(Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, "Content-Type: text/plain\r\n". "\r\n". 'foobar', 'text/plain' ); - $child2 = new MimeEntityFixture(Swift_Mime_MimeEntity::LEVEL_ALTERNATIVE, + $child2 = new MimeEntityFixture(Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, "Content-Type: text/html\r\n". "\r\n". 'foobar', 'text/html' @@ -553,11 +553,11 @@ public function testChildrenAppearNestedInString() ->zeroOrMoreTimes() ->andReturn("Content-Type: multipart/alternative; boundary=\"xxx\"\r\n"); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $entity->setBoundary('xxx'); - $entity->setChildren(array($child1, $child2)); + $entity->setChildren([$child1, $child2]); $this->assertEquals( "Content-Type: multipart/alternative; boundary=\"xxx\"\r\n". @@ -577,16 +577,16 @@ public function testChildrenAppearNestedInString() public function testMixingLevelsIsHierarchical() { - $headers = $this->_createHeaderSet(array(), false); - $newHeaders = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); + $newHeaders = $this->createHeaderSet([], false); - $part = $this->_createChild(Swift_Mime_MimeEntity::LEVEL_ALTERNATIVE, + $part = $this->createChild(Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, "Content-Type: text/plain\r\n". "\r\n". 'foobar' ); - $attachment = $this->_createChild(Swift_Mime_MimeEntity::LEVEL_MIXED, + $attachment = $this->createChild(Swift_Mime_SimpleMimeEntity::LEVEL_MIXED, "Content-Type: application/octet-stream\r\n". "\r\n". 'data' @@ -602,11 +602,11 @@ public function testMixingLevelsIsHierarchical() ->zeroOrMoreTimes() ->andReturn("Content-Type: multipart/alternative; boundary=\"yyy\"\r\n"); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $entity->setBoundary('xxx'); - $entity->setChildren(array($part, $attachment)); + $entity->setChildren([$part, $attachment]); $this->assertRegExp( '~^'. @@ -630,56 +630,56 @@ public function testMixingLevelsIsHierarchical() public function testSettingEncoderNotifiesChildren() { - $child = $this->_createChild(0, '', false); - $encoder = $this->_createEncoder('base64'); + $child = $this->createChild(0, '', false); + $encoder = $this->createEncoder('base64'); $child->shouldReceive('encoderChanged') ->once() ->with($encoder); - $entity = $this->_createEntity($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); - $entity->setChildren(array($child)); + $entity->setChildren([$child]); $entity->setEncoder($encoder); } public function testReceiptOfEncoderChangeNotifiesChildren() { - $child = $this->_createChild(0, '', false); - $encoder = $this->_createEncoder('base64'); + $child = $this->createChild(0, '', false); + $encoder = $this->createEncoder('base64'); $child->shouldReceive('encoderChanged') ->once() ->with($encoder); - $entity = $this->_createEntity($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); - $entity->setChildren(array($child)); + $entity->setChildren([$child]); $entity->encoderChanged($encoder); } public function testReceiptOfCharsetChangeNotifiesChildren() { - $child = $this->_createChild(0, '', false); + $child = $this->createChild(0, '', false); $child->shouldReceive('charsetChanged') ->once() ->with('windows-874'); - $entity = $this->_createEntity($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); - $entity->setChildren(array($child)); + $entity->setChildren([$child]); $entity->charsetChanged('windows-874'); } public function testEntityIsWrittenToByteStream() { - $entity = $this->_createEntity($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); - $is = $this->_createInputStream(false); + $is = $this->createInputStream(false); $is->expects($this->atLeastOnce()) ->method('write'); @@ -688,10 +688,10 @@ public function testEntityIsWrittenToByteStream() public function testEntityHeadersAreComittedToByteStream() { - $entity = $this->_createEntity($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); - $is = $this->_createInputStream(false); + $is = $this->createInputStream(false); $is->expects($this->atLeastOnce()) ->method('write'); $is->expects($this->atLeastOnce()) @@ -702,28 +702,28 @@ public function testEntityHeadersAreComittedToByteStream() public function testOrderingTextBeforeHtml() { - $htmlChild = new MimeEntityFixture(Swift_Mime_MimeEntity::LEVEL_ALTERNATIVE, + $htmlChild = new MimeEntityFixture(Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, "Content-Type: text/html\r\n". "\r\n". 'HTML PART', 'text/html' ); - $textChild = new MimeEntityFixture(Swift_Mime_MimeEntity::LEVEL_ALTERNATIVE, + $textChild = new MimeEntityFixture(Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, "Content-Type: text/plain\r\n". "\r\n". 'TEXT PART', 'text/plain' ); - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('toString') ->zeroOrMoreTimes() ->andReturn("Content-Type: multipart/alternative; boundary=\"xxx\"\r\n"); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $entity->setBoundary('xxx'); - $entity->setChildren(array($htmlChild, $textChild)); + $entity->setChildren([$htmlChild, $textChild]); $this->assertEquals( "Content-Type: multipart/alternative; boundary=\"xxx\"\r\n". @@ -742,28 +742,28 @@ public function testOrderingTextBeforeHtml() public function testOrderingEqualContentTypesMaintainsOriginalOrdering() { - $firstChild = new MimeEntityFixture(Swift_Mime_MimeEntity::LEVEL_ALTERNATIVE, + $firstChild = new MimeEntityFixture(Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, "Content-Type: text/plain\r\n". "\r\n". 'PART 1', 'text/plain' ); - $secondChild = new MimeEntityFixture(Swift_Mime_MimeEntity::LEVEL_ALTERNATIVE, + $secondChild = new MimeEntityFixture(Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, "Content-Type: text/plain\r\n". "\r\n". 'PART 2', 'text/plain' ); - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('toString') ->zeroOrMoreTimes() ->andReturn("Content-Type: multipart/alternative; boundary=\"xxx\"\r\n"); - $entity = $this->_createEntity($headers, $this->_createEncoder(), - $this->_createCache() + $entity = $this->createEntity($headers, $this->createEncoder(), + $this->createCache() ); $entity->setBoundary('xxx'); - $entity->setChildren(array($firstChild, $secondChild)); + $entity->setChildren([$firstChild, $secondChild]); $this->assertEquals( "Content-Type: multipart/alternative; boundary=\"xxx\"\r\n". @@ -782,8 +782,8 @@ public function testOrderingEqualContentTypesMaintainsOriginalOrdering() public function testUnsettingChildrenRestoresContentType() { - $cType = $this->_createHeader('Content-Type', 'text/plain', array(), false); - $child = $this->_createChild(Swift_Mime_MimeEntity::LEVEL_ALTERNATIVE); + $cType = $this->createHeader('Content-Type', 'text/plain', [], false); + $child = $this->createChild(Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE); $cType->shouldReceive('setFieldBodyModel') ->twice() @@ -795,25 +795,25 @@ public function testUnsettingChildrenRestoresContentType() ->zeroOrMoreTimes() ->with(\Mockery::not('multipart/alternative', 'image/jpeg')); - $entity = $this->_createEntity($this->_createHeaderSet(array( + $entity = $this->createEntity($this->createHeaderSet([ 'Content-Type' => $cType, - )), - $this->_createEncoder(), $this->_createCache() + ]), + $this->createEncoder(), $this->createCache() ); $entity->setContentType('image/jpeg'); - $entity->setChildren(array($child)); - $entity->setChildren(array()); + $entity->setChildren([$child]); + $entity->setChildren([]); } public function testBodyIsReadFromCacheWhenUsingToStringIfPresent() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('toString') ->zeroOrMoreTimes() ->andReturn("Content-Type: text/plain; charset=utf-8\r\n"); - $cache = $this->_createCache(false); + $cache = $this->createCache(false); $cache->shouldReceive('hasKey') ->once() ->with(\Mockery::any(), 'body') @@ -823,7 +823,7 @@ public function testBodyIsReadFromCacheWhenUsingToStringIfPresent() ->with(\Mockery::any(), 'body') ->andReturn("\r\ncache\r\ncache!"); - $entity = $this->_createEntity($headers, $this->_createEncoder(), + $entity = $this->createEntity($headers, $this->createEncoder(), $cache ); @@ -838,12 +838,12 @@ public function testBodyIsReadFromCacheWhenUsingToStringIfPresent() public function testBodyIsAddedToCacheWhenUsingToString() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('toString') ->zeroOrMoreTimes() ->andReturn("Content-Type: text/plain; charset=utf-8\r\n"); - $cache = $this->_createCache(false); + $cache = $this->createCache(false); $cache->shouldReceive('hasKey') ->once() ->with(\Mockery::any(), 'body') @@ -852,7 +852,7 @@ public function testBodyIsAddedToCacheWhenUsingToString() ->once() ->with(\Mockery::any(), 'body', "\r\nblah\r\nblah!", Swift_KeyCache::MODE_WRITE); - $entity = $this->_createEntity($headers, $this->_createEncoder(), + $entity = $this->createEntity($headers, $this->createEncoder(), $cache ); @@ -862,13 +862,13 @@ public function testBodyIsAddedToCacheWhenUsingToString() public function testBodyIsClearedFromCacheIfNewBodySet() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('toString') ->zeroOrMoreTimes() ->andReturn("Content-Type: text/plain; charset=utf-8\r\n"); - $cache = $this->_createCache(false); - $entity = $this->_createEntity($headers, $this->_createEncoder(), + $cache = $this->createCache(false); + $entity = $this->createEntity($headers, $this->createEncoder(), $cache ); @@ -885,13 +885,13 @@ public function testBodyIsClearedFromCacheIfNewBodySet() public function testBodyIsNotClearedFromCacheIfSameBodySet() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('toString') ->zeroOrMoreTimes() ->andReturn("Content-Type: text/plain; charset=utf-8\r\n"); - $cache = $this->_createCache(false); - $entity = $this->_createEntity($headers, $this->_createEncoder(), + $cache = $this->createCache(false); + $entity = $this->createEntity($headers, $this->createEncoder(), $cache ); @@ -907,14 +907,14 @@ public function testBodyIsNotClearedFromCacheIfSameBodySet() public function testBodyIsClearedFromCacheIfNewEncoderSet() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('toString') ->zeroOrMoreTimes() ->andReturn("Content-Type: text/plain; charset=utf-8\r\n"); - $cache = $this->_createCache(false); - $otherEncoder = $this->_createEncoder(); - $entity = $this->_createEntity($headers, $this->_createEncoder(), + $cache = $this->createCache(false); + $otherEncoder = $this->createEncoder(); + $entity = $this->createEntity($headers, $this->createEncoder(), $cache ); @@ -931,8 +931,8 @@ public function testBodyIsClearedFromCacheIfNewEncoderSet() public function testBodyIsReadFromCacheWhenUsingToByteStreamIfPresent() { - $is = $this->_createInputStream(); - $cache = $this->_createCache(false); + $is = $this->createInputStream(); + $cache = $this->createCache(false); $cache->shouldReceive('hasKey') ->once() ->with(\Mockery::any(), 'body') @@ -941,8 +941,8 @@ public function testBodyIsReadFromCacheWhenUsingToByteStreamIfPresent() ->once() ->with(\Mockery::any(), 'body', $is); - $entity = $this->_createEntity($this->_createHeaderSet(), - $this->_createEncoder(), $cache + $entity = $this->createEntity($this->createHeaderSet(), + $this->createEncoder(), $cache ); $entity->setBody('foo'); @@ -951,8 +951,8 @@ public function testBodyIsReadFromCacheWhenUsingToByteStreamIfPresent() public function testBodyIsAddedToCacheWhenUsingToByteStream() { - $is = $this->_createInputStream(); - $cache = $this->_createCache(false); + $is = $this->createInputStream(); + $cache = $this->createCache(false); $cache->shouldReceive('hasKey') ->once() ->with(\Mockery::any(), 'body') @@ -961,8 +961,8 @@ public function testBodyIsAddedToCacheWhenUsingToByteStream() ->once() ->with(\Mockery::any(), 'body'); - $entity = $this->_createEntity($this->_createHeaderSet(), - $this->_createEncoder(), $cache + $entity = $this->createEntity($this->createHeaderSet(), + $this->createEncoder(), $cache ); $entity->setBody('foo'); @@ -971,28 +971,28 @@ public function testBodyIsAddedToCacheWhenUsingToByteStream() public function testFluidInterface() { - $entity = $this->_createEntity($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $entity = $this->createEntity($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $this->assertSame($entity, $entity ->setContentType('text/plain') - ->setEncoder($this->_createEncoder()) + ->setEncoder($this->createEncoder()) ->setId('foo@bar') ->setDescription('my description') ->setMaxLineLength(998) ->setBody('xx') ->setBoundary('xyz') - ->setChildren(array()) + ->setChildren([]) ); } - abstract protected function _createEntity($headers, $encoder, $cache); + abstract protected function createEntity($headers, $encoder, $cache); - protected function _createChild($level = null, $string = '', $stub = true) + protected function createChild($level = null, $string = '', $stub = true) { - $child = $this->getMockery('Swift_Mime_MimeEntity')->shouldIgnoreMissing(); + $child = $this->getMockery('Swift_Mime_SimpleMimeEntity')->shouldIgnoreMissing(); if (isset($level)) { $child->shouldReceive('getNestingLevel') ->zeroOrMoreTimes() @@ -1005,7 +1005,7 @@ protected function _createChild($level = null, $string = '', $stub = true) return $child; } - protected function _createEncoder($name = 'quoted-printable', $stub = true) + protected function createEncoder($name = 'quoted-printable', $stub = true) { $encoder = $this->getMockBuilder('Swift_Mime_ContentEncoder')->getMock(); $encoder->expects($this->any()) @@ -1022,14 +1022,14 @@ protected function _createEncoder($name = 'quoted-printable', $stub = true) return $encoder; } - protected function _createCache($stub = true) + protected function createCache($stub = true) { return $this->getMockery('Swift_KeyCache')->shouldIgnoreMissing(); } - protected function _createHeaderSet($headers = array(), $stub = true) + protected function createHeaderSet($headers = [], $stub = true) { - $set = $this->getMockery('Swift_Mime_HeaderSet')->shouldIgnoreMissing(); + $set = $this->getMockery('Swift_Mime_SimpleHeaderSet')->shouldIgnoreMissing(); $set->shouldReceive('get') ->zeroOrMoreTimes() ->andReturnUsing(function ($key) use ($headers) { @@ -1044,9 +1044,9 @@ protected function _createHeaderSet($headers = array(), $stub = true) return $set; } - protected function _createHeader($name, $model = null, $params = array(), $stub = true) + protected function createHeader($name, $model = null, $params = [], $stub = true) { - $header = $this->getMockery('Swift_Mime_ParameterizedHeader')->shouldIgnoreMissing(); + $header = $this->getMockery('Swift_Mime_Headers_ParameterizedHeader')->shouldIgnoreMissing(); $header->shouldReceive('getFieldName') ->zeroOrMoreTimes() ->andReturn($name); @@ -1062,7 +1062,7 @@ protected function _createHeader($name, $model = null, $params = array(), $stub return $header; } - protected function _createOutputStream($data = null, $stub = true) + protected function createOutputStream($data = null, $stub = true) { $os = $this->getMockery('Swift_OutputByteStream'); if (isset($data)) { @@ -1085,7 +1085,7 @@ protected function _createOutputStream($data = null, $stub = true) return $os; } - protected function _createInputStream($stub = true) + protected function createInputStream($stub = true) { return $this->getMockBuilder('Swift_InputByteStream')->getMock(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AttachmentTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AttachmentTest.php index 2c1e581..912d529 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AttachmentTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/AttachmentTest.php @@ -1,14 +1,15 @@ _createAttachment($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $attachment = $this->createAttachment($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $this->assertEquals( - Swift_Mime_MimeEntity::LEVEL_MIXED, $attachment->getNestingLevel() + Swift_Mime_SimpleMimeEntity::LEVEL_MIXED, $attachment->getNestingLevel() ); } @@ -17,18 +18,18 @@ public function testDispositionIsReturnedFromHeader() /* -- RFC 2183, 2.1, 2.2. */ - $disposition = $this->_createHeader('Content-Disposition', 'attachment'); - $attachment = $this->_createAttachment($this->_createHeaderSet(array( - 'Content-Disposition' => $disposition, )), - $this->_createEncoder(), $this->_createCache() + $disposition = $this->createHeader('Content-Disposition', 'attachment'); + $attachment = $this->createAttachment($this->createHeaderSet([ + 'Content-Disposition' => $disposition, ]), + $this->createEncoder(), $this->createCache() ); $this->assertEquals('attachment', $attachment->getDisposition()); } public function testDispositionIsSetInHeader() { - $disposition = $this->_createHeader('Content-Disposition', 'attachment', - array(), false + $disposition = $this->createHeader('Content-Disposition', 'attachment', + [], false ); $disposition->shouldReceive('setFieldBodyModel') ->once() @@ -36,46 +37,46 @@ public function testDispositionIsSetInHeader() $disposition->shouldReceive('setFieldBodyModel') ->zeroOrMoreTimes(); - $attachment = $this->_createAttachment($this->_createHeaderSet(array( - 'Content-Disposition' => $disposition, )), - $this->_createEncoder(), $this->_createCache() + $attachment = $this->createAttachment($this->createHeaderSet([ + 'Content-Disposition' => $disposition, ]), + $this->createEncoder(), $this->createCache() ); $attachment->setDisposition('inline'); } public function testDispositionIsAddedIfNonePresent() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addParameterizedHeader') ->once() ->with('Content-Disposition', 'inline'); $headers->shouldReceive('addParameterizedHeader') ->zeroOrMoreTimes(); - $attachment = $this->_createAttachment($headers, $this->_createEncoder(), - $this->_createCache() + $attachment = $this->createAttachment($headers, $this->createEncoder(), + $this->createCache() ); $attachment->setDisposition('inline'); } public function testDispositionIsAutoDefaultedToAttachment() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addParameterizedHeader') ->once() ->with('Content-Disposition', 'attachment'); $headers->shouldReceive('addParameterizedHeader') ->zeroOrMoreTimes(); - $attachment = $this->_createAttachment($headers, $this->_createEncoder(), - $this->_createCache() + $attachment = $this->createAttachment($headers, $this->createEncoder(), + $this->createCache() ); } public function testDefaultContentTypeInitializedToOctetStream() { - $cType = $this->_createHeader('Content-Type', '', - array(), false + $cType = $this->createHeader('Content-Type', '', + [], false ); $cType->shouldReceive('setFieldBodyModel') ->once() @@ -83,9 +84,9 @@ public function testDefaultContentTypeInitializedToOctetStream() $cType->shouldReceive('setFieldBodyModel') ->zeroOrMoreTimes(); - $attachment = $this->_createAttachment($this->_createHeaderSet(array( - 'Content-Type' => $cType, )), - $this->_createEncoder(), $this->_createCache() + $attachment = $this->createAttachment($this->createHeaderSet([ + 'Content-Type' => $cType, ]), + $this->createEncoder(), $this->createCache() ); } @@ -94,20 +95,20 @@ public function testFilenameIsReturnedFromHeader() /* -- RFC 2183, 2.3. */ - $disposition = $this->_createHeader('Content-Disposition', 'attachment', - array('filename' => 'foo.txt') + $disposition = $this->createHeader('Content-Disposition', 'attachment', + ['filename' => 'foo.txt'] ); - $attachment = $this->_createAttachment($this->_createHeaderSet(array( - 'Content-Disposition' => $disposition, )), - $this->_createEncoder(), $this->_createCache() + $attachment = $this->createAttachment($this->createHeaderSet([ + 'Content-Disposition' => $disposition, ]), + $this->createEncoder(), $this->createCache() ); $this->assertEquals('foo.txt', $attachment->getFilename()); } public function testFilenameIsSetInHeader() { - $disposition = $this->_createHeader('Content-Disposition', 'attachment', - array('filename' => 'foo.txt'), false + $disposition = $this->createHeader('Content-Disposition', 'attachment', + ['filename' => 'foo.txt'], false ); $disposition->shouldReceive('setParameter') ->once() @@ -115,9 +116,9 @@ public function testFilenameIsSetInHeader() $disposition->shouldReceive('setParameter') ->zeroOrMoreTimes(); - $attachment = $this->_createAttachment($this->_createHeaderSet(array( - 'Content-Disposition' => $disposition, )), - $this->_createEncoder(), $this->_createCache() + $attachment = $this->createAttachment($this->createHeaderSet([ + 'Content-Disposition' => $disposition, ]), + $this->createEncoder(), $this->createCache() ); $attachment->setFilename('bar.txt'); } @@ -128,8 +129,8 @@ public function testSettingFilenameSetsNameInContentType() This is a legacy requirement which isn't covered by up-to-date RFCs. */ - $cType = $this->_createHeader('Content-Type', 'text/plain', - array(), false + $cType = $this->createHeader('Content-Type', 'text/plain', + [], false ); $cType->shouldReceive('setParameter') ->once() @@ -137,9 +138,9 @@ public function testSettingFilenameSetsNameInContentType() $cType->shouldReceive('setParameter') ->zeroOrMoreTimes(); - $attachment = $this->_createAttachment($this->_createHeaderSet(array( - 'Content-Type' => $cType, )), - $this->_createEncoder(), $this->_createCache() + $attachment = $this->createAttachment($this->createHeaderSet([ + 'Content-Type' => $cType, ]), + $this->createEncoder(), $this->createCache() ); $attachment->setFilename('bar.txt'); } @@ -149,20 +150,20 @@ public function testSizeIsReturnedFromHeader() /* -- RFC 2183, 2.7. */ - $disposition = $this->_createHeader('Content-Disposition', 'attachment', - array('size' => 1234) + $disposition = $this->createHeader('Content-Disposition', 'attachment', + ['size' => 1234] ); - $attachment = $this->_createAttachment($this->_createHeaderSet(array( - 'Content-Disposition' => $disposition, )), - $this->_createEncoder(), $this->_createCache() + $attachment = $this->createAttachment($this->createHeaderSet([ + 'Content-Disposition' => $disposition, ]), + $this->createEncoder(), $this->createCache() ); $this->assertEquals(1234, $attachment->getSize()); } public function testSizeIsSetInHeader() { - $disposition = $this->_createHeader('Content-Disposition', 'attachment', - array(), false + $disposition = $this->createHeader('Content-Disposition', 'attachment', + [], false ); $disposition->shouldReceive('setParameter') ->once() @@ -170,91 +171,91 @@ public function testSizeIsSetInHeader() $disposition->shouldReceive('setParameter') ->zeroOrMoreTimes(); - $attachment = $this->_createAttachment($this->_createHeaderSet(array( - 'Content-Disposition' => $disposition, )), - $this->_createEncoder(), $this->_createCache() + $attachment = $this->createAttachment($this->createHeaderSet([ + 'Content-Disposition' => $disposition, ]), + $this->createEncoder(), $this->createCache() ); $attachment->setSize(12345); } public function testFilnameCanBeReadFromFileStream() { - $file = $this->_createFileStream('/bar/file.ext', ''); - $disposition = $this->_createHeader('Content-Disposition', 'attachment', - array('filename' => 'foo.txt'), false + $file = $this->createFileStream('/bar/file.ext', ''); + $disposition = $this->createHeader('Content-Disposition', 'attachment', + ['filename' => 'foo.txt'], false ); $disposition->shouldReceive('setParameter') ->once() ->with('filename', 'file.ext'); - $attachment = $this->_createAttachment($this->_createHeaderSet(array( - 'Content-Disposition' => $disposition, )), - $this->_createEncoder(), $this->_createCache() + $attachment = $this->createAttachment($this->createHeaderSet([ + 'Content-Disposition' => $disposition, ]), + $this->createEncoder(), $this->createCache() ); $attachment->setFile($file); } public function testContentTypeCanBeSetViaSetFile() { - $file = $this->_createFileStream('/bar/file.ext', ''); - $disposition = $this->_createHeader('Content-Disposition', 'attachment', - array('filename' => 'foo.txt'), false + $file = $this->createFileStream('/bar/file.ext', ''); + $disposition = $this->createHeader('Content-Disposition', 'attachment', + ['filename' => 'foo.txt'], false ); $disposition->shouldReceive('setParameter') ->once() ->with('filename', 'file.ext'); - $ctype = $this->_createHeader('Content-Type', 'text/plain', array(), false); + $ctype = $this->createHeader('Content-Type', 'text/plain', [], false); $ctype->shouldReceive('setFieldBodyModel') ->once() ->with('text/html'); $ctype->shouldReceive('setFieldBodyModel') ->zeroOrMoreTimes(); - $headers = $this->_createHeaderSet(array( + $headers = $this->createHeaderSet([ 'Content-Disposition' => $disposition, 'Content-Type' => $ctype, - )); + ]); - $attachment = $this->_createAttachment($headers, $this->_createEncoder(), - $this->_createCache() + $attachment = $this->createAttachment($headers, $this->createEncoder(), + $this->createCache() ); $attachment->setFile($file, 'text/html'); } public function XtestContentTypeCanBeLookedUpFromCommonListIfNotProvided() { - $file = $this->_createFileStream('/bar/file.zip', ''); - $disposition = $this->_createHeader('Content-Disposition', 'attachment', - array('filename' => 'foo.zip'), false + $file = $this->createFileStream('/bar/file.zip', ''); + $disposition = $this->createHeader('Content-Disposition', 'attachment', + ['filename' => 'foo.zip'], false ); $disposition->shouldReceive('setParameter') ->once() ->with('filename', 'file.zip'); - $ctype = $this->_createHeader('Content-Type', 'text/plain', array(), false); + $ctype = $this->createHeader('Content-Type', 'text/plain', [], false); $ctype->shouldReceive('setFieldBodyModel') ->once() ->with('application/zip'); $ctype->shouldReceive('setFieldBodyModel') ->zeroOrMoreTimes(); - $headers = $this->_createHeaderSet(array( + $headers = $this->createHeaderSet([ 'Content-Disposition' => $disposition, 'Content-Type' => $ctype, - )); + ]); - $attachment = $this->_createAttachment($headers, $this->_createEncoder(), - $this->_createCache(), array('zip' => 'application/zip', 'txt' => 'text/plain') + $attachment = $this->createAttachment($headers, $this->createEncoder(), + $this->createCache(), ['zip' => 'application/zip', 'txt' => 'text/plain'] ); $attachment->setFile($file); } public function testDataCanBeReadFromFile() { - $file = $this->_createFileStream('/foo/file.ext', ''); - $attachment = $this->_createAttachment($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $file = $this->createFileStream('/foo/file.ext', ''); + $attachment = $this->createAttachment($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $attachment->setFile($file); $this->assertEquals('', $attachment->getBody()); @@ -262,37 +263,39 @@ public function testDataCanBeReadFromFile() public function testFluidInterface() { - $attachment = $this->_createAttachment($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $attachment = $this->createAttachment($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $this->assertSame($attachment, $attachment ->setContentType('application/pdf') - ->setEncoder($this->_createEncoder()) + ->setEncoder($this->createEncoder()) ->setId('foo@bar') ->setDescription('my pdf') ->setMaxLineLength(998) ->setBody('xx') ->setBoundary('xyz') - ->setChildren(array()) + ->setChildren([]) ->setDisposition('inline') ->setFilename('afile.txt') ->setSize(123) - ->setFile($this->_createFileStream('foo.txt', '')) + ->setFile($this->createFileStream('foo.txt', '')) ); } - protected function _createEntity($headers, $encoder, $cache) + protected function createEntity($headers, $encoder, $cache) { - return $this->_createAttachment($headers, $encoder, $cache); + return $this->createAttachment($headers, $encoder, $cache); } - protected function _createAttachment($headers, $encoder, $cache, $mimeTypes = array()) + protected function createAttachment($headers, $encoder, $cache, $mimeTypes = []) { - return new Swift_Mime_Attachment($headers, $encoder, $cache, new Swift_Mime_Grammar(), $mimeTypes); + $idGenerator = new Swift_Mime_IdGenerator('example.com'); + + return new Swift_Mime_Attachment($headers, $encoder, $cache, $idGenerator, $mimeTypes); } - protected function _createFileStream($path, $data, $stub = true) + protected function createFileStream($path, $data, $stub = true) { $file = $this->getMockery('Swift_FileStream'); $file->shouldReceive('getPath') diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/Base64ContentEncoderTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/Base64ContentEncoderTest.php index 1571fce..a05c68a 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/Base64ContentEncoderTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/Base64ContentEncoderTest.php @@ -2,16 +2,16 @@ class Swift_Mime_ContentEncoder_Base64ContentEncoderTest extends \SwiftMailerTestCase { - private $_encoder; + private $encoder; protected function setUp() { - $this->_encoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder(); + $this->encoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder(); } public function testNameIsBase64() { - $this->assertEquals('base64', $this->_encoder->getName()); + $this->assertEquals('base64', $this->encoder->getName()); } /* @@ -32,8 +32,8 @@ public function testInputOutputRatioIs3to4Bytes() of which is translated into a single digit in the base64 alphabet. */ - $os = $this->_createOutputByteStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -46,7 +46,7 @@ public function testInputOutputRatioIs3to4Bytes() ->zeroOrMoreTimes() ->andReturn(false); - $this->_encoder->encodeByteStream($os, $is); + $this->encoder->encodeByteStream($os, $is); $this->assertEquals('MTIz', $collection->content); } @@ -73,8 +73,8 @@ public function testPadLength() */ for ($i = 0; $i < 30; ++$i) { - $os = $this->_createOutputByteStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -82,20 +82,20 @@ public function testPadLength() ->andReturnUsing($collection); $os->shouldReceive('read') ->once() - ->andReturn(pack('C', rand(0, 255))); + ->andReturn(pack('C', random_int(0, 255))); $os->shouldReceive('read') ->zeroOrMoreTimes() ->andReturn(false); - $this->_encoder->encodeByteStream($os, $is); + $this->encoder->encodeByteStream($os, $is); $this->assertRegExp('~^[a-zA-Z0-9/\+]{2}==$~', $collection->content, '%s: A single byte should have 2 bytes of padding' ); } for ($i = 0; $i < 30; ++$i) { - $os = $this->_createOutputByteStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -103,20 +103,20 @@ public function testPadLength() ->andReturnUsing($collection); $os->shouldReceive('read') ->once() - ->andReturn(pack('C*', rand(0, 255), rand(0, 255))); + ->andReturn(pack('C*', random_int(0, 255), random_int(0, 255))); $os->shouldReceive('read') ->zeroOrMoreTimes() ->andReturn(false); - $this->_encoder->encodeByteStream($os, $is); + $this->encoder->encodeByteStream($os, $is); $this->assertRegExp('~^[a-zA-Z0-9/\+]{3}=$~', $collection->content, '%s: Two bytes should have 1 byte of padding' ); } for ($i = 0; $i < 30; ++$i) { - $os = $this->_createOutputByteStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -124,12 +124,12 @@ public function testPadLength() ->andReturnUsing($collection); $os->shouldReceive('read') ->once() - ->andReturn(pack('C*', rand(0, 255), rand(0, 255), rand(0, 255))); + ->andReturn(pack('C*', random_int(0, 255), random_int(0, 255), random_int(0, 255))); $os->shouldReceive('read') ->zeroOrMoreTimes() ->andReturn(false); - $this->_encoder->encodeByteStream($os, $is); + $this->encoder->encodeByteStream($os, $is); $this->assertRegExp('~^[a-zA-Z0-9/\+]{4}$~', $collection->content, '%s: Three bytes should have no padding' ); @@ -144,8 +144,8 @@ public function testMaximumLineLengthIs76Characters() found in Table 1 must be ignored by decoding software. */ - $os = $this->_createOutputByteStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -176,7 +176,7 @@ public function testMaximumLineLengthIs76Characters() ->zeroOrMoreTimes() ->andReturn(false); - $this->_encoder->encodeByteStream($os, $is); + $this->encoder->encodeByteStream($os, $is); $this->assertEquals( "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXphYmMxMjM0NTY3ODkwQUJDREVGR0hJSktMTU5PUFFS\r\n". 'U1RVVldYWVoxMjM0NTY3YWJjZGVmZ2hpamts', @@ -186,8 +186,8 @@ public function testMaximumLineLengthIs76Characters() public function testMaximumLineLengthCanBeDifferent() { - $os = $this->_createOutputByteStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -218,7 +218,7 @@ public function testMaximumLineLengthCanBeDifferent() ->zeroOrMoreTimes() ->andReturn(false); - $this->_encoder->encodeByteStream($os, $is, 0, 50); + $this->encoder->encodeByteStream($os, $is, 0, 50); $this->assertEquals( "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXphYmMxMjM0NTY3OD\r\n". "kwQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVoxMjM0NTY3YWJj\r\n". @@ -229,8 +229,8 @@ public function testMaximumLineLengthCanBeDifferent() public function testMaximumLineLengthIsNeverMoreThan76Chars() { - $os = $this->_createOutputByteStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -261,7 +261,7 @@ public function testMaximumLineLengthIsNeverMoreThan76Chars() ->zeroOrMoreTimes() ->andReturn(false); - $this->_encoder->encodeByteStream($os, $is, 0, 100); + $this->encoder->encodeByteStream($os, $is, 0, 100); $this->assertEquals( "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXphYmMxMjM0NTY3ODkwQUJDREVGR0hJSktMTU5PUFFS\r\n". 'U1RVVldYWVoxMjM0NTY3YWJjZGVmZ2hpamts', @@ -271,8 +271,8 @@ public function testMaximumLineLengthIsNeverMoreThan76Chars() public function testFirstLineLengthCanBeDifferent() { - $os = $this->_createOutputByteStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -303,7 +303,7 @@ public function testFirstLineLengthCanBeDifferent() ->zeroOrMoreTimes() ->andReturn(false); - $this->_encoder->encodeByteStream($os, $is, 19); + $this->encoder->encodeByteStream($os, $is, 19); $this->assertEquals( "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXphYmMxMjM0NTY3ODkwQUJDR\r\n". 'EVGR0hJSktMTU5PUFFSU1RVVldYWVoxMjM0NTY3YWJjZGVmZ2hpamts', @@ -311,12 +311,12 @@ public function testFirstLineLengthCanBeDifferent() ); } - private function _createOutputByteStream($stub = false) + private function createOutputByteStream($stub = false) { return $this->getMockery('Swift_OutputByteStream')->shouldIgnoreMissing(); } - private function _createInputByteStream($stub = false) + private function createInputByteStream($stub = false) { return $this->getMockery('Swift_InputByteStream')->shouldIgnoreMissing(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/PlainContentEncoderTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/PlainContentEncoderTest.php index ca44e11..270d02c 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/PlainContentEncoderTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/PlainContentEncoderTest.php @@ -4,16 +4,16 @@ class Swift_Mime_ContentEncoder_PlainContentEncoderTest extends \SwiftMailerTest { public function testNameCanBeSpecifiedInConstructor() { - $encoder = $this->_getEncoder('7bit'); + $encoder = $this->getEncoder('7bit'); $this->assertEquals('7bit', $encoder->getName()); - $encoder = $this->_getEncoder('8bit'); + $encoder = $this->getEncoder('8bit'); $this->assertEquals('8bit', $encoder->getName()); } public function testNoOctetsAreModifiedInString() { - $encoder = $this->_getEncoder('7bit'); + $encoder = $this->getEncoder('7bit'); foreach (range(0x00, 0xFF) as $octet) { $byte = pack('C', $octet); $this->assertIdenticalBinary($byte, $encoder->encodeString($byte)); @@ -22,12 +22,12 @@ public function testNoOctetsAreModifiedInString() public function testNoOctetsAreModifiedInByteStream() { - $encoder = $this->_getEncoder('7bit'); + $encoder = $this->getEncoder('7bit'); foreach (range(0x00, 0xFF) as $octet) { $byte = pack('C', $octet); - $os = $this->_createOutputByteStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -47,9 +47,9 @@ public function testNoOctetsAreModifiedInByteStream() public function testLineLengthCanBeSpecified() { - $encoder = $this->_getEncoder('7bit'); + $encoder = $this->getEncoder('7bit'); - $chars = array(); + $chars = []; for ($i = 0; $i < 50; ++$i) { $chars[] = 'a'; } @@ -65,10 +65,10 @@ public function testLineLengthCanBeSpecified() public function testLineLengthCanBeSpecifiedInByteStream() { - $encoder = $this->_getEncoder('7bit'); + $encoder = $this->getEncoder('7bit'); - $os = $this->_createOutputByteStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -94,7 +94,7 @@ public function testLineLengthCanBeSpecifiedInByteStream() public function testencodeStringGeneratesCorrectCrlf() { - $encoder = $this->_getEncoder('7bit', true); + $encoder = $this->getEncoder('7bit', true); $this->assertEquals("a\r\nb", $encoder->encodeString("a\rb"), '%s: Line endings should be standardized' ); @@ -114,13 +114,13 @@ public function testencodeStringGeneratesCorrectCrlf() public function crlfProvider() { - return array( - array("\r", "a\r\nb"), - array("\n", "a\r\nb"), - array("\n\r", "a\r\n\r\nb"), - array("\n\n", "a\r\n\r\nb"), - array("\r\r", "a\r\n\r\nb"), - ); + return [ + ["\r", "a\r\nb"], + ["\n", "a\r\nb"], + ["\n\r", "a\r\n\r\nb"], + ["\n\n", "a\r\n\r\nb"], + ["\r\r", "a\r\n\r\nb"], + ]; } /** @@ -128,10 +128,10 @@ public function crlfProvider() */ public function testCanonicEncodeByteStreamGeneratesCorrectCrlf($test, $expected) { - $encoder = $this->_getEncoder('7bit', true); + $encoder = $this->getEncoder('7bit', true); - $os = $this->_createOutputByteStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -154,17 +154,17 @@ public function testCanonicEncodeByteStreamGeneratesCorrectCrlf($test, $expected $this->assertEquals($expected, $collection->content); } - private function _getEncoder($name, $canonical = false) + private function getEncoder($name, $canonical = false) { return new Swift_Mime_ContentEncoder_PlainContentEncoder($name, $canonical); } - private function _createOutputByteStream($stub = false) + private function createOutputByteStream($stub = false) { return $this->getMockery('Swift_OutputByteStream')->shouldIgnoreMissing(); } - private function _createInputByteStream($stub = false) + private function createInputByteStream($stub = false) { return $this->getMockery('Swift_InputByteStream')->shouldIgnoreMissing(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/QpContentEncoderTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/QpContentEncoderTest.php index 7762bbe..fd2ee44 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/QpContentEncoderTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/ContentEncoder/QpContentEncoderTest.php @@ -5,7 +5,7 @@ class Swift_Mime_ContentEncoder_QpContentEncoderTest extends \SwiftMailerTestCas public function testNameIsQuotedPrintable() { $encoder = new Swift_Mime_ContentEncoder_QpContentEncoder( - $this->_createCharacterStream(true) + $this->createCharacterStream(true) ); $this->assertEquals('quoted-printable', $encoder->getName()); } @@ -40,9 +40,9 @@ public function testPermittedCharactersAreNotEncoded() foreach (array_merge(range(33, 60), range(62, 126)) as $ordinal) { $char = chr($ordinal); - $os = $this->_createOutputByteStream(true); - $charStream = $this->_createCharacterStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(true); + $charStream = $this->createCharacterStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -55,7 +55,7 @@ public function testPermittedCharactersAreNotEncoded() ->with($os); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array($ordinal)); + ->andReturn([$ordinal]); $charStream->shouldReceive('readBytes') ->zeroOrMoreTimes() ->andReturn(false); @@ -95,9 +95,9 @@ public function testLinearWhiteSpaceAtLineEndingIsEncoded() $SPACE = chr(0x20); //32 //HT - $os = $this->_createOutputByteStream(true); - $charStream = $this->_createCharacterStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(true); + $charStream = $this->createCharacterStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -110,22 +110,22 @@ public function testLinearWhiteSpaceAtLineEndingIsEncoded() ->with($os); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('a'))); + ->andReturn([ord('a')]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(0x09)); + ->andReturn([0x09]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(0x09)); + ->andReturn([0x09]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(0x0D)); + ->andReturn([0x0D]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(0x0A)); + ->andReturn([0x0A]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('b'))); + ->andReturn([ord('b')]); $charStream->shouldReceive('readBytes') ->zeroOrMoreTimes() ->andReturn(false); @@ -136,9 +136,9 @@ public function testLinearWhiteSpaceAtLineEndingIsEncoded() $this->assertEquals("a\t=09\r\nb", $collection->content); //SPACE - $os = $this->_createOutputByteStream(true); - $charStream = $this->_createCharacterStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(true); + $charStream = $this->createCharacterStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -151,22 +151,22 @@ public function testLinearWhiteSpaceAtLineEndingIsEncoded() ->with($os); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('a'))); + ->andReturn([ord('a')]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(0x20)); + ->andReturn([0x20]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(0x20)); + ->andReturn([0x20]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(0x0D)); + ->andReturn([0x0D]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(0x0A)); + ->andReturn([0x0A]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('b'))); + ->andReturn([ord('b')]); $charStream->shouldReceive('readBytes') ->zeroOrMoreTimes() ->andReturn(false); @@ -206,9 +206,9 @@ public function testCRLFIsLeftAlone() equivalent to performing the three steps separately. */ - $os = $this->_createOutputByteStream(true); - $charStream = $this->_createCharacterStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(true); + $charStream = $this->createCharacterStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -221,31 +221,31 @@ public function testCRLFIsLeftAlone() ->with($os); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('a'))); + ->andReturn([ord('a')]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(0x0D)); + ->andReturn([0x0D]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(0x0A)); + ->andReturn([0x0A]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('b'))); + ->andReturn([ord('b')]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(0x0D)); + ->andReturn([0x0D]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(0x0A)); + ->andReturn([0x0A]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('c'))); + ->andReturn([ord('c')]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(0x0D)); + ->andReturn([0x0D]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(0x0A)); + ->andReturn([0x0A]); $charStream->shouldReceive('readBytes') ->zeroOrMoreTimes() ->andReturn(false); @@ -267,9 +267,9 @@ public function testLinesLongerThan76CharactersAreSoftBroken() line break in the encoded text. */ - $os = $this->_createOutputByteStream(true); - $charStream = $this->_createCharacterStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(true); + $charStream = $this->createCharacterStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -284,7 +284,7 @@ public function testLinesLongerThan76CharactersAreSoftBroken() for ($seq = 0; $seq <= 140; ++$seq) { $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('a'))); + ->andReturn([ord('a')]); } $charStream->shouldReceive('readBytes') ->zeroOrMoreTimes() @@ -297,9 +297,9 @@ public function testLinesLongerThan76CharactersAreSoftBroken() public function testMaxLineLengthCanBeSpecified() { - $os = $this->_createOutputByteStream(true); - $charStream = $this->_createCharacterStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(true); + $charStream = $this->createCharacterStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -314,7 +314,7 @@ public function testMaxLineLengthCanBeSpecified() for ($seq = 0; $seq <= 100; ++$seq) { $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('a'))); + ->andReturn([ord('a')]); } $charStream->shouldReceive('readBytes') ->zeroOrMoreTimes() @@ -334,9 +334,9 @@ public function testBytesBelowPermittedRangeAreEncoded() foreach (range(0, 32) as $ordinal) { $char = chr($ordinal); - $os = $this->_createOutputByteStream(true); - $charStream = $this->_createCharacterStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(true); + $charStream = $this->createCharacterStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -349,7 +349,7 @@ public function testBytesBelowPermittedRangeAreEncoded() ->with($os); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array($ordinal)); + ->andReturn([$ordinal]); $charStream->shouldReceive('readBytes') ->zeroOrMoreTimes() ->andReturn(false); @@ -368,9 +368,9 @@ public function testDecimalByte61IsEncoded() $char = chr(61); - $os = $this->_createOutputByteStream(true); - $charStream = $this->_createCharacterStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(true); + $charStream = $this->createCharacterStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -383,7 +383,7 @@ public function testDecimalByte61IsEncoded() ->with($os); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(61)); + ->andReturn([61]); $charStream->shouldReceive('readBytes') ->zeroOrMoreTimes() ->andReturn(false); @@ -402,9 +402,9 @@ public function testBytesAbovePermittedRangeAreEncoded() foreach (range(127, 255) as $ordinal) { $char = chr($ordinal); - $os = $this->_createOutputByteStream(true); - $charStream = $this->_createCharacterStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(true); + $charStream = $this->createCharacterStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -417,7 +417,7 @@ public function testBytesAbovePermittedRangeAreEncoded() ->with($os); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array($ordinal)); + ->andReturn([$ordinal]); $charStream->shouldReceive('readBytes') ->zeroOrMoreTimes() ->andReturn(false); @@ -430,9 +430,9 @@ public function testBytesAbovePermittedRangeAreEncoded() public function testFirstLineLengthCanBeDifferent() { - $os = $this->_createOutputByteStream(true); - $charStream = $this->_createCharacterStream(); - $is = $this->_createInputByteStream(); + $os = $this->createOutputByteStream(true); + $charStream = $this->createCharacterStream(); + $is = $this->createInputByteStream(); $collection = new Swift_StreamCollector(); $is->shouldReceive('write') @@ -447,7 +447,7 @@ public function testFirstLineLengthCanBeDifferent() for ($seq = 0; $seq <= 140; ++$seq) { $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('a'))); + ->andReturn([ord('a')]); } $charStream->shouldReceive('readBytes') ->zeroOrMoreTimes() @@ -463,7 +463,7 @@ public function testFirstLineLengthCanBeDifferent() public function testObserverInterfaceCanChangeCharset() { - $stream = $this->_createCharacterStream(); + $stream = $this->createCharacterStream(); $stream->shouldReceive('setCharacterSet') ->once() ->with('windows-1252'); @@ -491,7 +491,7 @@ public function testTextIsPreWrapped() ); } - private function _createCharacterStream($stub = false) + private function createCharacterStream($stub = false) { return $this->getMockery('Swift_CharacterStream')->shouldIgnoreMissing(); } @@ -499,17 +499,17 @@ private function _createCharacterStream($stub = false) private function createEncoder() { $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); - $charStream = new Swift_CharacterStream_NgCharacterStream($factory, 'utf-8'); + $charStream = new Swift_CharacterStream_CharacterStream($factory, 'utf-8'); return new Swift_Mime_ContentEncoder_QpContentEncoder($charStream); } - private function _createOutputByteStream($stub = false) + private function createOutputByteStream($stub = false) { return $this->getMockery('Swift_OutputByteStream')->shouldIgnoreMissing(); } - private function _createInputByteStream($stub = false) + private function createInputByteStream($stub = false) { return $this->getMockery('Swift_InputByteStream')->shouldIgnoreMissing(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/EmbeddedFileTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/EmbeddedFileTest.php index 3a1fc51..74f2acc 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/EmbeddedFileTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/EmbeddedFileTest.php @@ -1,55 +1,59 @@ addToAssertionCount(1); } public function testNestingLevelIsEmbedded() { - $file = $this->_createEmbeddedFile($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $file = $this->createEmbeddedFile($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $this->assertEquals( - Swift_Mime_MimeEntity::LEVEL_RELATED, $file->getNestingLevel() + Swift_Mime_SimpleMimeEntity::LEVEL_RELATED, $file->getNestingLevel() ); } public function testIdIsAutoGenerated() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addIdHeader') ->once() ->with('Content-ID', '/^.*?@.*?$/D'); - $file = $this->_createEmbeddedFile($headers, $this->_createEncoder(), - $this->_createCache() + $file = $this->createEmbeddedFile($headers, $this->createEncoder(), + $this->createCache() ); } public function testDefaultDispositionIsInline() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addParameterizedHeader') ->once() ->with('Content-Disposition', 'inline'); $headers->shouldReceive('addParameterizedHeader') ->zeroOrMoreTimes(); - $file = $this->_createEmbeddedFile($headers, $this->_createEncoder(), - $this->_createCache() + $file = $this->createEmbeddedFile($headers, $this->createEncoder(), + $this->createCache() ); } - protected function _createAttachment($headers, $encoder, $cache, $mimeTypes = array()) + protected function createAttachment($headers, $encoder, $cache, $mimeTypes = []) { - return $this->_createEmbeddedFile($headers, $encoder, $cache, $mimeTypes); + return $this->createEmbeddedFile($headers, $encoder, $cache, $mimeTypes); } - private function _createEmbeddedFile($headers, $encoder, $cache) + private function createEmbeddedFile($headers, $encoder, $cache) { - return new Swift_Mime_EmbeddedFile($headers, $encoder, $cache, new Swift_Mime_Grammar()); + $idGenerator = new Swift_Mime_IdGenerator('example.com'); + + return new Swift_Mime_EmbeddedFile($headers, $encoder, $cache, $idGenerator); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/HeaderEncoder/Base64HeaderEncoderTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/HeaderEncoder/Base64HeaderEncoderTest.php index 3580155..0db5407 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/HeaderEncoder/Base64HeaderEncoderTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/HeaderEncoder/Base64HeaderEncoderTest.php @@ -1,6 +1,6 @@ _createEncoder( - $this->_createCharacterStream(true) + $encoder = $this->createEncoder( + $this->createCharacterStream(true) ); $this->assertEquals('Q', $encoder->getName()); } @@ -21,12 +21,12 @@ public function testSpaceAndTabNeverAppear() the beginning and end of an 'encoded-word' are obvious. */ - $charStream = $this->_createCharacterStream(); + $charStream = $this->createCharacterStream(); $charStream->shouldReceive('readBytes') ->atLeast()->times(6) - ->andReturn(array(ord('a')), array(0x20), array(0x09), array(0x20), array(ord('b')), false); + ->andReturn([ord('a')], [0x20], [0x09], [0x20], [ord('b')], false); - $encoder = $this->_createEncoder($charStream); + $encoder = $this->createEncoder($charStream); $this->assertNotRegExp('~[ \t]~', $encoder->encodeString("a \t b"), '%s: encoded-words in headers cannot contain LWSP as per RFC 2047.' ); @@ -43,21 +43,21 @@ public function testSpaceIsRepresentedByUnderscore() always represents hexadecimal 20, even if the SPACE character occupies a different code position in the character set in use. */ - $charStream = $this->_createCharacterStream(); + $charStream = $this->createCharacterStream(); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('a'))); + ->andReturn([ord('a')]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(0x20)); + ->andReturn([0x20]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('b'))); + ->andReturn([ord('b')]); $charStream->shouldReceive('readBytes') ->zeroOrMoreTimes() ->andReturn(false); - $encoder = $this->_createEncoder($charStream); + $encoder = $this->createEncoder($charStream); $this->assertEquals('a_b', $encoder->encodeString('a b'), '%s: Spaces can be represented by more readable underscores as per RFC 2047.' ); @@ -72,21 +72,21 @@ public function testEqualsAndQuestionAndUnderscoreAreEncoded() particular, SPACE and TAB MUST NOT be represented as themselves within encoded words. */ - $charStream = $this->_createCharacterStream(); + $charStream = $this->createCharacterStream(); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('='))); + ->andReturn([ord('=')]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('?'))); + ->andReturn([ord('?')]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('_'))); + ->andReturn([ord('_')]); $charStream->shouldReceive('readBytes') ->zeroOrMoreTimes() ->andReturn(false); - $encoder = $this->_createEncoder($charStream); + $encoder = $this->createEncoder($charStream); $this->assertEquals('=3D=3F=5F', $encoder->encodeString('=?_'), '%s: Chars =, ? and _ (underscore) may not appear as per RFC 2047.' ); @@ -99,21 +99,21 @@ public function testParensAndQuotesAreEncoded() contain the characters "(", ")" or " */ - $charStream = $this->_createCharacterStream(); + $charStream = $this->createCharacterStream(); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('('))); + ->andReturn([ord('(')]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('"'))); + ->andReturn([ord('"')]); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord(')'))); + ->andReturn([ord(')')]); $charStream->shouldReceive('readBytes') ->zeroOrMoreTimes() ->andReturn(false); - $encoder = $this->_createEncoder($charStream); + $encoder = $this->createEncoder($charStream); $this->assertEquals('=28=22=29', $encoder->encodeString('(")'), '%s: Chars (, " (DQUOTE) and ) may not appear as per RFC 2047.' ); @@ -139,21 +139,21 @@ public function testOnlyCharactersAllowedInPhrasesAreUsed() $allowedBytes = array_merge( range(ord('a'), ord('z')), range(ord('A'), ord('Z')), range(ord('0'), ord('9')), - array(ord('!'), ord('*'), ord('+'), ord('-'), ord('/')) + [ord('!'), ord('*'), ord('+'), ord('-'), ord('/')] ); foreach (range(0x00, 0xFF) as $byte) { $char = pack('C', $byte); - $charStream = $this->_createCharacterStream(); + $charStream = $this->createCharacterStream(); $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array($byte)); + ->andReturn([$byte]); $charStream->shouldReceive('readBytes') ->zeroOrMoreTimes() ->andReturn(false); - $encoder = $this->_createEncoder($charStream); + $encoder = $this->createEncoder($charStream); $encodedChar = $encoder->encodeString($char); if (in_array($byte, $allowedBytes)) { @@ -186,14 +186,14 @@ public function testEqualsNeverAppearsAtEndOfLine() $input = str_repeat('a', 140); - $charStream = $this->_createCharacterStream(); + $charStream = $this->createCharacterStream(); $output = ''; $seq = 0; for (; $seq < 140; ++$seq) { $charStream->shouldReceive('readBytes') ->once() - ->andReturn(array(ord('a'))); + ->andReturn([ord('a')]); if (75 == $seq) { $output .= "\r\n"; // =\r\n @@ -205,16 +205,16 @@ public function testEqualsNeverAppearsAtEndOfLine() ->zeroOrMoreTimes() ->andReturn(false); - $encoder = $this->_createEncoder($charStream); + $encoder = $this->createEncoder($charStream); $this->assertEquals($output, $encoder->encodeString($input)); } - private function _createEncoder($charStream) + private function createEncoder($charStream) { return new Swift_Mime_HeaderEncoder_QpHeaderEncoder($charStream); } - private function _createCharacterStream($stub = false) + private function createCharacterStream($stub = false) { return $this->getMockery('Swift_CharacterStream')->shouldIgnoreMissing(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/DateHeaderTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/DateHeaderTest.php index 1822ea6..e419306 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/DateHeaderTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/DateHeaderTest.php @@ -1,6 +1,6 @@ _getHeader('Date'); + $header = $this->getHeader('Date'); $this->assertEquals(Swift_Mime_Header::TYPE_DATE, $header->getFieldType()); } - public function testGetTimestamp() + public function testGetDateTime() { - $timestamp = time(); - $header = $this->_getHeader('Date'); - $header->setTimestamp($timestamp); - $this->assertSame($timestamp, $header->getTimestamp()); + $dateTime = new DateTimeImmutable(); + $header = $this->getHeader('Date'); + $header->setDateTime($dateTime); + $this->assertSame($dateTime, $header->getDateTime()); } - public function testTimestampCanBeSetBySetter() + public function testDateTimeCanBeSetBySetter() { - $timestamp = time(); - $header = $this->_getHeader('Date'); - $header->setTimestamp($timestamp); - $this->assertSame($timestamp, $header->getTimestamp()); + $dateTime = new DateTimeImmutable(); + $header = $this->getHeader('Date'); + $header->setDateTime($dateTime); + $this->assertSame($dateTime, $header->getDateTime()); } - public function testIntegerTimestampIsConvertedToRfc2822Date() + public function testDateTimeIsConvertedToImmutable() { - $timestamp = time(); - $header = $this->_getHeader('Date'); - $header->setTimestamp($timestamp); - $this->assertEquals(date('r', $timestamp), $header->getFieldBody()); + $dateTime = new DateTime(); + $header = $this->getHeader('Date'); + $header->setDateTime($dateTime); + $this->assertInstanceOf('DateTimeImmutable', $header->getDateTime()); + $this->assertEquals($dateTime->getTimestamp(), $header->getDateTime()->getTimestamp()); + $this->assertEquals($dateTime->getTimezone(), $header->getDateTime()->getTimezone()); + } + + public function testDateTimeIsImmutable() + { + $dateTime = new DateTime('2000-01-01 12:00:00 Europe/Berlin'); + $header = $this->getHeader('Date'); + $header->setDateTime($dateTime); + + $dateTime->setDate(2002, 2, 2); + $this->assertEquals('Sat, 01 Jan 2000 12:00:00 +0100', $header->getDateTime()->format('r')); + $this->assertEquals('Sat, 01 Jan 2000 12:00:00 +0100', $header->getFieldBody()); + } + + public function testDateTimeIsConvertedToRfc2822Date() + { + $dateTime = new DateTimeImmutable('2000-01-01 12:00:00 Europe/Berlin'); + $header = $this->getHeader('Date'); + $header->setDateTime($dateTime); + $this->assertEquals('Sat, 01 Jan 2000 12:00:00 +0100', $header->getFieldBody()); } public function testSetBodyModel() { - $timestamp = time(); - $header = $this->_getHeader('Date'); - $header->setFieldBodyModel($timestamp); - $this->assertEquals(date('r', $timestamp), $header->getFieldBody()); + $dateTime = new DateTimeImmutable(); + $header = $this->getHeader('Date'); + $header->setFieldBodyModel($dateTime); + $this->assertEquals($dateTime->format('r'), $header->getFieldBody()); } public function testGetBodyModel() { - $timestamp = time(); - $header = $this->_getHeader('Date'); - $header->setTimestamp($timestamp); - $this->assertEquals($timestamp, $header->getFieldBodyModel()); + $dateTime = new DateTimeImmutable(); + $header = $this->getHeader('Date'); + $header->setDateTime($dateTime); + $this->assertEquals($dateTime, $header->getFieldBodyModel()); } public function testToString() { - $timestamp = time(); - $header = $this->_getHeader('Date'); - $header->setTimestamp($timestamp); - $this->assertEquals('Date: '.date('r', $timestamp)."\r\n", + $dateTime = new DateTimeImmutable('2000-01-01 12:00:00 Europe/Berlin'); + $header = $this->getHeader('Date'); + $header->setDateTime($dateTime); + $this->assertEquals("Date: Sat, 01 Jan 2000 12:00:00 +0100\r\n", $header->toString() ); } - private function _getHeader($name) + private function getHeader($name) { - return new Swift_Mime_Headers_DateHeader($name, new Swift_Mime_Grammar()); + return new Swift_Mime_Headers_DateHeader($name); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/IdentificationHeaderTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/IdentificationHeaderTest.php index 93b3f60..0d2edb7 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/IdentificationHeaderTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/IdentificationHeaderTest.php @@ -1,10 +1,12 @@ _getHeader('Message-ID'); + $header = $this->getHeader('Message-ID'); $this->assertEquals(Swift_Mime_Header::TYPE_ID, $header->getFieldType()); } @@ -28,23 +30,23 @@ public function testValueMatchesMsgIdSpec() no-fold-literal = "[" *(dtext / quoted-pair) "]" */ - $header = $this->_getHeader('Message-ID'); + $header = $this->getHeader('Message-ID'); $header->setId('id-left@id-right'); $this->assertEquals('', $header->getFieldBody()); } public function testIdCanBeRetrievedVerbatim() { - $header = $this->_getHeader('Message-ID'); + $header = $this->getHeader('Message-ID'); $header->setId('id-left@id-right'); $this->assertEquals('id-left@id-right', $header->getId()); } public function testMultipleIdsCanBeSet() { - $header = $this->_getHeader('References'); - $header->setIds(array('a@b', 'x@y')); - $this->assertEquals(array('a@b', 'x@y'), $header->getIds()); + $header = $this->getHeader('References'); + $header->setIds(['a@b', 'x@y']); + $this->assertEquals(['a@b', 'x@y'], $header->getIds()); } public function testSettingMultipleIdsProducesAListValue() @@ -60,8 +62,8 @@ public function testSettingMultipleIdsProducesAListValue() references = "References:" 1*msg-id CRLF */ - $header = $this->_getHeader('References'); - $header->setIds(array('a@b', 'x@y')); + $header = $this->getHeader('References'); + $header->setIds(['a@b', 'x@y']); $this->assertEquals(' ', $header->getFieldBody()); } @@ -71,7 +73,7 @@ public function testIdLeftCanBeQuoted() id-left = dot-atom-text / no-fold-quote / obs-id-left */ - $header = $this->_getHeader('References'); + $header = $this->getHeader('References'); $header->setId('"ab"@c'); $this->assertEquals('"ab"@c', $header->getId()); $this->assertEquals('<"ab"@c>', $header->getFieldBody()); @@ -83,7 +85,7 @@ public function testIdLeftCanContainAnglesAsQuotedPairs() no-fold-quote = DQUOTE *(qtext / quoted-pair) DQUOTE */ - $header = $this->_getHeader('References'); + $header = $this->getHeader('References'); $header->setId('"a\\<\\>b"@c'); $this->assertEquals('"a\\<\\>b"@c', $header->getId()); $this->assertEquals('<"a\\<\\>b"@c>', $header->getFieldBody()); @@ -91,22 +93,20 @@ public function testIdLeftCanContainAnglesAsQuotedPairs() public function testIdLeftCanBeDotAtom() { - $header = $this->_getHeader('References'); + $header = $this->getHeader('References'); $header->setId('a.b+&%$.c@d'); $this->assertEquals('a.b+&%$.c@d', $header->getId()); $this->assertEquals('', $header->getFieldBody()); } + /** + * @expectedException \Exception + * @expectedMessageException "a b c" is not valid id-left + */ public function testInvalidIdLeftThrowsException() { - try { - $header = $this->_getHeader('References'); - $header->setId('a b c@d'); - $this->fail( - 'Exception should be thrown since "a b c" is not valid id-left.' - ); - } catch (Exception $e) { - } + $header = $this->getHeader('References'); + $header->setId('a b c@d'); } public function testIdRightCanBeDotAtom() @@ -115,7 +115,7 @@ public function testIdRightCanBeDotAtom() id-right = dot-atom-text / no-fold-literal / obs-id-right */ - $header = $this->_getHeader('References'); + $header = $this->getHeader('References'); $header->setId('a@b.c+&%$.d'); $this->assertEquals('a@b.c+&%$.d', $header->getId()); $this->assertEquals('', $header->getFieldBody()); @@ -127,63 +127,66 @@ public function testIdRightCanBeLiteral() no-fold-literal = "[" *(dtext / quoted-pair) "]" */ - $header = $this->_getHeader('References'); + $header = $this->getHeader('References'); $header->setId('a@[1.2.3.4]'); $this->assertEquals('a@[1.2.3.4]', $header->getId()); $this->assertEquals('', $header->getFieldBody()); } + public function testIdRigthIsIdnEncoded() + { + $header = $this->getHeader('References'); + $header->setId('a@ä'); + $this->assertEquals('a@ä', $header->getId()); + $this->assertEquals('', $header->getFieldBody()); + } + + /** + * @expectedException \Exception + * @expectedMessageException "b c d" is not valid id-right + */ public function testInvalidIdRightThrowsException() { - try { - $header = $this->_getHeader('References'); - $header->setId('a@b c d'); - $this->fail( - 'Exception should be thrown since "b c d" is not valid id-right.' - ); - } catch (Exception $e) { - } + $header = $this->getHeader('References'); + $header->setId('a@b c d'); } + /** + * @expectedException \Exception + * @expectedMessageException "abc" is does not contain @ + */ public function testMissingAtSignThrowsException() { /* -- RFC 2822, 3.6.4. msg-id = [CFWS] "<" id-left "@" id-right ">" [CFWS] */ - - try { - $header = $this->_getHeader('References'); - $header->setId('abc'); - $this->fail( - 'Exception should be thrown since "abc" is does not contain @.' - ); - } catch (Exception $e) { - } + $header = $this->getHeader('References'); + $header->setId('abc'); } public function testSetBodyModel() { - $header = $this->_getHeader('Message-ID'); + $header = $this->getHeader('Message-ID'); $header->setFieldBodyModel('a@b'); - $this->assertEquals(array('a@b'), $header->getIds()); + $this->assertEquals(['a@b'], $header->getIds()); } public function testGetBodyModel() { - $header = $this->_getHeader('Message-ID'); + $header = $this->getHeader('Message-ID'); $header->setId('a@b'); - $this->assertEquals(array('a@b'), $header->getFieldBodyModel()); + $this->assertEquals(['a@b'], $header->getFieldBodyModel()); } public function testStringValue() { - $header = $this->_getHeader('References'); - $header->setIds(array('a@b', 'x@y')); + $header = $this->getHeader('References'); + $header->setIds(['a@b', 'x@y']); $this->assertEquals('References: '."\r\n", $header->toString()); } - private function _getHeader($name) + private function getHeader($name) { - return new Swift_Mime_Headers_IdentificationHeader($name, new Swift_Mime_Grammar()); + return new Swift_Mime_Headers_IdentificationHeader($name, new EmailValidator(), new Swift_AddressEncoder_IdnAddressEncoder()); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/MailboxHeaderTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/MailboxHeaderTest.php index 0713ff4..f64f5db 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/MailboxHeaderTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/MailboxHeaderTest.php @@ -1,189 +1,227 @@ _getHeader('To', $this->_getEncoder('Q', true)); + $header = $this->getHeader('To'); $this->assertEquals(Swift_Mime_Header::TYPE_MAILBOX, $header->getFieldType()); } public function testMailboxIsSetForAddress() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); + $header = $this->getHeader('From'); $header->setAddresses('chris@swiftmailer.org'); - $this->assertEquals(array('chris@swiftmailer.org'), + $this->assertEquals(['chris@swiftmailer.org'], $header->getNameAddressStrings() ); } public function testMailboxIsRenderedForNameAddress() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setNameAddresses(array('chris@swiftmailer.org' => 'Chris Corbyn')); + $header = $this->getHeader('From'); + $header->setNameAddresses(['chris@swiftmailer.org' => 'Chris Corbyn']); $this->assertEquals( - array('Chris Corbyn '), $header->getNameAddressStrings() + ['Chris Corbyn '], $header->getNameAddressStrings() ); } public function testAddressCanBeReturnedForAddress() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); + $header = $this->getHeader('From'); $header->setAddresses('chris@swiftmailer.org'); - $this->assertEquals(array('chris@swiftmailer.org'), $header->getAddresses()); + $this->assertEquals(['chris@swiftmailer.org'], $header->getAddresses()); } public function testAddressCanBeReturnedForNameAddress() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setNameAddresses(array('chris@swiftmailer.org' => 'Chris Corbyn')); - $this->assertEquals(array('chris@swiftmailer.org'), $header->getAddresses()); + $header = $this->getHeader('From'); + $header->setNameAddresses(['chris@swiftmailer.org' => 'Chris Corbyn']); + $this->assertEquals(['chris@swiftmailer.org'], $header->getAddresses()); } public function testQuotesInNameAreQuoted() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setNameAddresses(array( + $header = $this->getHeader('From'); + $header->setNameAddresses([ 'chris@swiftmailer.org' => 'Chris Corbyn, "DHE"', - )); + ]); $this->assertEquals( - array('"Chris Corbyn, \"DHE\"" '), + ['"Chris Corbyn, \"DHE\"" '], $header->getNameAddressStrings() ); } public function testEscapeCharsInNameAreQuoted() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setNameAddresses(array( + $header = $this->getHeader('From'); + $header->setNameAddresses([ 'chris@swiftmailer.org' => 'Chris Corbyn, \\escaped\\', - )); + ]); + $this->assertEquals( + ['"Chris Corbyn, \\\\escaped\\\\" '], + $header->getNameAddressStrings() + ); + } + + public function testUtf8CharsInDomainAreIdnEncoded() + { + $header = $this->getHeader('From'); + $header->setNameAddresses([ + 'chris@swïftmailer.org' => 'Chris Corbyn', + ]); + $this->assertEquals( + ['Chris Corbyn '], + $header->getNameAddressStrings() + ); + } + + /** + * @expectedException \Swift_AddressEncoderException + */ + public function testUtf8CharsInLocalPartThrows() + { + $header = $this->getHeader('From'); + $header->setNameAddresses([ + 'chrïs@swiftmailer.org' => 'Chris Corbyn', + ]); + $header->getNameAddressStrings(); + } + + public function testUtf8CharsInEmail() + { + $header = $this->getHeader('From', null, new Swift_AddressEncoder_Utf8AddressEncoder()); + $header->setNameAddresses([ + 'chrïs@swïftmailer.org' => 'Chris Corbyn', + ]); $this->assertEquals( - array('"Chris Corbyn, \\\\escaped\\\\" '), + ['Chris Corbyn '], $header->getNameAddressStrings() ); } public function testGetMailboxesReturnsNameValuePairs() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setNameAddresses(array( + $header = $this->getHeader('From'); + $header->setNameAddresses([ 'chris@swiftmailer.org' => 'Chris Corbyn, DHE', - )); + ]); $this->assertEquals( - array('chris@swiftmailer.org' => 'Chris Corbyn, DHE'), $header->getNameAddresses() + ['chris@swiftmailer.org' => 'Chris Corbyn, DHE'], $header->getNameAddresses() ); } public function testMultipleAddressesCanBeSetAndFetched() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setAddresses(array( + $header = $this->getHeader('From'); + $header->setAddresses([ 'chris@swiftmailer.org', 'mark@swiftmailer.org', - )); + ]); $this->assertEquals( - array('chris@swiftmailer.org', 'mark@swiftmailer.org'), + ['chris@swiftmailer.org', 'mark@swiftmailer.org'], $header->getAddresses() ); } public function testMultipleAddressesAsMailboxes() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setAddresses(array( + $header = $this->getHeader('From'); + $header->setAddresses([ 'chris@swiftmailer.org', 'mark@swiftmailer.org', - )); + ]); $this->assertEquals( - array('chris@swiftmailer.org' => null, 'mark@swiftmailer.org' => null), + ['chris@swiftmailer.org' => null, 'mark@swiftmailer.org' => null], $header->getNameAddresses() ); } public function testMultipleAddressesAsMailboxStrings() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setAddresses(array( + $header = $this->getHeader('From'); + $header->setAddresses([ 'chris@swiftmailer.org', 'mark@swiftmailer.org', - )); + ]); $this->assertEquals( - array('chris@swiftmailer.org', 'mark@swiftmailer.org'), + ['chris@swiftmailer.org', 'mark@swiftmailer.org'], $header->getNameAddressStrings() ); } public function testMultipleNamedMailboxesReturnsMultipleAddresses() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setNameAddresses(array( + $header = $this->getHeader('From'); + $header->setNameAddresses([ 'chris@swiftmailer.org' => 'Chris Corbyn', 'mark@swiftmailer.org' => 'Mark Corbyn', - )); + ]); $this->assertEquals( - array('chris@swiftmailer.org', 'mark@swiftmailer.org'), + ['chris@swiftmailer.org', 'mark@swiftmailer.org'], $header->getAddresses() ); } public function testMultipleNamedMailboxesReturnsMultipleMailboxes() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setNameAddresses(array( + $header = $this->getHeader('From'); + $header->setNameAddresses([ 'chris@swiftmailer.org' => 'Chris Corbyn', 'mark@swiftmailer.org' => 'Mark Corbyn', - )); - $this->assertEquals(array( + ]); + $this->assertEquals([ 'chris@swiftmailer.org' => 'Chris Corbyn', 'mark@swiftmailer.org' => 'Mark Corbyn', - ), + ], $header->getNameAddresses() ); } public function testMultipleMailboxesProducesMultipleMailboxStrings() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setNameAddresses(array( + $header = $this->getHeader('From'); + $header->setNameAddresses([ 'chris@swiftmailer.org' => 'Chris Corbyn', 'mark@swiftmailer.org' => 'Mark Corbyn', - )); - $this->assertEquals(array( + ]); + $this->assertEquals([ 'Chris Corbyn ', 'Mark Corbyn ', - ), + ], $header->getNameAddressStrings() ); } public function testSetAddressesOverwritesAnyMailboxes() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setNameAddresses(array( + $header = $this->getHeader('From'); + $header->setNameAddresses([ 'chris@swiftmailer.org' => 'Chris Corbyn', 'mark@swiftmailer.org' => 'Mark Corbyn', - )); + ]); $this->assertEquals( - array('chris@swiftmailer.org' => 'Chris Corbyn', - 'mark@swiftmailer.org' => 'Mark Corbyn', ), + ['chris@swiftmailer.org' => 'Chris Corbyn', + 'mark@swiftmailer.org' => 'Mark Corbyn', ], $header->getNameAddresses() ); $this->assertEquals( - array('chris@swiftmailer.org', 'mark@swiftmailer.org'), + ['chris@swiftmailer.org', 'mark@swiftmailer.org'], $header->getAddresses() ); - $header->setAddresses(array('chris@swiftmailer.org', 'mark@swiftmailer.org')); + $header->setAddresses(['chris@swiftmailer.org', 'mark@swiftmailer.org']); $this->assertEquals( - array('chris@swiftmailer.org' => null, 'mark@swiftmailer.org' => null), + ['chris@swiftmailer.org' => null, 'mark@swiftmailer.org' => null], $header->getNameAddresses() ); $this->assertEquals( - array('chris@swiftmailer.org', 'mark@swiftmailer.org'), + ['chris@swiftmailer.org', 'mark@swiftmailer.org'], $header->getAddresses() ); } @@ -192,18 +230,18 @@ public function testNameIsEncodedIfNonAscii() { $name = 'C'.pack('C', 0x8F).'rbyn'; - $encoder = $this->_getEncoder('Q'); + $encoder = $this->getEncoder('Q'); $encoder->shouldReceive('encodeString') ->once() ->with($name, \Mockery::any(), \Mockery::any(), \Mockery::any()) ->andReturn('C=8Frbyn'); - $header = $this->_getHeader('From', $encoder); - $header->setNameAddresses(array('chris@swiftmailer.org' => 'Chris '.$name)); + $header = $this->getHeader('From', $encoder); + $header->setNameAddresses(['chris@swiftmailer.org' => 'Chris '.$name]); $addresses = $header->getNameAddressStrings(); $this->assertEquals( - 'Chris =?'.$this->_charset.'?Q?C=8Frbyn?= ', + 'Chris =?'.$this->charset.'?Q?C=8Frbyn?= ', array_shift($addresses) ); } @@ -217,24 +255,24 @@ public function testEncodingLineLengthCalculations() $name = 'C'.pack('C', 0x8F).'rbyn'; - $encoder = $this->_getEncoder('Q'); + $encoder = $this->getEncoder('Q'); $encoder->shouldReceive('encodeString') ->once() ->with($name, \Mockery::any(), \Mockery::any(), \Mockery::any()) ->andReturn('C=8Frbyn'); - $header = $this->_getHeader('From', $encoder); - $header->setNameAddresses(array('chris@swiftmailer.org' => 'Chris '.$name)); + $header = $this->getHeader('From', $encoder); + $header->setNameAddresses(['chris@swiftmailer.org' => 'Chris '.$name]); $header->getNameAddressStrings(); } public function testGetValueReturnsMailboxStringValue() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setNameAddresses(array( + $header = $this->getHeader('From'); + $header->setNameAddresses([ 'chris@swiftmailer.org' => 'Chris Corbyn', - )); + ]); $this->assertEquals( 'Chris Corbyn ', $header->getFieldBody() ); @@ -242,11 +280,11 @@ public function testGetValueReturnsMailboxStringValue() public function testGetValueReturnsMailboxStringValueForMultipleMailboxes() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setNameAddresses(array( + $header = $this->getHeader('From'); + $header->setNameAddresses([ 'chris@swiftmailer.org' => 'Chris Corbyn', 'mark@swiftmailer.org' => 'Mark Corbyn', - )); + ]); $this->assertEquals( 'Chris Corbyn , Mark Corbyn ', $header->getFieldBody() @@ -255,51 +293,51 @@ public function testGetValueReturnsMailboxStringValueForMultipleMailboxes() public function testRemoveAddressesWithSingleValue() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setNameAddresses(array( + $header = $this->getHeader('From'); + $header->setNameAddresses([ 'chris@swiftmailer.org' => 'Chris Corbyn', 'mark@swiftmailer.org' => 'Mark Corbyn', - )); + ]); $header->removeAddresses('chris@swiftmailer.org'); - $this->assertEquals(array('mark@swiftmailer.org'), + $this->assertEquals(['mark@swiftmailer.org'], $header->getAddresses() ); } public function testRemoveAddressesWithList() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setNameAddresses(array( + $header = $this->getHeader('From'); + $header->setNameAddresses([ 'chris@swiftmailer.org' => 'Chris Corbyn', 'mark@swiftmailer.org' => 'Mark Corbyn', - )); + ]); $header->removeAddresses( - array('chris@swiftmailer.org', 'mark@swiftmailer.org') + ['chris@swiftmailer.org', 'mark@swiftmailer.org'] ); - $this->assertEquals(array(), $header->getAddresses()); + $this->assertEquals([], $header->getAddresses()); } public function testSetBodyModel() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); + $header = $this->getHeader('From'); $header->setFieldBodyModel('chris@swiftmailer.org'); - $this->assertEquals(array('chris@swiftmailer.org' => null), $header->getNameAddresses()); + $this->assertEquals(['chris@swiftmailer.org' => null], $header->getNameAddresses()); } public function testGetBodyModel() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setAddresses(array('chris@swiftmailer.org')); - $this->assertEquals(array('chris@swiftmailer.org' => null), $header->getFieldBodyModel()); + $header = $this->getHeader('From'); + $header->setAddresses(['chris@swiftmailer.org']); + $this->assertEquals(['chris@swiftmailer.org' => null], $header->getFieldBodyModel()); } public function testToString() { - $header = $this->_getHeader('From', $this->_getEncoder('Q', true)); - $header->setNameAddresses(array( + $header = $this->getHeader('From'); + $header->setNameAddresses([ 'chris@swiftmailer.org' => 'Chris Corbyn', 'mark@swiftmailer.org' => 'Mark Corbyn', - )); + ]); $this->assertEquals( 'From: Chris Corbyn , '. 'Mark Corbyn '."\r\n", @@ -307,15 +345,17 @@ public function testToString() ); } - private function _getHeader($name, $encoder) + private function getHeader($name, $encoder = null, $addressEncoder = null) { - $header = new Swift_Mime_Headers_MailboxHeader($name, $encoder, new Swift_Mime_Grammar()); - $header->setCharset($this->_charset); + $encoder = $encoder ?? $this->getEncoder('Q', true); + $addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); + $header = new Swift_Mime_Headers_MailboxHeader($name, $encoder, new EmailValidator(), $addressEncoder); + $header->setCharset($this->charset); return $header; } - private function _getEncoder($type, $stub = false) + private function getEncoder($type) { $encoder = $this->getMockery('Swift_Mime_HeaderEncoder')->shouldIgnoreMissing(); $encoder->shouldReceive('getName') diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/ParameterizedHeaderTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/ParameterizedHeaderTest.php index cd027cc..c90b05b 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/ParameterizedHeaderTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/ParameterizedHeaderTest.php @@ -2,21 +2,21 @@ class Swift_Mime_Headers_ParameterizedHeaderTest extends \SwiftMailerTestCase { - private $_charset = 'utf-8'; - private $_lang = 'en-us'; + private $charset = 'utf-8'; + private $lang = 'en-us'; public function testTypeIsParameterizedHeader() { - $header = $this->_getHeader('Content-Type', - $this->_getHeaderEncoder('Q', true), $this->_getParameterEncoder(true) + $header = $this->getHeader('Content-Type', + $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) ); $this->assertEquals(Swift_Mime_Header::TYPE_PARAMETERIZED, $header->getFieldType()); } public function testValueIsReturnedVerbatim() { - $header = $this->_getHeader('Content-Type', - $this->_getHeaderEncoder('Q', true), $this->_getParameterEncoder(true) + $header = $this->getHeader('Content-Type', + $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) ); $header->setValue('text/plain'); $this->assertEquals('text/plain', $header->getValue()); @@ -43,21 +43,21 @@ public function testParametersAreAppended() ; to use within parameter values */ - $header = $this->_getHeader('Content-Type', - $this->_getHeaderEncoder('Q', true), $this->_getParameterEncoder(true) + $header = $this->getHeader('Content-Type', + $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) ); $header->setValue('text/plain'); - $header->setParameters(array('charset' => 'utf-8')); + $header->setParameters(['charset' => 'utf-8']); $this->assertEquals('text/plain; charset=utf-8', $header->getFieldBody()); } public function testSpaceInParamResultsInQuotedString() { - $header = $this->_getHeader('Content-Disposition', - $this->_getHeaderEncoder('Q', true), $this->_getParameterEncoder(true) + $header = $this->getHeader('Content-Disposition', + $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) ); $header->setValue('attachment'); - $header->setParameters(array('filename' => 'my file.txt')); + $header->setParameters(['filename' => 'my file.txt']); $this->assertEquals('attachment; filename="my file.txt"', $header->getFieldBody() ); @@ -94,18 +94,18 @@ public function testLongParamsAreBrokenIntoMultipleAttributeStrings() $value = str_repeat('a', 180); - $encoder = $this->_getParameterEncoder(); + $encoder = $this->getParameterEncoder(); $encoder->shouldReceive('encodeString') ->once() ->with($value, \Mockery::any(), 63, \Mockery::any()) ->andReturn(str_repeat('a', 63)."\r\n". str_repeat('a', 63)."\r\n".str_repeat('a', 54)); - $header = $this->_getHeader('Content-Disposition', - $this->_getHeaderEncoder('Q', true), $encoder + $header = $this->getHeader('Content-Disposition', + $this->getHeaderEncoder('Q', true), $encoder ); $header->setValue('attachment'); - $header->setParameters(array('filename' => $value)); + $header->setParameters(['filename' => $value]); $header->setMaxLineLength(78); $this->assertEquals( 'attachment; '. @@ -143,21 +143,21 @@ public function testEncodedParamDataIncludesCharsetAndLanguage() $value = str_repeat('a', 20).pack('C', 0x8F).str_repeat('a', 10); - $encoder = $this->_getParameterEncoder(); + $encoder = $this->getParameterEncoder(); $encoder->shouldReceive('encodeString') ->once() ->with($value, 12, 62, \Mockery::any()) ->andReturn(str_repeat('a', 20).'%8F'.str_repeat('a', 10)); - $header = $this->_getHeader('Content-Disposition', - $this->_getHeaderEncoder('Q', true), $encoder + $header = $this->getHeader('Content-Disposition', + $this->getHeaderEncoder('Q', true), $encoder ); $header->setValue('attachment'); - $header->setParameters(array('filename' => $value)); + $header->setParameters(['filename' => $value]); $header->setMaxLineLength(78); - $header->setLanguage($this->_lang); + $header->setLanguage($this->lang); $this->assertEquals( - 'attachment; filename*='.$this->_charset."'".$this->_lang."'". + 'attachment; filename*='.$this->charset."'".$this->lang."'". str_repeat('a', 20).'%8F'.str_repeat('a', 10), $header->getFieldBody() ); @@ -196,22 +196,22 @@ public function testMultipleEncodedParamLinesAreFormattedCorrectly() $value = str_repeat('a', 20).pack('C', 0x8F).str_repeat('a', 60); - $encoder = $this->_getParameterEncoder(); + $encoder = $this->getParameterEncoder(); $encoder->shouldReceive('encodeString') ->once() ->with($value, 12, 62, \Mockery::any()) ->andReturn(str_repeat('a', 20).'%8F'.str_repeat('a', 28)."\r\n". str_repeat('a', 32)); - $header = $this->_getHeader('Content-Disposition', - $this->_getHeaderEncoder('Q', true), $encoder + $header = $this->getHeader('Content-Disposition', + $this->getHeaderEncoder('Q', true), $encoder ); $header->setValue('attachment'); - $header->setParameters(array('filename' => $value)); + $header->setParameters(['filename' => $value]); $header->setMaxLineLength(78); - $header->setLanguage($this->_lang); + $header->setLanguage($this->lang); $this->assertEquals( - 'attachment; filename*0*='.$this->_charset."'".$this->_lang."'". + 'attachment; filename*0*='.$this->charset."'".$this->lang."'". str_repeat('a', 20).'%8F'.str_repeat('a', 28).";\r\n ". 'filename*1*='.str_repeat('a', 32), $header->getFieldBody() @@ -220,11 +220,11 @@ public function testMultipleEncodedParamLinesAreFormattedCorrectly() public function testToString() { - $header = $this->_getHeader('Content-Type', - $this->_getHeaderEncoder('Q', true), $this->_getParameterEncoder(true) + $header = $this->getHeader('Content-Type', + $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) ); $header->setValue('text/html'); - $header->setParameters(array('charset' => 'utf-8')); + $header->setParameters(['charset' => 'utf-8']); $this->assertEquals('Content-Type: text/html; charset=utf-8'."\r\n", $header->toString() ); @@ -234,15 +234,15 @@ public function testValueCanBeEncodedIfNonAscii() { $value = 'fo'.pack('C', 0x8F).'bar'; - $encoder = $this->_getHeaderEncoder('Q'); + $encoder = $this->getHeaderEncoder('Q'); $encoder->shouldReceive('encodeString') ->once() ->with($value, \Mockery::any(), \Mockery::any(), \Mockery::any()) ->andReturn('fo=8Fbar'); - $header = $this->_getHeader('X-Foo', $encoder, $this->_getParameterEncoder(true)); + $header = $this->getHeader('X-Foo', $encoder, $this->getParameterEncoder(true)); $header->setValue($value); - $header->setParameters(array('lookslike' => 'foobar')); + $header->setParameters(['lookslike' => 'foobar']); $this->assertEquals('X-Foo: =?utf-8?Q?fo=8Fbar?=; lookslike=foobar'."\r\n", $header->toString() ); @@ -252,21 +252,21 @@ public function testValueAndParamCanBeEncodedIfNonAscii() { $value = 'fo'.pack('C', 0x8F).'bar'; - $encoder = $this->_getHeaderEncoder('Q'); + $encoder = $this->getHeaderEncoder('Q'); $encoder->shouldReceive('encodeString') ->once() ->with($value, \Mockery::any(), \Mockery::any(), \Mockery::any()) ->andReturn('fo=8Fbar'); - $paramEncoder = $this->_getParameterEncoder(); + $paramEncoder = $this->getParameterEncoder(); $paramEncoder->shouldReceive('encodeString') ->once() ->with($value, \Mockery::any(), \Mockery::any(), \Mockery::any()) ->andReturn('fo%8Fbar'); - $header = $this->_getHeader('X-Foo', $encoder, $paramEncoder); + $header = $this->getHeader('X-Foo', $encoder, $paramEncoder); $header->setValue($value); - $header->setParameters(array('says' => $value)); + $header->setParameters(['says' => $value]); $this->assertEquals("X-Foo: =?utf-8?Q?fo=8Fbar?=; says*=utf-8''fo%8Fbar\r\n", $header->toString() ); @@ -276,15 +276,15 @@ public function testParamsAreEncodedWithEncodedWordsIfNoParamEncoderSet() { $value = 'fo'.pack('C', 0x8F).'bar'; - $encoder = $this->_getHeaderEncoder('Q'); + $encoder = $this->getHeaderEncoder('Q'); $encoder->shouldReceive('encodeString') ->once() ->with($value, \Mockery::any(), \Mockery::any(), \Mockery::any()) ->andReturn('fo=8Fbar'); - $header = $this->_getHeader('X-Foo', $encoder, null); + $header = $this->getHeader('X-Foo', $encoder, null); $header->setValue('bar'); - $header->setParameters(array('says' => $value)); + $header->setParameters(['says' => $value]); $this->assertEquals("X-Foo: bar; says=\"=?utf-8?Q?fo=8Fbar?=\"\r\n", $header->toString() ); @@ -311,22 +311,22 @@ public function testLanguageInformationAppearsInEncodedWords() $value = 'fo'.pack('C', 0x8F).'bar'; - $encoder = $this->_getHeaderEncoder('Q'); + $encoder = $this->getHeaderEncoder('Q'); $encoder->shouldReceive('encodeString') ->once() ->with($value, \Mockery::any(), \Mockery::any(), \Mockery::any()) ->andReturn('fo=8Fbar'); - $paramEncoder = $this->_getParameterEncoder(); + $paramEncoder = $this->getParameterEncoder(); $paramEncoder->shouldReceive('encodeString') ->once() ->with($value, \Mockery::any(), \Mockery::any(), \Mockery::any()) ->andReturn('fo%8Fbar'); - $header = $this->_getHeader('X-Foo', $encoder, $paramEncoder); + $header = $this->getHeader('X-Foo', $encoder, $paramEncoder); $header->setLanguage('en'); $header->setValue($value); - $header->setParameters(array('says' => $value)); + $header->setParameters(['says' => $value]); $this->assertEquals("X-Foo: =?utf-8*en?Q?fo=8Fbar?=; says*=utf-8'en'fo%8Fbar\r\n", $header->toString() ); @@ -334,8 +334,8 @@ public function testLanguageInformationAppearsInEncodedWords() public function testSetBodyModel() { - $header = $this->_getHeader('Content-Type', - $this->_getHeaderEncoder('Q', true), $this->_getParameterEncoder(true) + $header = $this->getHeader('Content-Type', + $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) ); $header->setFieldBodyModel('text/html'); $this->assertEquals('text/html', $header->getValue()); @@ -343,8 +343,8 @@ public function testSetBodyModel() public function testGetBodyModel() { - $header = $this->_getHeader('Content-Type', - $this->_getHeaderEncoder('Q', true), $this->_getParameterEncoder(true) + $header = $this->getHeader('Content-Type', + $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) ); $header->setValue('text/plain'); $this->assertEquals('text/plain', $header->getFieldBodyModel()); @@ -352,36 +352,34 @@ public function testGetBodyModel() public function testSetParameter() { - $header = $this->_getHeader('Content-Type', - $this->_getHeaderEncoder('Q', true), $this->_getParameterEncoder(true) + $header = $this->getHeader('Content-Type', + $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) ); - $header->setParameters(array('charset' => 'utf-8', 'delsp' => 'yes')); + $header->setParameters(['charset' => 'utf-8', 'delsp' => 'yes']); $header->setParameter('delsp', 'no'); - $this->assertEquals(array('charset' => 'utf-8', 'delsp' => 'no'), + $this->assertEquals(['charset' => 'utf-8', 'delsp' => 'no'], $header->getParameters() ); } public function testGetParameter() { - $header = $this->_getHeader('Content-Type', - $this->_getHeaderEncoder('Q', true), $this->_getParameterEncoder(true) + $header = $this->getHeader('Content-Type', + $this->getHeaderEncoder('Q', true), $this->getParameterEncoder(true) ); - $header->setParameters(array('charset' => 'utf-8', 'delsp' => 'yes')); + $header->setParameters(['charset' => 'utf-8', 'delsp' => 'yes']); $this->assertEquals('utf-8', $header->getParameter('charset')); } - private function _getHeader($name, $encoder, $paramEncoder) + private function getHeader($name, $encoder, $paramEncoder) { - $header = new Swift_Mime_Headers_ParameterizedHeader($name, $encoder, - $paramEncoder, new Swift_Mime_Grammar() - ); - $header->setCharset($this->_charset); + $header = new Swift_Mime_Headers_ParameterizedHeader($name, $encoder, $paramEncoder); + $header->setCharset($this->charset); return $header; } - private function _getHeaderEncoder($type, $stub = false) + private function getHeaderEncoder($type, $stub = false) { $encoder = $this->getMockery('Swift_Mime_HeaderEncoder')->shouldIgnoreMissing(); $encoder->shouldReceive('getName') @@ -391,7 +389,7 @@ private function _getHeaderEncoder($type, $stub = false) return $encoder; } - private function _getParameterEncoder($stub = false) + private function getParameterEncoder($stub = false) { return $this->getMockery('Swift_Encoder')->shouldIgnoreMissing(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/PathHeaderTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/PathHeaderTest.php index a9f35e9..045107e 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/PathHeaderTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/PathHeaderTest.php @@ -1,28 +1,29 @@ _getHeader('Return-Path'); + $header = $this->getHeader('Return-Path'); $this->assertEquals(Swift_Mime_Header::TYPE_PATH, $header->getFieldType()); } public function testSingleAddressCanBeSetAndFetched() { - $header = $this->_getHeader('Return-Path'); + $header = $this->getHeader('Return-Path'); $header->setAddress('chris@swiftmailer.org'); $this->assertEquals('chris@swiftmailer.org', $header->getAddress()); } + /** + * @expectedException \Exception + */ public function testAddressMustComplyWithRfc2822() { - try { - $header = $this->_getHeader('Return-Path'); - $header->setAddress('chr is@swiftmailer.org'); - $this->fail('Addresses not valid according to RFC 2822 addr-spec grammar must be rejected.'); - } catch (Exception $e) { - } + $header = $this->getHeader('Return-Path'); + $header->setAddress('chr is@swiftmailer.org'); } public function testValueIsAngleAddrWithValidAddress() @@ -35,43 +36,60 @@ public function testValueIsAngleAddrWithValidAddress() obs-path */ - $header = $this->_getHeader('Return-Path'); + $header = $this->getHeader('Return-Path'); $header->setAddress('chris@swiftmailer.org'); $this->assertEquals('', $header->getFieldBody()); } + public function testAddressIsIdnEncoded() + { + $header = $this->getHeader('Return-Path'); + $header->setAddress('chris@swïftmailer.org'); + $this->assertEquals('', $header->getFieldBody()); + } + + /** + * @expectedException \Swift_AddressEncoderException + */ + public function testAddressMustBeEncodable() + { + $header = $this->getHeader('Return-Path'); + $header->setAddress('chrïs@swiftmailer.org'); + $header->getFieldBody(); + } + public function testValueIsEmptyAngleBracketsIfEmptyAddressSet() { - $header = $this->_getHeader('Return-Path'); + $header = $this->getHeader('Return-Path'); $header->setAddress(''); $this->assertEquals('<>', $header->getFieldBody()); } public function testSetBodyModel() { - $header = $this->_getHeader('Return-Path'); + $header = $this->getHeader('Return-Path'); $header->setFieldBodyModel('foo@bar.tld'); $this->assertEquals('foo@bar.tld', $header->getAddress()); } public function testGetBodyModel() { - $header = $this->_getHeader('Return-Path'); + $header = $this->getHeader('Return-Path'); $header->setAddress('foo@bar.tld'); $this->assertEquals('foo@bar.tld', $header->getFieldBodyModel()); } public function testToString() { - $header = $this->_getHeader('Return-Path'); + $header = $this->getHeader('Return-Path'); $header->setAddress('chris@swiftmailer.org'); $this->assertEquals('Return-Path: '."\r\n", $header->toString() ); } - private function _getHeader($name) + private function getHeader($name) { - return new Swift_Mime_Headers_PathHeader($name, new Swift_Mime_Grammar()); + return new Swift_Mime_Headers_PathHeader($name, new EmailValidator(), new Swift_AddressEncoder_IdnAddressEncoder()); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/UnstructuredHeaderTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/UnstructuredHeaderTest.php index 2e1dc8c..30ccb00 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/UnstructuredHeaderTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/Headers/UnstructuredHeaderTest.php @@ -2,23 +2,23 @@ class Swift_Mime_Headers_UnstructuredHeaderTest extends \SwiftMailerTestCase { - private $_charset = 'utf-8'; + private $charset = 'utf-8'; public function testTypeIsTextHeader() { - $header = $this->_getHeader('Subject', $this->_getEncoder('Q', true)); + $header = $this->getHeader('Subject', $this->getEncoder('Q', true)); $this->assertEquals(Swift_Mime_Header::TYPE_TEXT, $header->getFieldType()); } public function testGetNameReturnsNameVerbatim() { - $header = $this->_getHeader('Subject', $this->_getEncoder('Q', true)); + $header = $this->getHeader('Subject', $this->getEncoder('Q', true)); $this->assertEquals('Subject', $header->getFieldName()); } public function testGetValueReturnsValueVerbatim() { - $header = $this->_getHeader('Subject', $this->_getEncoder('Q', true)); + $header = $this->getHeader('Subject', $this->getEncoder('Q', true)); $header->setValue('Test'); $this->assertEquals('Test', $header->getValue()); } @@ -29,7 +29,7 @@ public function testBasicStructureIsKeyValuePair() Header fields are lines composed of a field name, followed by a colon (":"), followed by a field body, and terminated by CRLF. */ - $header = $this->_getHeader('Subject', $this->_getEncoder('Q', true)); + $header = $this->getHeader('Subject', $this->getEncoder('Q', true)); $header->setValue('Test'); $this->assertEquals('Subject: Test'."\r\n", $header->toString()); } @@ -48,8 +48,8 @@ public function testLongHeadersAreFoldedAtWordBoundary() $value = 'The quick brown fox jumped over the fence, he was a very very '. 'scary brown fox with a bushy tail'; - $header = $this->_getHeader('X-Custom-Header', - $this->_getEncoder('Q', true) + $header = $this->getHeader('X-Custom-Header', + $this->getEncoder('Q', true) ); $header->setValue($value); $header->setMaxLineLength(78); //A safe [RFC 2822, 2.2.3] default @@ -75,7 +75,7 @@ public function testPrintableAsciiOnlyAppearsInHeaders() */ $nonAsciiChar = pack('C', 0x8F); - $header = $this->_getHeader('X-Test', $this->_getEncoder('Q', true)); + $header = $this->getHeader('X-Test', $this->getEncoder('Q', true)); $header->setValue($nonAsciiChar); $this->assertRegExp( '~^[^:\x00-\x20\x80-\xFF]+: [^\x80-\xFF\r\n]+\r\n$~s', @@ -92,7 +92,7 @@ public function testEncodedWordsFollowGeneralStructure() */ $nonAsciiChar = pack('C', 0x8F); - $header = $this->_getHeader('X-Test', $this->_getEncoder('Q', true)); + $header = $this->getHeader('X-Test', $this->getEncoder('Q', true)); $header->setValue($nonAsciiChar); $this->assertRegExp( '~^X-Test: \=?.*?\?.*?\?.*?\?=\r\n$~s', @@ -112,16 +112,16 @@ public function testEncodedWordIncludesCharsetAndEncodingMethodAndText() $nonAsciiChar = pack('C', 0x8F); - $encoder = $this->_getEncoder('Q'); + $encoder = $this->getEncoder('Q'); $encoder->shouldReceive('encodeString') ->once() ->with($nonAsciiChar, \Mockery::any(), \Mockery::any(), \Mockery::any()) ->andReturn('=8F'); - $header = $this->_getHeader('X-Test', $encoder); + $header = $this->getHeader('X-Test', $encoder); $header->setValue($nonAsciiChar); $this->assertEquals( - 'X-Test: =?'.$this->_charset.'?Q?=8F?='."\r\n", + 'X-Test: =?'.$this->charset.'?Q?=8F?='."\r\n", $header->toString() ); } @@ -130,24 +130,24 @@ public function testEncodedWordsAreUsedToEncodedNonPrintableAscii() { //SPACE and TAB permitted $nonPrintableBytes = array_merge( - range(0x00, 0x08), range(0x10, 0x19), array(0x7F) + range(0x00, 0x08), range(0x10, 0x19), [0x7F] ); foreach ($nonPrintableBytes as $byte) { $char = pack('C', $byte); $encodedChar = sprintf('=%02X', $byte); - $encoder = $this->_getEncoder('Q'); + $encoder = $this->getEncoder('Q'); $encoder->shouldReceive('encodeString') ->once() ->with($char, \Mockery::any(), \Mockery::any(), \Mockery::any()) ->andReturn($encodedChar); - $header = $this->_getHeader('X-A', $encoder); + $header = $this->getHeader('X-A', $encoder); $header->setValue($char); $this->assertEquals( - 'X-A: =?'.$this->_charset.'?Q?'.$encodedChar.'?='."\r\n", + 'X-A: =?'.$this->charset.'?Q?'.$encodedChar.'?='."\r\n", $header->toString(), '%s: Non-printable ascii should be encoded' ); } @@ -155,23 +155,21 @@ public function testEncodedWordsAreUsedToEncodedNonPrintableAscii() public function testEncodedWordsAreUsedToEncode8BitOctets() { - $_8BitBytes = range(0x80, 0xFF); - - foreach ($_8BitBytes as $byte) { + foreach (range(0x80, 0xFF) as $byte) { $char = pack('C', $byte); $encodedChar = sprintf('=%02X', $byte); - $encoder = $this->_getEncoder('Q'); + $encoder = $this->getEncoder('Q'); $encoder->shouldReceive('encodeString') ->once() ->with($char, \Mockery::any(), \Mockery::any(), \Mockery::any()) ->andReturn($encodedChar); - $header = $this->_getHeader('X-A', $encoder); + $header = $this->getHeader('X-A', $encoder); $header->setValue($char); $this->assertEquals( - 'X-A: =?'.$this->_charset.'?Q?'.$encodedChar.'?='."\r\n", + 'X-A: =?'.$this->charset.'?Q?'.$encodedChar.'?='."\r\n", $header->toString(), '%s: 8-bit octets should be encoded' ); } @@ -192,7 +190,7 @@ public function testEncodedWordsAreNoMoreThan75CharsPerLine() $nonAsciiChar = pack('C', 0x8F); - $encoder = $this->_getEncoder('Q'); + $encoder = $this->getEncoder('Q'); $encoder->shouldReceive('encodeString') ->once() ->with($nonAsciiChar, \Mockery::any(), \Mockery::any(), \Mockery::any()) @@ -201,11 +199,11 @@ public function testEncodedWordsAreNoMoreThan75CharsPerLine() //Note also that =?utf-8?q??= is 12 chars which makes 75 - 12 = 63 //* X-Test: is 8 chars - $header = $this->_getHeader('X-Test', $encoder); + $header = $this->getHeader('X-Test', $encoder); $header->setValue($nonAsciiChar); $this->assertEquals( - 'X-Test: =?'.$this->_charset.'?Q?=8F?='."\r\n", + 'X-Test: =?'.$this->charset.'?Q?=8F?='."\r\n", $header->toString() ); } @@ -222,7 +220,7 @@ public function testFWSPIsUsedWhenEncoderReturnsMultipleLines() // encoding for the sake of testing $nonAsciiChar = pack('C', 0x8F); - $encoder = $this->_getEncoder('Q'); + $encoder = $this->getEncoder('Q'); $encoder->shouldReceive('encodeString') ->once() ->with($nonAsciiChar, 8, 63, \Mockery::any()) @@ -232,12 +230,12 @@ public function testFWSPIsUsedWhenEncoderReturnsMultipleLines() //Note also that =?utf-8?q??= is 12 chars which makes 75 - 12 = 63 //* X-Test: is 8 chars - $header = $this->_getHeader('X-Test', $encoder); + $header = $this->getHeader('X-Test', $encoder); $header->setValue($nonAsciiChar); $this->assertEquals( - 'X-Test: =?'.$this->_charset.'?Q?line_one_here?='."\r\n". - ' =?'.$this->_charset.'?Q?line_two_here?='."\r\n", + 'X-Test: =?'.$this->charset.'?Q?line_one_here?='."\r\n". + ' =?'.$this->charset.'?Q?line_two_here?='."\r\n", $header->toString() ); } @@ -264,7 +262,7 @@ public function testAdjacentWordsAreEncodedTogether() $text = 'start '.$word.' '.$word.' then end '.$word; // 'start', ' word word', ' and end', ' word' - $encoder = $this->_getEncoder('Q'); + $encoder = $this->getEncoder('Q'); $encoder->shouldReceive('encodeString') ->once() ->with($word.' '.$word, \Mockery::any(), \Mockery::any(), \Mockery::any()) @@ -274,13 +272,13 @@ public function testAdjacentWordsAreEncodedTogether() ->with($word, \Mockery::any(), \Mockery::any(), \Mockery::any()) ->andReturn('w=8Frd'); - $header = $this->_getHeader('X-Test', $encoder); + $header = $this->getHeader('X-Test', $encoder); $header->setValue($text); $headerString = $header->toString(); - $this->assertEquals('X-Test: start =?'.$this->_charset.'?Q?'. - 'w=8Frd_w=8Frd?= then end =?'.$this->_charset.'?Q?'. + $this->assertEquals('X-Test: start =?'.$this->charset.'?Q?'. + 'w=8Frd_w=8Frd?= then end =?'.$this->charset.'?Q?'. 'w=8Frd?='."\r\n", $headerString, '%s: Adjacent encoded words should appear grouped with WSP encoded' ); @@ -307,13 +305,13 @@ public function testLanguageInformationAppearsInEncodedWords() $value = 'fo'.pack('C', 0x8F).'bar'; - $encoder = $this->_getEncoder('Q'); + $encoder = $this->getEncoder('Q'); $encoder->shouldReceive('encodeString') ->once() ->with($value, \Mockery::any(), \Mockery::any(), \Mockery::any()) ->andReturn('fo=8Fbar'); - $header = $this->_getHeader('Subject', $encoder); + $header = $this->getHeader('Subject', $encoder); $header->setLanguage('en'); $header->setValue($value); $this->assertEquals("Subject: =?utf-8*en?Q?fo=8Fbar?=\r\n", @@ -323,27 +321,27 @@ public function testLanguageInformationAppearsInEncodedWords() public function testSetBodyModel() { - $header = $this->_getHeader('Subject', $this->_getEncoder('Q', true)); + $header = $this->getHeader('Subject', $this->getEncoder('Q', true)); $header->setFieldBodyModel('test'); $this->assertEquals('test', $header->getValue()); } public function testGetBodyModel() { - $header = $this->_getHeader('Subject', $this->_getEncoder('Q', true)); + $header = $this->getHeader('Subject', $this->getEncoder('Q', true)); $header->setValue('test'); $this->assertEquals('test', $header->getFieldBodyModel()); } - private function _getHeader($name, $encoder) + private function getHeader($name, $encoder) { - $header = new Swift_Mime_Headers_UnstructuredHeader($name, $encoder, new Swift_Mime_Grammar()); - $header->setCharset($this->_charset); + $header = new Swift_Mime_Headers_UnstructuredHeader($name, $encoder); + $header->setCharset($this->charset); return $header; } - private function _getEncoder($type, $stub = false) + private function getEncoder($type, $stub = false) { $encoder = $this->getMockery('Swift_Mime_HeaderEncoder')->shouldIgnoreMissing(); $encoder->shouldReceive('getName') diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/IdGeneratorTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/IdGeneratorTest.php new file mode 100644 index 0000000..dfea580 --- /dev/null +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/IdGeneratorTest.php @@ -0,0 +1,32 @@ +assertEquals('example.net', $idGenerator->getIdRight()); + + $idGenerator->setIdRight('example.com'); + $this->assertEquals('example.com', $idGenerator->getIdRight()); + } + + public function testIdGenerateId() + { + $idGenerator = new Swift_Mime_IdGenerator('example.net'); + $emailValidator = new EmailValidator(); + + $id = $idGenerator->generateId(); + $this->assertTrue($emailValidator->isValid($id, new RFCValidation())); + $this->assertRegExp('/^.{32}@example.net$/', $id); + + $anotherId = $idGenerator->generateId(); + $this->assertNotEquals($id, $anotherId); + } +} diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/MimePartTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/MimePartTest.php index 738ac68..4575505 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/MimePartTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/MimePartTest.php @@ -1,14 +1,15 @@ _createMimePart($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $part = $this->createMimePart($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $this->assertEquals( - Swift_Mime_MimeEntity::LEVEL_ALTERNATIVE, $part->getNestingLevel() + Swift_Mime_SimpleMimeEntity::LEVEL_ALTERNATIVE, $part->getNestingLevel() ); } @@ -26,108 +27,108 @@ public function testCharsetIsReturnedFromHeader() must be assumed in the absence of a charset parameter, is US-ASCII. */ - $cType = $this->_createHeader('Content-Type', 'text/plain', - array('charset' => 'iso-8859-1') + $cType = $this->createHeader('Content-Type', 'text/plain', + ['charset' => 'iso-8859-1'] ); - $part = $this->_createMimePart($this->_createHeaderSet(array( - 'Content-Type' => $cType, )), - $this->_createEncoder(), $this->_createCache() + $part = $this->createMimePart($this->createHeaderSet([ + 'Content-Type' => $cType, ]), + $this->createEncoder(), $this->createCache() ); $this->assertEquals('iso-8859-1', $part->getCharset()); } public function testCharsetIsSetInHeader() { - $cType = $this->_createHeader('Content-Type', 'text/plain', - array('charset' => 'iso-8859-1'), false + $cType = $this->createHeader('Content-Type', 'text/plain', + ['charset' => 'iso-8859-1'], false ); $cType->shouldReceive('setParameter')->once()->with('charset', 'utf-8'); - $part = $this->_createMimePart($this->_createHeaderSet(array( - 'Content-Type' => $cType, )), - $this->_createEncoder(), $this->_createCache() + $part = $this->createMimePart($this->createHeaderSet([ + 'Content-Type' => $cType, ]), + $this->createEncoder(), $this->createCache() ); $part->setCharset('utf-8'); } public function testCharsetIsSetInHeaderIfPassedToSetBody() { - $cType = $this->_createHeader('Content-Type', 'text/plain', - array('charset' => 'iso-8859-1'), false + $cType = $this->createHeader('Content-Type', 'text/plain', + ['charset' => 'iso-8859-1'], false ); $cType->shouldReceive('setParameter')->once()->with('charset', 'utf-8'); - $part = $this->_createMimePart($this->_createHeaderSet(array( - 'Content-Type' => $cType, )), - $this->_createEncoder(), $this->_createCache() + $part = $this->createMimePart($this->createHeaderSet([ + 'Content-Type' => $cType, ]), + $this->createEncoder(), $this->createCache() ); $part->setBody('', 'text/plian', 'utf-8'); } public function testSettingCharsetNotifiesEncoder() { - $encoder = $this->_createEncoder('quoted-printable', false); + $encoder = $this->createEncoder('quoted-printable', false); $encoder->expects($this->once()) ->method('charsetChanged') ->with('utf-8'); - $part = $this->_createMimePart($this->_createHeaderSet(), - $encoder, $this->_createCache() + $part = $this->createMimePart($this->createHeaderSet(), + $encoder, $this->createCache() ); $part->setCharset('utf-8'); } public function testSettingCharsetNotifiesHeaders() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('charsetChanged') ->zeroOrMoreTimes() ->with('utf-8'); - $part = $this->_createMimePart($headers, $this->_createEncoder(), - $this->_createCache() + $part = $this->createMimePart($headers, $this->createEncoder(), + $this->createCache() ); $part->setCharset('utf-8'); } public function testSettingCharsetNotifiesChildren() { - $child = $this->_createChild(0, '', false); + $child = $this->createChild(0, '', false); $child->shouldReceive('charsetChanged') ->once() ->with('windows-874'); - $part = $this->_createMimePart($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $part = $this->createMimePart($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); - $part->setChildren(array($child)); + $part->setChildren([$child]); $part->setCharset('windows-874'); } public function testCharsetChangeUpdatesCharset() { - $cType = $this->_createHeader('Content-Type', 'text/plain', - array('charset' => 'iso-8859-1'), false + $cType = $this->createHeader('Content-Type', 'text/plain', + ['charset' => 'iso-8859-1'], false ); $cType->shouldReceive('setParameter')->once()->with('charset', 'utf-8'); - $part = $this->_createMimePart($this->_createHeaderSet(array( - 'Content-Type' => $cType, )), - $this->_createEncoder(), $this->_createCache() + $part = $this->createMimePart($this->createHeaderSet([ + 'Content-Type' => $cType, ]), + $this->createEncoder(), $this->createCache() ); $part->charsetChanged('utf-8'); } public function testSettingCharsetClearsCache() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('toString') ->zeroOrMoreTimes() ->andReturn("Content-Type: text/plain; charset=utf-8\r\n"); - $cache = $this->_createCache(false); + $cache = $this->createCache(false); - $entity = $this->_createEntity($headers, $this->_createEncoder(), + $entity = $this->createEntity($headers, $this->createEncoder(), $cache ); @@ -147,24 +148,24 @@ public function testFormatIsReturnedFromHeader() /* -- RFC 3676. */ - $cType = $this->_createHeader('Content-Type', 'text/plain', - array('format' => 'flowed') + $cType = $this->createHeader('Content-Type', 'text/plain', + ['format' => 'flowed'] ); - $part = $this->_createMimePart($this->_createHeaderSet(array( - 'Content-Type' => $cType, )), - $this->_createEncoder(), $this->_createCache() + $part = $this->createMimePart($this->createHeaderSet([ + 'Content-Type' => $cType, ]), + $this->createEncoder(), $this->createCache() ); $this->assertEquals('flowed', $part->getFormat()); } public function testFormatIsSetInHeader() { - $cType = $this->_createHeader('Content-Type', 'text/plain', array(), false); + $cType = $this->createHeader('Content-Type', 'text/plain', [], false); $cType->shouldReceive('setParameter')->once()->with('format', 'fixed'); - $part = $this->_createMimePart($this->_createHeaderSet(array( - 'Content-Type' => $cType, )), - $this->_createEncoder(), $this->_createCache() + $part = $this->createMimePart($this->createHeaderSet([ + 'Content-Type' => $cType, ]), + $this->createEncoder(), $this->createCache() ); $part->setFormat('fixed'); } @@ -174,44 +175,44 @@ public function testDelSpIsReturnedFromHeader() /* -- RFC 3676. */ - $cType = $this->_createHeader('Content-Type', 'text/plain', - array('delsp' => 'no') + $cType = $this->createHeader('Content-Type', 'text/plain', + ['delsp' => 'no'] ); - $part = $this->_createMimePart($this->_createHeaderSet(array( - 'Content-Type' => $cType, )), - $this->_createEncoder(), $this->_createCache() + $part = $this->createMimePart($this->createHeaderSet([ + 'Content-Type' => $cType, ]), + $this->createEncoder(), $this->createCache() ); $this->assertFalse($part->getDelSp()); } public function testDelSpIsSetInHeader() { - $cType = $this->_createHeader('Content-Type', 'text/plain', array(), false); + $cType = $this->createHeader('Content-Type', 'text/plain', [], false); $cType->shouldReceive('setParameter')->once()->with('delsp', 'yes'); - $part = $this->_createMimePart($this->_createHeaderSet(array( - 'Content-Type' => $cType, )), - $this->_createEncoder(), $this->_createCache() + $part = $this->createMimePart($this->createHeaderSet([ + 'Content-Type' => $cType, ]), + $this->createEncoder(), $this->createCache() ); $part->setDelSp(true); } public function testFluidInterface() { - $part = $this->_createMimePart($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $part = $this->createMimePart($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $this->assertSame($part, $part ->setContentType('text/plain') - ->setEncoder($this->_createEncoder()) + ->setEncoder($this->createEncoder()) ->setId('foo@bar') ->setDescription('my description') ->setMaxLineLength(998) ->setBody('xx') ->setBoundary('xyz') - ->setChildren(array()) + ->setChildren([]) ->setCharset('utf-8') ->setFormat('flowed') ->setDelSp(true) @@ -219,13 +220,15 @@ public function testFluidInterface() } //abstract - protected function _createEntity($headers, $encoder, $cache) + protected function createEntity($headers, $encoder, $cache) { - return $this->_createMimePart($headers, $encoder, $cache); + return $this->createMimePart($headers, $encoder, $cache); } - protected function _createMimePart($headers, $encoder, $cache) + protected function createMimePart($headers, $encoder, $cache) { - return new Swift_Mime_MimePart($headers, $encoder, $cache, new Swift_Mime_Grammar()); + $idGenerator = new Swift_Mime_IdGenerator('example.com'); + + return new Swift_Mime_MimePart($headers, $encoder, $cache, $idGenerator); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderFactoryTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderFactoryTest.php index 6a87abf..6bc825e 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderFactoryTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderFactoryTest.php @@ -1,165 +1,168 @@ _factory = $this->_createFactory(); + $this->factory = $this->createFactory(); } public function testMailboxHeaderIsCorrectType() { - $header = $this->_factory->createMailboxHeader('X-Foo'); + $header = $this->factory->createMailboxHeader('X-Foo'); $this->assertInstanceOf('Swift_Mime_Headers_MailboxHeader', $header); } public function testMailboxHeaderHasCorrectName() { - $header = $this->_factory->createMailboxHeader('X-Foo'); + $header = $this->factory->createMailboxHeader('X-Foo'); $this->assertEquals('X-Foo', $header->getFieldName()); } public function testMailboxHeaderHasCorrectModel() { - $header = $this->_factory->createMailboxHeader('X-Foo', - array('foo@bar' => 'FooBar') + $header = $this->factory->createMailboxHeader('X-Foo', + ['foo@bar' => 'FooBar'] ); - $this->assertEquals(array('foo@bar' => 'FooBar'), $header->getFieldBodyModel()); + $this->assertEquals(['foo@bar' => 'FooBar'], $header->getFieldBodyModel()); } public function testDateHeaderHasCorrectType() { - $header = $this->_factory->createDateHeader('X-Date'); + $header = $this->factory->createDateHeader('X-Date'); $this->assertInstanceOf('Swift_Mime_Headers_DateHeader', $header); } public function testDateHeaderHasCorrectName() { - $header = $this->_factory->createDateHeader('X-Date'); + $header = $this->factory->createDateHeader('X-Date'); $this->assertEquals('X-Date', $header->getFieldName()); } public function testDateHeaderHasCorrectModel() { - $header = $this->_factory->createDateHeader('X-Date', 123); - $this->assertEquals(123, $header->getFieldBodyModel()); + $dateTime = new \DateTimeImmutable(); + $header = $this->factory->createDateHeader('X-Date', $dateTime); + $this->assertEquals($dateTime, $header->getFieldBodyModel()); } public function testTextHeaderHasCorrectType() { - $header = $this->_factory->createTextHeader('X-Foo'); + $header = $this->factory->createTextHeader('X-Foo'); $this->assertInstanceOf('Swift_Mime_Headers_UnstructuredHeader', $header); } public function testTextHeaderHasCorrectName() { - $header = $this->_factory->createTextHeader('X-Foo'); + $header = $this->factory->createTextHeader('X-Foo'); $this->assertEquals('X-Foo', $header->getFieldName()); } public function testTextHeaderHasCorrectModel() { - $header = $this->_factory->createTextHeader('X-Foo', 'bar'); + $header = $this->factory->createTextHeader('X-Foo', 'bar'); $this->assertEquals('bar', $header->getFieldBodyModel()); } public function testParameterizedHeaderHasCorrectType() { - $header = $this->_factory->createParameterizedHeader('X-Foo'); + $header = $this->factory->createParameterizedHeader('X-Foo'); $this->assertInstanceOf('Swift_Mime_Headers_ParameterizedHeader', $header); } public function testParameterizedHeaderHasCorrectName() { - $header = $this->_factory->createParameterizedHeader('X-Foo'); + $header = $this->factory->createParameterizedHeader('X-Foo'); $this->assertEquals('X-Foo', $header->getFieldName()); } public function testParameterizedHeaderHasCorrectModel() { - $header = $this->_factory->createParameterizedHeader('X-Foo', 'bar'); + $header = $this->factory->createParameterizedHeader('X-Foo', 'bar'); $this->assertEquals('bar', $header->getFieldBodyModel()); } public function testParameterizedHeaderHasCorrectParams() { - $header = $this->_factory->createParameterizedHeader('X-Foo', 'bar', - array('zip' => 'button') + $header = $this->factory->createParameterizedHeader('X-Foo', 'bar', + ['zip' => 'button'] ); - $this->assertEquals(array('zip' => 'button'), $header->getParameters()); + $this->assertEquals(['zip' => 'button'], $header->getParameters()); } public function testIdHeaderHasCorrectType() { - $header = $this->_factory->createIdHeader('X-ID'); + $header = $this->factory->createIdHeader('X-ID'); $this->assertInstanceOf('Swift_Mime_Headers_IdentificationHeader', $header); } public function testIdHeaderHasCorrectName() { - $header = $this->_factory->createIdHeader('X-ID'); + $header = $this->factory->createIdHeader('X-ID'); $this->assertEquals('X-ID', $header->getFieldName()); } public function testIdHeaderHasCorrectModel() { - $header = $this->_factory->createIdHeader('X-ID', 'xyz@abc'); - $this->assertEquals(array('xyz@abc'), $header->getFieldBodyModel()); + $header = $this->factory->createIdHeader('X-ID', 'xyz@abc'); + $this->assertEquals(['xyz@abc'], $header->getFieldBodyModel()); } public function testPathHeaderHasCorrectType() { - $header = $this->_factory->createPathHeader('X-Path'); + $header = $this->factory->createPathHeader('X-Path'); $this->assertInstanceOf('Swift_Mime_Headers_PathHeader', $header); } public function testPathHeaderHasCorrectName() { - $header = $this->_factory->createPathHeader('X-Path'); + $header = $this->factory->createPathHeader('X-Path'); $this->assertEquals('X-Path', $header->getFieldName()); } public function testPathHeaderHasCorrectModel() { - $header = $this->_factory->createPathHeader('X-Path', 'foo@bar'); + $header = $this->factory->createPathHeader('X-Path', 'foo@bar'); $this->assertEquals('foo@bar', $header->getFieldBodyModel()); } public function testCharsetChangeNotificationNotifiesEncoders() { - $encoder = $this->_createHeaderEncoder(); + $encoder = $this->createHeaderEncoder(); $encoder->expects($this->once()) ->method('charsetChanged') ->with('utf-8'); - $paramEncoder = $this->_createParamEncoder(); + $paramEncoder = $this->createParamEncoder(); $paramEncoder->expects($this->once()) ->method('charsetChanged') ->with('utf-8'); - $factory = $this->_createFactory($encoder, $paramEncoder); + $factory = $this->createFactory($encoder, $paramEncoder); $factory->charsetChanged('utf-8'); } - private function _createFactory($encoder = null, $paramEncoder = null) + private function createFactory($encoder = null, $paramEncoder = null) { return new Swift_Mime_SimpleHeaderFactory( $encoder - ? $encoder : $this->_createHeaderEncoder(), + ? $encoder : $this->createHeaderEncoder(), $paramEncoder - ? $paramEncoder : $this->_createParamEncoder(), - new Swift_Mime_Grammar() + ? $paramEncoder : $this->createParamEncoder(), + new EmailValidator() ); } - private function _createHeaderEncoder() + private function createHeaderEncoder() { return $this->getMockBuilder('Swift_Mime_HeaderEncoder')->getMock(); } - private function _createParamEncoder() + private function createParamEncoder() { return $this->getMockBuilder('Swift_Encoder')->getMock(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderSetTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderSetTest.php index bed1c13..4ddbff7 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderSetTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleHeaderSetTest.php @@ -1,215 +1,219 @@ _createFactory(); + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('createMailboxHeader') - ->with('From', array('person@domain' => 'Person')) - ->will($this->returnValue($this->_createHeader('From'))); + ->with('From', ['person@domain' => 'Person']) + ->will($this->returnValue($this->createHeader('From'))); - $set = $this->_createSet($factory); - $set->addMailboxHeader('From', array('person@domain' => 'Person')); + $set = $this->createSet($factory); + $set->addMailboxHeader('From', ['person@domain' => 'Person']); } public function testAddDateHeaderDelegatesToFactory() { - $factory = $this->_createFactory(); + $dateTime = new DateTimeImmutable(); + + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('createDateHeader') - ->with('Date', 1234) - ->will($this->returnValue($this->_createHeader('Date'))); + ->with('Date', $dateTime) + ->will($this->returnValue($this->createHeader('Date'))); - $set = $this->_createSet($factory); - $set->addDateHeader('Date', 1234); + $set = $this->createSet($factory); + $set->addDateHeader('Date', $dateTime); } public function testAddTextHeaderDelegatesToFactory() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('createTextHeader') ->with('Subject', 'some text') - ->will($this->returnValue($this->_createHeader('Subject'))); + ->will($this->returnValue($this->createHeader('Subject'))); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addTextHeader('Subject', 'some text'); } public function testAddParameterizedHeaderDelegatesToFactory() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('createParameterizedHeader') - ->with('Content-Type', 'text/plain', array('charset' => 'utf-8')) - ->will($this->returnValue($this->_createHeader('Content-Type'))); + ->with('Content-Type', 'text/plain', ['charset' => 'utf-8']) + ->will($this->returnValue($this->createHeader('Content-Type'))); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addParameterizedHeader('Content-Type', 'text/plain', - array('charset' => 'utf-8') + ['charset' => 'utf-8'] ); } public function testAddIdHeaderDelegatesToFactory() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('createIdHeader') ->with('Message-ID', 'some@id') - ->will($this->returnValue($this->_createHeader('Message-ID'))); + ->will($this->returnValue($this->createHeader('Message-ID'))); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); } public function testAddPathHeaderDelegatesToFactory() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('createPathHeader') ->with('Return-Path', 'some@path') - ->will($this->returnValue($this->_createHeader('Return-Path'))); + ->will($this->returnValue($this->createHeader('Return-Path'))); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addPathHeader('Return-Path', 'some@path'); } public function testHasReturnsFalseWhenNoHeaders() { - $set = $this->_createSet($this->_createFactory()); + $set = $this->createSet($this->createFactory()); $this->assertFalse($set->has('Some-Header')); } public function testAddedMailboxHeaderIsSeenByHas() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('createMailboxHeader') - ->with('From', array('person@domain' => 'Person')) - ->will($this->returnValue($this->_createHeader('From'))); + ->with('From', ['person@domain' => 'Person']) + ->will($this->returnValue($this->createHeader('From'))); - $set = $this->_createSet($factory); - $set->addMailboxHeader('From', array('person@domain' => 'Person')); + $set = $this->createSet($factory); + $set->addMailboxHeader('From', ['person@domain' => 'Person']); $this->assertTrue($set->has('From')); } public function testAddedDateHeaderIsSeenByHas() { - $factory = $this->_createFactory(); + $dateTime = new DateTimeImmutable(); + + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('createDateHeader') - ->with('Date', 1234) - ->will($this->returnValue($this->_createHeader('Date'))); + ->with('Date', $dateTime) + ->will($this->returnValue($this->createHeader('Date'))); - $set = $this->_createSet($factory); - $set->addDateHeader('Date', 1234); + $set = $this->createSet($factory); + $set->addDateHeader('Date', $dateTime); $this->assertTrue($set->has('Date')); } public function testAddedTextHeaderIsSeenByHas() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('createTextHeader') ->with('Subject', 'some text') - ->will($this->returnValue($this->_createHeader('Subject'))); + ->will($this->returnValue($this->createHeader('Subject'))); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addTextHeader('Subject', 'some text'); $this->assertTrue($set->has('Subject')); } public function testAddedParameterizedHeaderIsSeenByHas() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('createParameterizedHeader') - ->with('Content-Type', 'text/plain', array('charset' => 'utf-8')) - ->will($this->returnValue($this->_createHeader('Content-Type'))); + ->with('Content-Type', 'text/plain', ['charset' => 'utf-8']) + ->will($this->returnValue($this->createHeader('Content-Type'))); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addParameterizedHeader('Content-Type', 'text/plain', - array('charset' => 'utf-8') + ['charset' => 'utf-8'] ); $this->assertTrue($set->has('Content-Type')); } public function testAddedIdHeaderIsSeenByHas() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('createIdHeader') ->with('Message-ID', 'some@id') - ->will($this->returnValue($this->_createHeader('Message-ID'))); + ->will($this->returnValue($this->createHeader('Message-ID'))); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $this->assertTrue($set->has('Message-ID')); } public function testAddedPathHeaderIsSeenByHas() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('createPathHeader') ->with('Return-Path', 'some@path') - ->will($this->returnValue($this->_createHeader('Return-Path'))); + ->will($this->returnValue($this->createHeader('Return-Path'))); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addPathHeader('Return-Path', 'some@path'); $this->assertTrue($set->has('Return-Path')); } public function testNewlySetHeaderIsSeenByHas() { - $factory = $this->_createFactory(); - $header = $this->_createHeader('X-Foo', 'bar'); - $set = $this->_createSet($factory); + $factory = $this->createFactory(); + $header = $this->createHeader('X-Foo', 'bar'); + $set = $this->createSet($factory); $set->set($header); $this->assertTrue($set->has('X-Foo')); } public function testHasCanAcceptOffset() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('createIdHeader') ->with('Message-ID', 'some@id') - ->will($this->returnValue($this->_createHeader('Message-ID'))); + ->will($this->returnValue($this->createHeader('Message-ID'))); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $this->assertTrue($set->has('Message-ID', 0)); } public function testHasWithIllegalOffsetReturnsFalse() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('createIdHeader') ->with('Message-ID', 'some@id') - ->will($this->returnValue($this->_createHeader('Message-ID'))); + ->will($this->returnValue($this->createHeader('Message-ID'))); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $this->assertFalse($set->has('Message-ID', 1)); } public function testHasCanDistinguishMultipleHeaders() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createIdHeader') ->with('Message-ID', 'some@id') - ->will($this->returnValue($this->_createHeader('Message-ID'))); + ->will($this->returnValue($this->createHeader('Message-ID'))); $factory->expects($this->at(1)) ->method('createIdHeader') ->with('Message-ID', 'other@id') - ->will($this->returnValue($this->_createHeader('Message-ID'))); + ->will($this->returnValue($this->createHeader('Message-ID'))); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $set->addIdHeader('Message-ID', 'other@id'); $this->assertTrue($set->has('Message-ID', 1)); @@ -217,24 +221,24 @@ public function testHasCanDistinguishMultipleHeaders() public function testGetWithUnspecifiedOffset() { - $header = $this->_createHeader('Message-ID'); - $factory = $this->_createFactory(); + $header = $this->createHeader('Message-ID'); + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('createIdHeader') ->with('Message-ID', 'some@id') ->will($this->returnValue($header)); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $this->assertSame($header, $set->get('Message-ID')); } public function testGetWithSpeiciedOffset() { - $header0 = $this->_createHeader('Message-ID'); - $header1 = $this->_createHeader('Message-ID'); - $header2 = $this->_createHeader('Message-ID'); - $factory = $this->_createFactory(); + $header0 = $this->createHeader('Message-ID'); + $header1 = $this->createHeader('Message-ID'); + $header2 = $this->createHeader('Message-ID'); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createIdHeader') ->with('Message-ID', 'some@id') @@ -248,7 +252,7 @@ public function testGetWithSpeiciedOffset() ->with('Message-ID', 'more@id') ->will($this->returnValue($header2)); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $set->addIdHeader('Message-ID', 'other@id'); $set->addIdHeader('Message-ID', 'more@id'); @@ -257,16 +261,16 @@ public function testGetWithSpeiciedOffset() public function testGetReturnsNullIfHeaderNotSet() { - $set = $this->_createSet($this->_createFactory()); + $set = $this->createSet($this->createFactory()); $this->assertNull($set->get('Message-ID', 99)); } public function testGetAllReturnsAllHeadersMatchingName() { - $header0 = $this->_createHeader('Message-ID'); - $header1 = $this->_createHeader('Message-ID'); - $header2 = $this->_createHeader('Message-ID'); - $factory = $this->_createFactory(); + $header0 = $this->createHeader('Message-ID'); + $header1 = $this->createHeader('Message-ID'); + $header2 = $this->createHeader('Message-ID'); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createIdHeader') ->with('Message-ID', 'some@id') @@ -280,22 +284,22 @@ public function testGetAllReturnsAllHeadersMatchingName() ->with('Message-ID', 'more@id') ->will($this->returnValue($header2)); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $set->addIdHeader('Message-ID', 'other@id'); $set->addIdHeader('Message-ID', 'more@id'); - $this->assertEquals(array($header0, $header1, $header2), + $this->assertEquals([$header0, $header1, $header2], $set->getAll('Message-ID') ); } public function testGetAllReturnsAllHeadersIfNoArguments() { - $header0 = $this->_createHeader('Message-ID'); - $header1 = $this->_createHeader('Subject'); - $header2 = $this->_createHeader('To'); - $factory = $this->_createFactory(); + $header0 = $this->createHeader('Message-ID'); + $header1 = $this->createHeader('Subject'); + $header2 = $this->createHeader('To'); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createIdHeader') ->with('Message-ID', 'some@id') @@ -309,32 +313,32 @@ public function testGetAllReturnsAllHeadersIfNoArguments() ->with('To', 'person@example.org') ->will($this->returnValue($header2)); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $set->addIdHeader('Subject', 'thing'); $set->addIdHeader('To', 'person@example.org'); - $this->assertEquals(array($header0, $header1, $header2), + $this->assertEquals([$header0, $header1, $header2], $set->getAll() ); } public function testGetAllReturnsEmptyArrayIfNoneSet() { - $set = $this->_createSet($this->_createFactory()); - $this->assertEquals(array(), $set->getAll('Received')); + $set = $this->createSet($this->createFactory()); + $this->assertEquals([], $set->getAll('Received')); } public function testRemoveWithUnspecifiedOffset() { - $header = $this->_createHeader('Message-ID'); - $factory = $this->_createFactory(); + $header = $this->createHeader('Message-ID'); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createIdHeader') ->with('Message-ID', 'some@id') ->will($this->returnValue($header)); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $set->remove('Message-ID'); $this->assertFalse($set->has('Message-ID')); @@ -342,9 +346,9 @@ public function testRemoveWithUnspecifiedOffset() public function testRemoveWithSpecifiedIndexRemovesHeader() { - $header0 = $this->_createHeader('Message-ID'); - $header1 = $this->_createHeader('Message-ID'); - $factory = $this->_createFactory(); + $header0 = $this->createHeader('Message-ID'); + $header1 = $this->createHeader('Message-ID'); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createIdHeader') ->with('Message-ID', 'some@id') @@ -354,7 +358,7 @@ public function testRemoveWithSpecifiedIndexRemovesHeader() ->with('Message-ID', 'other@id') ->will($this->returnValue($header1)); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $set->addIdHeader('Message-ID', 'other@id'); $set->remove('Message-ID', 0); @@ -368,9 +372,9 @@ public function testRemoveWithSpecifiedIndexRemovesHeader() public function testRemoveWithSpecifiedIndexLeavesOtherHeaders() { - $header0 = $this->_createHeader('Message-ID'); - $header1 = $this->_createHeader('Message-ID'); - $factory = $this->_createFactory(); + $header0 = $this->createHeader('Message-ID'); + $header1 = $this->createHeader('Message-ID'); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createIdHeader') ->with('Message-ID', 'some@id') @@ -380,7 +384,7 @@ public function testRemoveWithSpecifiedIndexLeavesOtherHeaders() ->with('Message-ID', 'other@id') ->will($this->returnValue($header1)); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $set->addIdHeader('Message-ID', 'other@id'); $set->remove('Message-ID', 1); @@ -389,14 +393,14 @@ public function testRemoveWithSpecifiedIndexLeavesOtherHeaders() public function testRemoveWithInvalidOffsetDoesNothing() { - $header = $this->_createHeader('Message-ID'); - $factory = $this->_createFactory(); + $header = $this->createHeader('Message-ID'); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createIdHeader') ->with('Message-ID', 'some@id') ->will($this->returnValue($header)); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $set->remove('Message-ID', 50); $this->assertTrue($set->has('Message-ID')); @@ -404,9 +408,9 @@ public function testRemoveWithInvalidOffsetDoesNothing() public function testRemoveAllRemovesAllHeadersWithName() { - $header0 = $this->_createHeader('Message-ID'); - $header1 = $this->_createHeader('Message-ID'); - $factory = $this->_createFactory(); + $header0 = $this->createHeader('Message-ID'); + $header1 = $this->createHeader('Message-ID'); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createIdHeader') ->with('Message-ID', 'some@id') @@ -416,7 +420,7 @@ public function testRemoveAllRemovesAllHeadersWithName() ->with('Message-ID', 'other@id') ->will($this->returnValue($header1)); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $set->addIdHeader('Message-ID', 'other@id'); $set->removeAll('Message-ID'); @@ -426,56 +430,56 @@ public function testRemoveAllRemovesAllHeadersWithName() public function testHasIsNotCaseSensitive() { - $header = $this->_createHeader('Message-ID'); - $factory = $this->_createFactory(); + $header = $this->createHeader('Message-ID'); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createIdHeader') ->with('Message-ID', 'some@id') ->will($this->returnValue($header)); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $this->assertTrue($set->has('message-id')); } public function testGetIsNotCaseSensitive() { - $header = $this->_createHeader('Message-ID'); - $factory = $this->_createFactory(); + $header = $this->createHeader('Message-ID'); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createIdHeader') ->with('Message-ID', 'some@id') ->will($this->returnValue($header)); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $this->assertSame($header, $set->get('message-id')); } public function testGetAllIsNotCaseSensitive() { - $header = $this->_createHeader('Message-ID'); - $factory = $this->_createFactory(); + $header = $this->createHeader('Message-ID'); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createIdHeader') ->with('Message-ID', 'some@id') ->will($this->returnValue($header)); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); - $this->assertEquals(array($header), $set->getAll('message-id')); + $this->assertEquals([$header], $set->getAll('message-id')); } public function testRemoveIsNotCaseSensitive() { - $header = $this->_createHeader('Message-ID'); - $factory = $this->_createFactory(); + $header = $this->createHeader('Message-ID'); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createIdHeader') ->with('Message-ID', 'some@id') ->will($this->returnValue($header)); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $set->remove('message-id'); $this->assertFalse($set->has('Message-ID')); @@ -483,39 +487,32 @@ public function testRemoveIsNotCaseSensitive() public function testRemoveAllIsNotCaseSensitive() { - $header = $this->_createHeader('Message-ID'); - $factory = $this->_createFactory(); + $header = $this->createHeader('Message-ID'); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createIdHeader') ->with('Message-ID', 'some@id') ->will($this->returnValue($header)); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addIdHeader('Message-ID', 'some@id'); $set->removeAll('message-id'); $this->assertFalse($set->has('Message-ID')); } - public function testNewInstance() - { - $set = $this->_createSet($this->_createFactory()); - $instance = $set->newInstance(); - $this->assertInstanceOf('Swift_Mime_HeaderSet', $instance); - } - public function testToStringJoinsHeadersTogether() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createTextHeader') ->with('Foo', 'bar') - ->will($this->returnValue($this->_createHeader('Foo', 'bar'))); + ->will($this->returnValue($this->createHeader('Foo', 'bar'))); $factory->expects($this->at(1)) ->method('createTextHeader') ->with('Zip', 'buttons') - ->will($this->returnValue($this->_createHeader('Zip', 'buttons'))); + ->will($this->returnValue($this->createHeader('Zip', 'buttons'))); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addTextHeader('Foo', 'bar'); $set->addTextHeader('Zip', 'buttons'); $this->assertEquals( @@ -527,17 +524,17 @@ public function testToStringJoinsHeadersTogether() public function testHeadersWithoutBodiesAreNotDisplayed() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createTextHeader') ->with('Foo', 'bar') - ->will($this->returnValue($this->_createHeader('Foo', 'bar'))); + ->will($this->returnValue($this->createHeader('Foo', 'bar'))); $factory->expects($this->at(1)) ->method('createTextHeader') ->with('Zip', '') - ->will($this->returnValue($this->_createHeader('Zip', ''))); + ->will($this->returnValue($this->createHeader('Zip', ''))); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addTextHeader('Foo', 'bar'); $set->addTextHeader('Zip', ''); $this->assertEquals( @@ -548,20 +545,20 @@ public function testHeadersWithoutBodiesAreNotDisplayed() public function testHeadersWithoutBodiesCanBeForcedToDisplay() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createTextHeader') ->with('Foo', '') - ->will($this->returnValue($this->_createHeader('Foo', ''))); + ->will($this->returnValue($this->createHeader('Foo', ''))); $factory->expects($this->at(1)) ->method('createTextHeader') ->with('Zip', '') - ->will($this->returnValue($this->_createHeader('Zip', ''))); + ->will($this->returnValue($this->createHeader('Zip', ''))); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addTextHeader('Foo', ''); $set->addTextHeader('Zip', ''); - $set->setAlwaysDisplayed(array('Foo', 'Zip')); + $set->setAlwaysDisplayed(['Foo', 'Zip']); $this->assertEquals( "Foo: \r\n". "Zip: \r\n", @@ -571,26 +568,26 @@ public function testHeadersWithoutBodiesCanBeForcedToDisplay() public function testHeaderSequencesCanBeSpecified() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createTextHeader') ->with('Third', 'three') - ->will($this->returnValue($this->_createHeader('Third', 'three'))); + ->will($this->returnValue($this->createHeader('Third', 'three'))); $factory->expects($this->at(1)) ->method('createTextHeader') ->with('First', 'one') - ->will($this->returnValue($this->_createHeader('First', 'one'))); + ->will($this->returnValue($this->createHeader('First', 'one'))); $factory->expects($this->at(2)) ->method('createTextHeader') ->with('Second', 'two') - ->will($this->returnValue($this->_createHeader('Second', 'two'))); + ->will($this->returnValue($this->createHeader('Second', 'two'))); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addTextHeader('Third', 'three'); $set->addTextHeader('First', 'one'); $set->addTextHeader('Second', 'two'); - $set->defineOrdering(array('First', 'Second', 'Third')); + $set->defineOrdering(['First', 'Second', 'Third']); $this->assertEquals( "First: one\r\n". @@ -602,36 +599,36 @@ public function testHeaderSequencesCanBeSpecified() public function testUnsortedHeadersAppearAtEnd() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createTextHeader') ->with('Fourth', 'four') - ->will($this->returnValue($this->_createHeader('Fourth', 'four'))); + ->will($this->returnValue($this->createHeader('Fourth', 'four'))); $factory->expects($this->at(1)) ->method('createTextHeader') ->with('Fifth', 'five') - ->will($this->returnValue($this->_createHeader('Fifth', 'five'))); + ->will($this->returnValue($this->createHeader('Fifth', 'five'))); $factory->expects($this->at(2)) ->method('createTextHeader') ->with('Third', 'three') - ->will($this->returnValue($this->_createHeader('Third', 'three'))); + ->will($this->returnValue($this->createHeader('Third', 'three'))); $factory->expects($this->at(3)) ->method('createTextHeader') ->with('First', 'one') - ->will($this->returnValue($this->_createHeader('First', 'one'))); + ->will($this->returnValue($this->createHeader('First', 'one'))); $factory->expects($this->at(4)) ->method('createTextHeader') ->with('Second', 'two') - ->will($this->returnValue($this->_createHeader('Second', 'two'))); + ->will($this->returnValue($this->createHeader('Second', 'two'))); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addTextHeader('Fourth', 'four'); $set->addTextHeader('Fifth', 'five'); $set->addTextHeader('Third', 'three'); $set->addTextHeader('First', 'one'); $set->addTextHeader('Second', 'two'); - $set->defineOrdering(array('First', 'Second', 'Third')); + $set->defineOrdering(['First', 'Second', 'Third']); $this->assertEquals( "First: one\r\n". @@ -645,9 +642,9 @@ public function testUnsortedHeadersAppearAtEnd() public function testSettingCharsetNotifiesAlreadyExistingHeaders() { - $subject = $this->_createHeader('Subject', 'some text'); - $xHeader = $this->_createHeader('X-Header', 'some text'); - $factory = $this->_createFactory(); + $subject = $this->createHeader('Subject', 'some text'); + $xHeader = $this->createHeader('X-Header', 'some text'); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createTextHeader') ->with('Subject', 'some text') @@ -663,7 +660,7 @@ public function testSettingCharsetNotifiesAlreadyExistingHeaders() ->method('setCharset') ->with('utf-8'); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addTextHeader('Subject', 'some text'); $set->addTextHeader('X-Header', 'some text'); @@ -672,9 +669,9 @@ public function testSettingCharsetNotifiesAlreadyExistingHeaders() public function testCharsetChangeNotifiesAlreadyExistingHeaders() { - $subject = $this->_createHeader('Subject', 'some text'); - $xHeader = $this->_createHeader('X-Header', 'some text'); - $factory = $this->_createFactory(); + $subject = $this->createHeader('Subject', 'some text'); + $xHeader = $this->createHeader('X-Header', 'some text'); + $factory = $this->createFactory(); $factory->expects($this->at(0)) ->method('createTextHeader') ->with('Subject', 'some text') @@ -690,7 +687,7 @@ public function testCharsetChangeNotifiesAlreadyExistingHeaders() ->method('setCharset') ->with('utf-8'); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->addTextHeader('Subject', 'some text'); $set->addTextHeader('X-Header', 'some text'); @@ -699,27 +696,27 @@ public function testCharsetChangeNotifiesAlreadyExistingHeaders() public function testCharsetChangeNotifiesFactory() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('charsetChanged') ->with('utf-8'); - $set = $this->_createSet($factory); + $set = $this->createSet($factory); $set->setCharset('utf-8'); } - private function _createSet($factory) + private function createSet($factory) { return new Swift_Mime_SimpleHeaderSet($factory); } - private function _createFactory() + private function createFactory() { - return $this->getMockBuilder('Swift_Mime_HeaderFactory')->getMock(); + return $this->getMockBuilder('Swift_Mime_SimpleHeaderFactory')->disableOriginalConstructor()->getMock(); } - private function _createHeader($name, $body = '') + private function createHeader($name, $body = '') { $header = $this->getMockBuilder('Swift_Mime_Header')->getMock(); $header->expects($this->any()) diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMessageTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMessageTest.php index e5d225c..c5662cb 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMessageTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMessageTest.php @@ -1,72 +1,80 @@ addToAssertionCount(1); } public function testNestingLevelIsTop() { - $message = $this->_createMessage($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $this->assertEquals( - Swift_Mime_MimeEntity::LEVEL_TOP, $message->getNestingLevel() + Swift_Mime_SimpleMimeEntity::LEVEL_TOP, $message->getNestingLevel() ); } public function testDateIsReturnedFromHeader() { - $date = $this->_createHeader('Date', 123); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Date' => $date)), - $this->_createEncoder(), $this->_createCache() + $dateTime = new DateTimeImmutable(); + + $date = $this->createHeader('Date', $dateTime); + $message = $this->createMessage( + $this->createHeaderSet(['Date' => $date]), + $this->createEncoder(), $this->createCache() ); - $this->assertEquals(123, $message->getDate()); + $this->assertEquals($dateTime, $message->getDate()); } public function testDateIsSetInHeader() { - $date = $this->_createHeader('Date', 123, array(), false); + $dateTime = new DateTimeImmutable(); + + $date = $this->createHeader('Date', new DateTimeImmutable(), [], false); $date->shouldReceive('setFieldBodyModel') ->once() - ->with(1234); + ->with($dateTime); $date->shouldReceive('setFieldBodyModel') ->zeroOrMoreTimes(); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Date' => $date)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['Date' => $date]), + $this->createEncoder(), $this->createCache() ); - $message->setDate(1234); + $message->setDate($dateTime); } public function testDateHeaderIsCreatedIfNonePresent() { - $headers = $this->_createHeaderSet(array(), false); + $dateTime = new DateTimeImmutable(); + + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addDateHeader') ->once() - ->with('Date', 1234); + ->with('Date', $dateTime); $headers->shouldReceive('addDateHeader') ->zeroOrMoreTimes(); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); - $message->setDate(1234); + $message->setDate($dateTime); } public function testDateHeaderIsAddedDuringConstruction() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addDateHeader') ->once() - ->with('Date', '/^[0-9]+$/D'); + ->with('Date', Mockery::type('DateTimeImmutable')); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); } @@ -79,39 +87,39 @@ public function testIdIsReturnedFromHeader() identical to the "Message-ID" header field */ - $messageId = $this->_createHeader('Message-ID', 'a@b'); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Message-ID' => $messageId)), - $this->_createEncoder(), $this->_createCache() + $messageId = $this->createHeader('Message-ID', 'a@b'); + $message = $this->createMessage( + $this->createHeaderSet(['Message-ID' => $messageId]), + $this->createEncoder(), $this->createCache() ); $this->assertEquals('a@b', $message->getId()); } public function testIdIsSetInHeader() { - $messageId = $this->_createHeader('Message-ID', 'a@b', array(), false); + $messageId = $this->createHeader('Message-ID', 'a@b', [], false); $messageId->shouldReceive('setFieldBodyModel') ->once() ->with('x@y'); $messageId->shouldReceive('setFieldBodyModel') ->zeroOrMoreTimes(); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Message-ID' => $messageId)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['Message-ID' => $messageId]), + $this->createEncoder(), $this->createCache() ); $message->setId('x@y'); } public function testIdIsAutoGenerated() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addIdHeader') ->once() ->with('Message-ID', '/^.*?@.*?$/D'); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); } @@ -120,39 +128,39 @@ public function testSubjectIsReturnedFromHeader() /* -- RFC 2822, 3.6.5. */ - $subject = $this->_createHeader('Subject', 'example subject'); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Subject' => $subject)), - $this->_createEncoder(), $this->_createCache() + $subject = $this->createHeader('Subject', 'example subject'); + $message = $this->createMessage( + $this->createHeaderSet(['Subject' => $subject]), + $this->createEncoder(), $this->createCache() ); $this->assertEquals('example subject', $message->getSubject()); } public function testSubjectIsSetInHeader() { - $subject = $this->_createHeader('Subject', '', array(), false); + $subject = $this->createHeader('Subject', '', [], false); $subject->shouldReceive('setFieldBodyModel') ->once() ->with('foo'); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Subject' => $subject)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['Subject' => $subject]), + $this->createEncoder(), $this->createCache() ); $message->setSubject('foo'); } public function testSubjectHeaderIsCreatedIfNotPresent() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addTextHeader') ->once() ->with('Subject', 'example subject'); $headers->shouldReceive('addTextHeader') ->zeroOrMoreTimes(); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); $message->setSubject('example subject'); } @@ -162,37 +170,37 @@ public function testReturnPathIsReturnedFromHeader() /* -- RFC 2822, 3.6.7. */ - $path = $this->_createHeader('Return-Path', 'bounces@domain'); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Return-Path' => $path)), - $this->_createEncoder(), $this->_createCache() + $path = $this->createHeader('Return-Path', 'bounces@domain'); + $message = $this->createMessage( + $this->createHeaderSet(['Return-Path' => $path]), + $this->createEncoder(), $this->createCache() ); $this->assertEquals('bounces@domain', $message->getReturnPath()); } public function testReturnPathIsSetInHeader() { - $path = $this->_createHeader('Return-Path', '', array(), false); + $path = $this->createHeader('Return-Path', '', [], false); $path->shouldReceive('setFieldBodyModel') ->once() ->with('bounces@domain'); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Return-Path' => $path)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['Return-Path' => $path]), + $this->createEncoder(), $this->createCache() ); $message->setReturnPath('bounces@domain'); } public function testReturnPathHeaderIsAddedIfNoneSet() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addPathHeader') ->once() ->with('Return-Path', 'bounces@domain'); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); $message->setReturnPath('bounces@domain'); } @@ -202,56 +210,56 @@ public function testSenderIsReturnedFromHeader() /* -- RFC 2822, 3.6.2. */ - $sender = $this->_createHeader('Sender', array('sender@domain' => 'Name')); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Sender' => $sender)), - $this->_createEncoder(), $this->_createCache() + $sender = $this->createHeader('Sender', ['sender@domain' => 'Name']); + $message = $this->createMessage( + $this->createHeaderSet(['Sender' => $sender]), + $this->createEncoder(), $this->createCache() ); - $this->assertEquals(array('sender@domain' => 'Name'), $message->getSender()); + $this->assertEquals(['sender@domain' => 'Name'], $message->getSender()); } public function testSenderIsSetInHeader() { - $sender = $this->_createHeader('Sender', array('sender@domain' => 'Name'), - array(), false + $sender = $this->createHeader('Sender', ['sender@domain' => 'Name'], + [], false ); $sender->shouldReceive('setFieldBodyModel') ->once() - ->with(array('other@domain' => 'Other')); + ->with(['other@domain' => 'Other']); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Sender' => $sender)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['Sender' => $sender]), + $this->createEncoder(), $this->createCache() ); - $message->setSender(array('other@domain' => 'Other')); + $message->setSender(['other@domain' => 'Other']); } public function testSenderHeaderIsAddedIfNoneSet() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addMailboxHeader') ->once() ->with('Sender', (array) 'sender@domain'); $headers->shouldReceive('addMailboxHeader') ->zeroOrMoreTimes(); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); $message->setSender('sender@domain'); } public function testNameCanBeUsedInSenderHeader() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addMailboxHeader') ->once() - ->with('Sender', array('sender@domain' => 'Name')); + ->with('Sender', ['sender@domain' => 'Name']); $headers->shouldReceive('addMailboxHeader') ->zeroOrMoreTimes(); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); $message->setSender('sender@domain', 'Name'); } @@ -261,72 +269,72 @@ public function testFromIsReturnedFromHeader() /* -- RFC 2822, 3.6.2. */ - $from = $this->_createHeader('From', array('from@domain' => 'Name')); - $message = $this->_createMessage( - $this->_createHeaderSet(array('From' => $from)), - $this->_createEncoder(), $this->_createCache() + $from = $this->createHeader('From', ['from@domain' => 'Name']); + $message = $this->createMessage( + $this->createHeaderSet(['From' => $from]), + $this->createEncoder(), $this->createCache() ); - $this->assertEquals(array('from@domain' => 'Name'), $message->getFrom()); + $this->assertEquals(['from@domain' => 'Name'], $message->getFrom()); } public function testFromIsSetInHeader() { - $from = $this->_createHeader('From', array('from@domain' => 'Name'), - array(), false + $from = $this->createHeader('From', ['from@domain' => 'Name'], + [], false ); $from->shouldReceive('setFieldBodyModel') ->once() - ->with(array('other@domain' => 'Other')); + ->with(['other@domain' => 'Other']); - $message = $this->_createMessage( - $this->_createHeaderSet(array('From' => $from)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['From' => $from]), + $this->createEncoder(), $this->createCache() ); - $message->setFrom(array('other@domain' => 'Other')); + $message->setFrom(['other@domain' => 'Other']); } public function testFromIsAddedToHeadersDuringAddFrom() { - $from = $this->_createHeader('From', array('from@domain' => 'Name'), - array(), false + $from = $this->createHeader('From', ['from@domain' => 'Name'], + [], false ); $from->shouldReceive('setFieldBodyModel') ->once() - ->with(array('from@domain' => 'Name', 'other@domain' => 'Other')); + ->with(['from@domain' => 'Name', 'other@domain' => 'Other']); - $message = $this->_createMessage( - $this->_createHeaderSet(array('From' => $from)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['From' => $from]), + $this->createEncoder(), $this->createCache() ); $message->addFrom('other@domain', 'Other'); } public function testFromHeaderIsAddedIfNoneSet() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addMailboxHeader') ->once() ->with('From', (array) 'from@domain'); $headers->shouldReceive('addMailboxHeader') ->zeroOrMoreTimes(); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); $message->setFrom('from@domain'); } public function testPersonalNameCanBeUsedInFromAddress() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addMailboxHeader') ->once() - ->with('From', array('from@domain' => 'Name')); + ->with('From', ['from@domain' => 'Name']); $headers->shouldReceive('addMailboxHeader') ->zeroOrMoreTimes(); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); $message->setFrom('from@domain', 'Name'); } @@ -336,72 +344,72 @@ public function testReplyToIsReturnedFromHeader() /* -- RFC 2822, 3.6.2. */ - $reply = $this->_createHeader('Reply-To', array('reply@domain' => 'Name')); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Reply-To' => $reply)), - $this->_createEncoder(), $this->_createCache() + $reply = $this->createHeader('Reply-To', ['reply@domain' => 'Name']); + $message = $this->createMessage( + $this->createHeaderSet(['Reply-To' => $reply]), + $this->createEncoder(), $this->createCache() ); - $this->assertEquals(array('reply@domain' => 'Name'), $message->getReplyTo()); + $this->assertEquals(['reply@domain' => 'Name'], $message->getReplyTo()); } public function testReplyToIsSetInHeader() { - $reply = $this->_createHeader('Reply-To', array('reply@domain' => 'Name'), - array(), false + $reply = $this->createHeader('Reply-To', ['reply@domain' => 'Name'], + [], false ); $reply->shouldReceive('setFieldBodyModel') ->once() - ->with(array('other@domain' => 'Other')); + ->with(['other@domain' => 'Other']); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Reply-To' => $reply)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['Reply-To' => $reply]), + $this->createEncoder(), $this->createCache() ); - $message->setReplyTo(array('other@domain' => 'Other')); + $message->setReplyTo(['other@domain' => 'Other']); } public function testReplyToIsAddedToHeadersDuringAddReplyTo() { - $replyTo = $this->_createHeader('Reply-To', array('from@domain' => 'Name'), - array(), false + $replyTo = $this->createHeader('Reply-To', ['from@domain' => 'Name'], + [], false ); $replyTo->shouldReceive('setFieldBodyModel') ->once() - ->with(array('from@domain' => 'Name', 'other@domain' => 'Other')); + ->with(['from@domain' => 'Name', 'other@domain' => 'Other']); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Reply-To' => $replyTo)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['Reply-To' => $replyTo]), + $this->createEncoder(), $this->createCache() ); $message->addReplyTo('other@domain', 'Other'); } public function testReplyToHeaderIsAddedIfNoneSet() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addMailboxHeader') ->once() ->with('Reply-To', (array) 'reply@domain'); $headers->shouldReceive('addMailboxHeader') ->zeroOrMoreTimes(); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); $message->setReplyTo('reply@domain'); } public function testNameCanBeUsedInReplyTo() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addMailboxHeader') ->once() - ->with('Reply-To', array('reply@domain' => 'Name')); + ->with('Reply-To', ['reply@domain' => 'Name']); $headers->shouldReceive('addMailboxHeader') ->zeroOrMoreTimes(); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); $message->setReplyTo('reply@domain', 'Name'); } @@ -411,72 +419,72 @@ public function testToIsReturnedFromHeader() /* -- RFC 2822, 3.6.3. */ - $to = $this->_createHeader('To', array('to@domain' => 'Name')); - $message = $this->_createMessage( - $this->_createHeaderSet(array('To' => $to)), - $this->_createEncoder(), $this->_createCache() + $to = $this->createHeader('To', ['to@domain' => 'Name']); + $message = $this->createMessage( + $this->createHeaderSet(['To' => $to]), + $this->createEncoder(), $this->createCache() ); - $this->assertEquals(array('to@domain' => 'Name'), $message->getTo()); + $this->assertEquals(['to@domain' => 'Name'], $message->getTo()); } public function testToIsSetInHeader() { - $to = $this->_createHeader('To', array('to@domain' => 'Name'), - array(), false + $to = $this->createHeader('To', ['to@domain' => 'Name'], + [], false ); $to->shouldReceive('setFieldBodyModel') ->once() - ->with(array('other@domain' => 'Other')); + ->with(['other@domain' => 'Other']); - $message = $this->_createMessage( - $this->_createHeaderSet(array('To' => $to)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['To' => $to]), + $this->createEncoder(), $this->createCache() ); - $message->setTo(array('other@domain' => 'Other')); + $message->setTo(['other@domain' => 'Other']); } public function testToIsAddedToHeadersDuringAddTo() { - $to = $this->_createHeader('To', array('from@domain' => 'Name'), - array(), false + $to = $this->createHeader('To', ['from@domain' => 'Name'], + [], false ); $to->shouldReceive('setFieldBodyModel') ->once() - ->with(array('from@domain' => 'Name', 'other@domain' => 'Other')); + ->with(['from@domain' => 'Name', 'other@domain' => 'Other']); - $message = $this->_createMessage( - $this->_createHeaderSet(array('To' => $to)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['To' => $to]), + $this->createEncoder(), $this->createCache() ); $message->addTo('other@domain', 'Other'); } public function testToHeaderIsAddedIfNoneSet() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addMailboxHeader') ->once() ->with('To', (array) 'to@domain'); $headers->shouldReceive('addMailboxHeader') ->zeroOrMoreTimes(); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); $message->setTo('to@domain'); } public function testNameCanBeUsedInToHeader() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addMailboxHeader') ->once() - ->with('To', array('to@domain' => 'Name')); + ->with('To', ['to@domain' => 'Name']); $headers->shouldReceive('addMailboxHeader') ->zeroOrMoreTimes(); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); $message->setTo('to@domain', 'Name'); } @@ -486,72 +494,72 @@ public function testCcIsReturnedFromHeader() /* -- RFC 2822, 3.6.3. */ - $cc = $this->_createHeader('Cc', array('cc@domain' => 'Name')); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Cc' => $cc)), - $this->_createEncoder(), $this->_createCache() + $cc = $this->createHeader('Cc', ['cc@domain' => 'Name']); + $message = $this->createMessage( + $this->createHeaderSet(['Cc' => $cc]), + $this->createEncoder(), $this->createCache() ); - $this->assertEquals(array('cc@domain' => 'Name'), $message->getCc()); + $this->assertEquals(['cc@domain' => 'Name'], $message->getCc()); } public function testCcIsSetInHeader() { - $cc = $this->_createHeader('Cc', array('cc@domain' => 'Name'), - array(), false + $cc = $this->createHeader('Cc', ['cc@domain' => 'Name'], + [], false ); $cc->shouldReceive('setFieldBodyModel') ->once() - ->with(array('other@domain' => 'Other')); + ->with(['other@domain' => 'Other']); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Cc' => $cc)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['Cc' => $cc]), + $this->createEncoder(), $this->createCache() ); - $message->setCc(array('other@domain' => 'Other')); + $message->setCc(['other@domain' => 'Other']); } public function testCcIsAddedToHeadersDuringAddCc() { - $cc = $this->_createHeader('Cc', array('from@domain' => 'Name'), - array(), false + $cc = $this->createHeader('Cc', ['from@domain' => 'Name'], + [], false ); $cc->shouldReceive('setFieldBodyModel') ->once() - ->with(array('from@domain' => 'Name', 'other@domain' => 'Other')); + ->with(['from@domain' => 'Name', 'other@domain' => 'Other']); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Cc' => $cc)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['Cc' => $cc]), + $this->createEncoder(), $this->createCache() ); $message->addCc('other@domain', 'Other'); } public function testCcHeaderIsAddedIfNoneSet() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addMailboxHeader') ->once() ->with('Cc', (array) 'cc@domain'); $headers->shouldReceive('addMailboxHeader') ->zeroOrMoreTimes(); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); $message->setCc('cc@domain'); } public function testNameCanBeUsedInCcHeader() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addMailboxHeader') ->once() - ->with('Cc', array('cc@domain' => 'Name')); + ->with('Cc', ['cc@domain' => 'Name']); $headers->shouldReceive('addMailboxHeader') ->zeroOrMoreTimes(); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); $message->setCc('cc@domain', 'Name'); } @@ -561,180 +569,180 @@ public function testBccIsReturnedFromHeader() /* -- RFC 2822, 3.6.3. */ - $bcc = $this->_createHeader('Bcc', array('bcc@domain' => 'Name')); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Bcc' => $bcc)), - $this->_createEncoder(), $this->_createCache() + $bcc = $this->createHeader('Bcc', ['bcc@domain' => 'Name']); + $message = $this->createMessage( + $this->createHeaderSet(['Bcc' => $bcc]), + $this->createEncoder(), $this->createCache() ); - $this->assertEquals(array('bcc@domain' => 'Name'), $message->getBcc()); + $this->assertEquals(['bcc@domain' => 'Name'], $message->getBcc()); } public function testBccIsSetInHeader() { - $bcc = $this->_createHeader('Bcc', array('bcc@domain' => 'Name'), - array(), false + $bcc = $this->createHeader('Bcc', ['bcc@domain' => 'Name'], + [], false ); $bcc->shouldReceive('setFieldBodyModel') ->once() - ->with(array('other@domain' => 'Other')); + ->with(['other@domain' => 'Other']); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Bcc' => $bcc)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['Bcc' => $bcc]), + $this->createEncoder(), $this->createCache() ); - $message->setBcc(array('other@domain' => 'Other')); + $message->setBcc(['other@domain' => 'Other']); } public function testBccIsAddedToHeadersDuringAddBcc() { - $bcc = $this->_createHeader('Bcc', array('from@domain' => 'Name'), - array(), false + $bcc = $this->createHeader('Bcc', ['from@domain' => 'Name'], + [], false ); $bcc->shouldReceive('setFieldBodyModel') ->once() - ->with(array('from@domain' => 'Name', 'other@domain' => 'Other')); + ->with(['from@domain' => 'Name', 'other@domain' => 'Other']); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Bcc' => $bcc)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['Bcc' => $bcc]), + $this->createEncoder(), $this->createCache() ); $message->addBcc('other@domain', 'Other'); } public function testBccHeaderIsAddedIfNoneSet() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addMailboxHeader') ->once() ->with('Bcc', (array) 'bcc@domain'); $headers->shouldReceive('addMailboxHeader') ->zeroOrMoreTimes(); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); $message->setBcc('bcc@domain'); } public function testNameCanBeUsedInBcc() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addMailboxHeader') ->once() - ->with('Bcc', array('bcc@domain' => 'Name')); + ->with('Bcc', ['bcc@domain' => 'Name']); $headers->shouldReceive('addMailboxHeader') ->zeroOrMoreTimes(); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); $message->setBcc('bcc@domain', 'Name'); } public function testPriorityIsReadFromHeader() { - $prio = $this->_createHeader('X-Priority', '2 (High)'); - $message = $this->_createMessage( - $this->_createHeaderSet(array('X-Priority' => $prio)), - $this->_createEncoder(), $this->_createCache() + $prio = $this->createHeader('X-Priority', '2 (High)'); + $message = $this->createMessage( + $this->createHeaderSet(['X-Priority' => $prio]), + $this->createEncoder(), $this->createCache() ); $this->assertEquals(2, $message->getPriority()); } public function testPriorityIsSetInHeader() { - $prio = $this->_createHeader('X-Priority', '2 (High)', array(), false); + $prio = $this->createHeader('X-Priority', '2 (High)', [], false); $prio->shouldReceive('setFieldBodyModel') ->once() ->with('5 (Lowest)'); - $message = $this->_createMessage( - $this->_createHeaderSet(array('X-Priority' => $prio)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['X-Priority' => $prio]), + $this->createEncoder(), $this->createCache() ); $message->setPriority($message::PRIORITY_LOWEST); } public function testPriorityHeaderIsAddedIfNoneSet() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addTextHeader') ->once() ->with('X-Priority', '4 (Low)'); $headers->shouldReceive('addTextHeader') ->zeroOrMoreTimes(); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); $message->setPriority($message::PRIORITY_LOW); } public function testReadReceiptAddressReadFromHeader() { - $rcpt = $this->_createHeader('Disposition-Notification-To', - array('chris@swiftmailer.org' => 'Chris') + $rcpt = $this->createHeader('Disposition-Notification-To', + ['chris@swiftmailer.org' => 'Chris'] ); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Disposition-Notification-To' => $rcpt)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['Disposition-Notification-To' => $rcpt]), + $this->createEncoder(), $this->createCache() ); - $this->assertEquals(array('chris@swiftmailer.org' => 'Chris'), + $this->assertEquals(['chris@swiftmailer.org' => 'Chris'], $message->getReadReceiptTo() ); } public function testReadReceiptIsSetInHeader() { - $rcpt = $this->_createHeader('Disposition-Notification-To', array(), array(), false); + $rcpt = $this->createHeader('Disposition-Notification-To', [], [], false); $rcpt->shouldReceive('setFieldBodyModel') ->once() ->with('mark@swiftmailer.org'); - $message = $this->_createMessage( - $this->_createHeaderSet(array('Disposition-Notification-To' => $rcpt)), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage( + $this->createHeaderSet(['Disposition-Notification-To' => $rcpt]), + $this->createEncoder(), $this->createCache() ); $message->setReadReceiptTo('mark@swiftmailer.org'); } public function testReadReceiptHeaderIsAddedIfNoneSet() { - $headers = $this->_createHeaderSet(array(), false); + $headers = $this->createHeaderSet([], false); $headers->shouldReceive('addMailboxHeader') ->once() ->with('Disposition-Notification-To', 'mark@swiftmailer.org'); $headers->shouldReceive('addMailboxHeader') ->zeroOrMoreTimes(); - $message = $this->_createMessage($headers, $this->_createEncoder(), - $this->_createCache() + $message = $this->createMessage($headers, $this->createEncoder(), + $this->createCache() ); $message->setReadReceiptTo('mark@swiftmailer.org'); } public function testChildrenCanBeAttached() { - $child1 = $this->_createChild(); - $child2 = $this->_createChild(); + $child1 = $this->createChild(); + $child2 = $this->createChild(); - $message = $this->_createMessage($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $message->attach($child1); $message->attach($child2); - $this->assertEquals(array($child1, $child2), $message->getChildren()); + $this->assertEquals([$child1, $child2], $message->getChildren()); } public function testChildrenCanBeDetached() { - $child1 = $this->_createChild(); - $child2 = $this->_createChild(); + $child1 = $this->createChild(); + $child2 = $this->createChild(); - $message = $this->_createMessage($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $message->attach($child1); @@ -742,33 +750,33 @@ public function testChildrenCanBeDetached() $message->detach($child1); - $this->assertEquals(array($child2), $message->getChildren()); + $this->assertEquals([$child2], $message->getChildren()); } public function testEmbedAttachesChild() { - $child = $this->_createChild(); + $child = $this->createChild(); - $message = $this->_createMessage($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $message->embed($child); - $this->assertEquals(array($child), $message->getChildren()); + $this->assertEquals([$child], $message->getChildren()); } public function testEmbedReturnsValidCid() { - $child = $this->_createChild(Swift_Mime_MimeEntity::LEVEL_RELATED, '', + $child = $this->createChild(Swift_Mime_SimpleMimeEntity::LEVEL_RELATED, '', false ); $child->shouldReceive('getId') ->zeroOrMoreTimes() ->andReturn('foo@bar'); - $message = $this->_createMessage($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $message = $this->createMessage($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $this->assertEquals('cid:foo@bar', $message->embed($child)); @@ -776,32 +784,32 @@ public function testEmbedReturnsValidCid() public function testFluidInterface() { - $child = $this->_createChild(); - $message = $this->_createMessage($this->_createHeaderSet(), - $this->_createEncoder(), $this->_createCache() + $child = $this->createChild(); + $message = $this->createMessage($this->createHeaderSet(), + $this->createEncoder(), $this->createCache() ); $this->assertSame($message, $message ->setContentType('text/plain') - ->setEncoder($this->_createEncoder()) + ->setEncoder($this->createEncoder()) ->setId('foo@bar') ->setDescription('my description') ->setMaxLineLength(998) ->setBody('xx') ->setBoundary('xyz') - ->setChildren(array()) + ->setChildren([]) ->setCharset('iso-8859-1') ->setFormat('flowed') ->setDelSp(false) ->setSubject('subj') - ->setDate(123) + ->setDate(new DateTimeImmutable()) ->setReturnPath('foo@bar') ->setSender('foo@bar') - ->setFrom(array('x@y' => 'XY')) - ->setReplyTo(array('ab@cd' => 'ABCD')) - ->setTo(array('chris@site.tld', 'mark@site.tld')) + ->setFrom(['x@y' => 'XY']) + ->setReplyTo(['ab@cd' => 'ABCD']) + ->setTo(['chris@site.tld', 'mark@site.tld']) ->setCc('john@somewhere.tld') - ->setBcc(array('one@site', 'two@site' => 'Two')) + ->setBcc(['one@site', 'two@site' => 'Two']) ->setPriority($message::PRIORITY_LOW) ->setReadReceiptTo('a@b') ->attach($child) @@ -810,18 +818,20 @@ public function testFluidInterface() } //abstract - protected function _createEntity($headers, $encoder, $cache) + protected function createEntity($headers, $encoder, $cache) { - return $this->_createMessage($headers, $encoder, $cache); + return $this->createMessage($headers, $encoder, $cache); } - protected function _createMimePart($headers, $encoder, $cache) + protected function createMimePart($headers, $encoder, $cache) { - return $this->_createMessage($headers, $encoder, $cache); + return $this->createMessage($headers, $encoder, $cache); } - private function _createMessage($headers, $encoder, $cache) + private function createMessage($headers, $encoder, $cache) { - return new Swift_Mime_SimpleMessage($headers, $encoder, $cache, new Swift_Mime_Grammar()); + $idGenerator = new Swift_Mime_IdGenerator('example.com'); + + return new Swift_Mime_SimpleMessage($headers, $encoder, $cache, $idGenerator); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMimeEntityTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMimeEntityTest.php index fa2a8d4..24578ed 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMimeEntityTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Mime/SimpleMimeEntityTest.php @@ -1,9 +1,12 @@ _createTransport(); + $transport = $this->createTransport(); $transport->expects($this->once()) ->method('start'); $transport->expects($this->once()) ->method('stop'); - $evt = $this->_createSendEvent($transport); + $evt = $this->createSendEvent($transport); $plugin = new Swift_Plugins_AntiFloodPlugin(10); for ($i = 0; $i < 12; ++$i) { @@ -36,13 +36,13 @@ public function testPluginStopsConnectionAfterThreshold() public function testPluginCanStopAndStartMultipleTimes() { - $transport = $this->_createTransport(); + $transport = $this->createTransport(); $transport->expects($this->exactly(5)) ->method('start'); $transport->expects($this->exactly(5)) ->method('stop'); - $evt = $this->_createSendEvent($transport); + $evt = $this->createSendEvent($transport); $plugin = new Swift_Plugins_AntiFloodPlugin(2); for ($i = 0; $i < 11; ++$i) { @@ -57,13 +57,13 @@ public function testPluginCanSleepDuringRestart() ->method('sleep') ->with(10); - $transport = $this->_createTransport(); + $transport = $this->createTransport(); $transport->expects($this->once()) ->method('start'); $transport->expects($this->once()) ->method('stop'); - $evt = $this->_createSendEvent($transport); + $evt = $this->createSendEvent($transport); $plugin = new Swift_Plugins_AntiFloodPlugin(99, 10, $sleeper); for ($i = 0; $i < 101; ++$i) { @@ -71,12 +71,12 @@ public function testPluginCanSleepDuringRestart() } } - private function _createTransport() + private function createTransport() { return $this->getMockBuilder('Swift_Transport')->getMock(); } - private function _createSendEvent($transport) + private function createSendEvent($transport) { $evt = $this->getMockBuilder('Swift_Events_SendEvent') ->disableOriginalConstructor() diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/BandwidthMonitorPluginTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/BandwidthMonitorPluginTest.php index 869cfc8..cbacfe2 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/BandwidthMonitorPluginTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/BandwidthMonitorPluginTest.php @@ -1,6 +1,6 @@ _monitor = new Swift_Plugins_BandwidthMonitorPlugin(); + $this->monitor = new Swift_Plugins_BandwidthMonitorPlugin(); } public function testBytesOutIncreasesWhenCommandsSent() { - $evt = $this->_createCommandEvent("RCPT TO:\r\n"); + $evt = $this->createCommandEvent("RCPT TO:\r\n"); - $this->assertEquals(0, $this->_monitor->getBytesOut()); - $this->_monitor->commandSent($evt); - $this->assertEquals(23, $this->_monitor->getBytesOut()); - $this->_monitor->commandSent($evt); - $this->assertEquals(46, $this->_monitor->getBytesOut()); + $this->assertEquals(0, $this->monitor->getBytesOut()); + $this->monitor->commandSent($evt); + $this->assertEquals(23, $this->monitor->getBytesOut()); + $this->monitor->commandSent($evt); + $this->assertEquals(46, $this->monitor->getBytesOut()); } public function testBytesInIncreasesWhenResponsesReceived() { - $evt = $this->_createResponseEvent("250 Ok\r\n"); + $evt = $this->createResponseEvent("250 Ok\r\n"); - $this->assertEquals(0, $this->_monitor->getBytesIn()); - $this->_monitor->responseReceived($evt); - $this->assertEquals(8, $this->_monitor->getBytesIn()); - $this->_monitor->responseReceived($evt); - $this->assertEquals(16, $this->_monitor->getBytesIn()); + $this->assertEquals(0, $this->monitor->getBytesIn()); + $this->monitor->responseReceived($evt); + $this->assertEquals(8, $this->monitor->getBytesIn()); + $this->monitor->responseReceived($evt); + $this->assertEquals(16, $this->monitor->getBytesIn()); } public function testCountersCanBeReset() { - $evt = $this->_createResponseEvent("250 Ok\r\n"); + $evt = $this->createResponseEvent("250 Ok\r\n"); - $this->assertEquals(0, $this->_monitor->getBytesIn()); - $this->_monitor->responseReceived($evt); - $this->assertEquals(8, $this->_monitor->getBytesIn()); - $this->_monitor->responseReceived($evt); - $this->assertEquals(16, $this->_monitor->getBytesIn()); + $this->assertEquals(0, $this->monitor->getBytesIn()); + $this->monitor->responseReceived($evt); + $this->assertEquals(8, $this->monitor->getBytesIn()); + $this->monitor->responseReceived($evt); + $this->assertEquals(16, $this->monitor->getBytesIn()); - $evt = $this->_createCommandEvent("RCPT TO:\r\n"); + $evt = $this->createCommandEvent("RCPT TO:\r\n"); - $this->assertEquals(0, $this->_monitor->getBytesOut()); - $this->_monitor->commandSent($evt); - $this->assertEquals(23, $this->_monitor->getBytesOut()); - $this->_monitor->commandSent($evt); - $this->assertEquals(46, $this->_monitor->getBytesOut()); + $this->assertEquals(0, $this->monitor->getBytesOut()); + $this->monitor->commandSent($evt); + $this->assertEquals(23, $this->monitor->getBytesOut()); + $this->monitor->commandSent($evt); + $this->assertEquals(46, $this->monitor->getBytesOut()); - $this->_monitor->reset(); + $this->monitor->reset(); - $this->assertEquals(0, $this->_monitor->getBytesOut()); - $this->assertEquals(0, $this->_monitor->getBytesIn()); + $this->assertEquals(0, $this->monitor->getBytesOut()); + $this->assertEquals(0, $this->monitor->getBytesIn()); } public function testBytesOutIncreasesAccordingToMessageLength() { - $message = $this->_createMessageWithByteCount(6); - $evt = $this->_createSendEvent($message); - - $this->assertEquals(0, $this->_monitor->getBytesOut()); - $this->_monitor->sendPerformed($evt); - $this->assertEquals(6, $this->_monitor->getBytesOut()); - $this->_monitor->sendPerformed($evt); - $this->assertEquals(12, $this->_monitor->getBytesOut()); + $message = $this->createMessageWithByteCount(6); + $evt = $this->createSendEvent($message); + + $this->assertEquals(0, $this->monitor->getBytesOut()); + $this->monitor->sendPerformed($evt); + $this->assertEquals(6, $this->monitor->getBytesOut()); + $this->monitor->sendPerformed($evt); + $this->assertEquals(12, $this->monitor->getBytesOut()); } - private function _createSendEvent($message) + private function createSendEvent($message) { $evt = $this->getMockBuilder('Swift_Events_SendEvent') ->disableOriginalConstructor() @@ -81,7 +81,7 @@ private function _createSendEvent($message) return $evt; } - private function _createCommandEvent($command) + private function createCommandEvent($command) { $evt = $this->getMockBuilder('Swift_Events_CommandEvent') ->disableOriginalConstructor() @@ -93,7 +93,7 @@ private function _createCommandEvent($command) return $evt; } - private function _createResponseEvent($response) + private function createResponseEvent($response) { $evt = $this->getMockBuilder('Swift_Events_ResponseEvent') ->disableOriginalConstructor() @@ -105,23 +105,23 @@ private function _createResponseEvent($response) return $evt; } - private function _createMessageWithByteCount($bytes) + private function createMessageWithByteCount($bytes) { - $this->_bytes = $bytes; - $msg = $this->getMockBuilder('Swift_Mime_Message')->getMock(); + $this->bytes = $bytes; + $msg = $this->getMockBuilder('Swift_Mime_SimpleMessage')->disableOriginalConstructor()->getMock(); $msg->expects($this->any()) ->method('toByteStream') - ->will($this->returnCallback(array($this, '_write'))); - /* $this->_checking(Expectations::create() - -> ignoring($msg)->toByteStream(any()) -> calls(array($this, '_write')) - ); */ + ->will($this->returnCallback([$this, 'write'])); + /* $this->checking(Expectations::create() + -> ignoring($msg)->toByteStream(any()) -> calls(array($this, 'write')) + ); */ return $msg; } - public function _write($is) + public function write($is) { - for ($i = 0; $i < $this->_bytes; ++$i) { + for ($i = 0; $i < $this->bytes; ++$i) { $is->write('x'); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/DecoratorPluginTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/DecoratorPluginTest.php index 8019dfb..97b1d95 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/DecoratorPluginTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/DecoratorPluginTest.php @@ -4,10 +4,10 @@ class Swift_Plugins_DecoratorPluginTest extends \SwiftMailerTestCase { public function testMessageBodyReceivesReplacements() { - $message = $this->_createMessage( - $this->_createHeaders(), - array('zip@button.tld' => 'Zipathon'), - array('chris.corbyn@swiftmailer.org' => 'Chris'), + $message = $this->createMessage( + $this->createHeaders(), + ['zip@button.tld' => 'Zipathon'], + ['chris.corbyn@swiftmailer.org' => 'Chris'], 'Subject', 'Hello {name}, you are customer #{id}' ); @@ -17,11 +17,11 @@ public function testMessageBodyReceivesReplacements() $message->shouldReceive('setBody') ->zeroOrMoreTimes(); - $plugin = $this->_createPlugin( - array('zip@button.tld' => array('{name}' => 'Zip', '{id}' => '456')) + $plugin = $this->createPlugin( + ['zip@button.tld' => ['{name}' => 'Zip', '{id}' => '456']] ); - $evt = $this->_createSendEvent($message); + $evt = $this->createSendEvent($message); $plugin->beforeSendPerformed($evt); $plugin->sendPerformed($evt); @@ -29,10 +29,10 @@ public function testMessageBodyReceivesReplacements() public function testReplacementsCanBeAppliedToSameMessageMultipleTimes() { - $message = $this->_createMessage( - $this->_createHeaders(), - array('zip@button.tld' => 'Zipathon', 'foo@bar.tld' => 'Foo'), - array('chris.corbyn@swiftmailer.org' => 'Chris'), + $message = $this->createMessage( + $this->createHeaders(), + ['zip@button.tld' => 'Zipathon', 'foo@bar.tld' => 'Foo'], + ['chris.corbyn@swiftmailer.org' => 'Chris'], 'Subject', 'Hello {name}, you are customer #{id}' ); @@ -48,14 +48,14 @@ public function testReplacementsCanBeAppliedToSameMessageMultipleTimes() $message->shouldReceive('setBody') ->zeroOrMoreTimes(); - $plugin = $this->_createPlugin( - array( - 'foo@bar.tld' => array('{name}' => 'Foo', '{id}' => '123'), - 'zip@button.tld' => array('{name}' => 'Zip', '{id}' => '456'), - ) + $plugin = $this->createPlugin( + [ + 'foo@bar.tld' => ['{name}' => 'Foo', '{id}' => '123'], + 'zip@button.tld' => ['{name}' => 'Zip', '{id}' => '456'], + ] ); - $evt = $this->_createSendEvent($message); + $evt = $this->createSendEvent($message); $plugin->beforeSendPerformed($evt); $plugin->sendPerformed($evt); @@ -65,15 +65,15 @@ public function testReplacementsCanBeAppliedToSameMessageMultipleTimes() public function testReplacementsCanBeMadeInHeaders() { - $headers = $this->_createHeaders(array( - $returnPathHeader = $this->_createHeader('Return-Path', 'foo-{id}@swiftmailer.org'), - $toHeader = $this->_createHeader('Subject', 'A message for {name}!'), - )); + $headers = $this->createHeaders([ + $returnPathHeader = $this->createHeader('Return-Path', 'foo-{id}@swiftmailer.org'), + $toHeader = $this->createHeader('Subject', 'A message for {name}!'), + ]); - $message = $this->_createMessage( + $message = $this->createMessage( $headers, - array('zip@button.tld' => 'Zipathon'), - array('chris.corbyn@swiftmailer.org' => 'Chris'), + ['zip@button.tld' => 'Zipathon'], + ['chris.corbyn@swiftmailer.org' => 'Chris'], 'A message for {name}!', 'Hello {name}, you are customer #{id}' ); @@ -94,10 +94,10 @@ public function testReplacementsCanBeMadeInHeaders() $returnPathHeader->shouldReceive('setFieldBodyModel') ->zeroOrMoreTimes(); - $plugin = $this->_createPlugin( - array('zip@button.tld' => array('{name}' => 'Zip', '{id}' => '456')) + $plugin = $this->createPlugin( + ['zip@button.tld' => ['{name}' => 'Zip', '{id}' => '456']] ); - $evt = $this->_createSendEvent($message); + $evt = $this->createSendEvent($message); $plugin->beforeSendPerformed($evt); $plugin->sendPerformed($evt); @@ -105,18 +105,18 @@ public function testReplacementsCanBeMadeInHeaders() public function testReplacementsAreMadeOnSubparts() { - $part1 = $this->_createPart('text/plain', 'Your name is {name}?', '1@x'); - $part2 = $this->_createPart('text/html', 'Your name is {name}?', '2@x'); - $message = $this->_createMessage( - $this->_createHeaders(), - array('zip@button.tld' => 'Zipathon'), - array('chris.corbyn@swiftmailer.org' => 'Chris'), + $part1 = $this->createPart('text/plain', 'Your name is {name}?', '1@x'); + $part2 = $this->createPart('text/html', 'Your name is {name}?', '2@x'); + $message = $this->createMessage( + $this->createHeaders(), + ['zip@button.tld' => 'Zipathon'], + ['chris.corbyn@swiftmailer.org' => 'Chris'], 'A message for {name}!', 'Subject' ); $message->shouldReceive('getChildren') ->zeroOrMoreTimes() - ->andReturn(array($part1, $part2)); + ->andReturn([$part1, $part2]); $part1->shouldReceive('setBody') ->once() ->with('Your name is Zip?'); @@ -128,11 +128,11 @@ public function testReplacementsAreMadeOnSubparts() $part2->shouldReceive('setBody') ->zeroOrMoreTimes(); - $plugin = $this->_createPlugin( - array('zip@button.tld' => array('{name}' => 'Zip', '{id}' => '456')) + $plugin = $this->createPlugin( + ['zip@button.tld' => ['{name}' => 'Zip', '{id}' => '456']] ); - $evt = $this->_createSendEvent($message); + $evt = $this->createSendEvent($message); $plugin->beforeSendPerformed($evt); $plugin->sendPerformed($evt); @@ -140,15 +140,15 @@ public function testReplacementsAreMadeOnSubparts() public function testReplacementsCanBeTakenFromCustomReplacementsObject() { - $message = $this->_createMessage( - $this->_createHeaders(), - array('foo@bar' => 'Foobar', 'zip@zap' => 'Zip zap'), - array('chris.corbyn@swiftmailer.org' => 'Chris'), + $message = $this->createMessage( + $this->createHeaders(), + ['foo@bar' => 'Foobar', 'zip@zap' => 'Zip zap'], + ['chris.corbyn@swiftmailer.org' => 'Chris'], 'Subject', 'Something {a}' ); - $replacements = $this->_createReplacements(); + $replacements = $this->createReplacements(); $message->shouldReceive('setBody') ->once() @@ -161,15 +161,15 @@ public function testReplacementsCanBeTakenFromCustomReplacementsObject() $replacements->shouldReceive('getReplacementsFor') ->once() ->with('foo@bar') - ->andReturn(array('{a}' => 'b')); + ->andReturn(['{a}' => 'b']); $replacements->shouldReceive('getReplacementsFor') ->once() ->with('zip@zap') - ->andReturn(array('{a}' => 'c')); + ->andReturn(['{a}' => 'c']); - $plugin = $this->_createPlugin($replacements); + $plugin = $this->createPlugin($replacements); - $evt = $this->_createSendEvent($message); + $evt = $this->createSendEvent($message); $plugin->beforeSendPerformed($evt); $plugin->sendPerformed($evt); @@ -177,14 +177,31 @@ public function testReplacementsCanBeTakenFromCustomReplacementsObject() $plugin->sendPerformed($evt); } - private function _createMessage($headers, $to = array(), $from = null, $subject = null, + public function testReplacementsWithAMessageWithImmutableDate() + { + $message = (new Swift_Message('subject foo')) + ->setBody('body foo') + ->addTo('somebody@hostname.tld') + ->addFrom('somebody@hostname.tld'); + + $evt = $this->createSendEvent($message); + + $plugin = $this->createPlugin(['somebody@hostname.tld' => ['foo' => 'bar']]); + + $plugin->beforeSendPerformed($evt); + + $this->assertEquals('subject bar', $message->getSubject()); + $this->assertEquals('body bar', $message->getBody()); + } + + private function createMessage($headers, $to = [], $from = null, $subject = null, $body = null) { - $message = $this->getMockery('Swift_Mime_Message')->shouldIgnoreMissing(); + $message = $this->getMockery('Swift_Mime_SimpleMessage')->shouldIgnoreMissing(); foreach ($to as $addr => $name) { $message->shouldReceive('getTo') ->once() - ->andReturn(array($addr => $name)); + ->andReturn([$addr => $name]); } $message->shouldReceive('getHeaders') ->zeroOrMoreTimes() @@ -202,17 +219,17 @@ private function _createMessage($headers, $to = array(), $from = null, $subject return $message; } - private function _createPlugin($replacements) + private function createPlugin($replacements) { return new Swift_Plugins_DecoratorPlugin($replacements); } - private function _createReplacements() + private function createReplacements() { return $this->getMockery('Swift_Plugins_Decorator_Replacements')->shouldIgnoreMissing(); } - private function _createSendEvent(Swift_Mime_Message $message) + private function createSendEvent(Swift_Mime_SimpleMessage $message) { $evt = $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); $evt->shouldReceive('getMessage') @@ -222,9 +239,9 @@ private function _createSendEvent(Swift_Mime_Message $message) return $evt; } - private function _createPart($type, $body, $id) + private function createPart($type, $body, $id) { - $part = $this->getMockery('Swift_Mime_MimeEntity')->shouldIgnoreMissing(); + $part = $this->getMockery('Swift_Mime_SimpleMimeEntity')->shouldIgnoreMissing(); $part->shouldReceive('getContentType') ->zeroOrMoreTimes() ->andReturn($type); @@ -238,9 +255,9 @@ private function _createPart($type, $body, $id) return $part; } - private function _createHeaders($headers = array()) + private function createHeaders($headers = []) { - $set = $this->getMockery('Swift_Mime_HeaderSet')->shouldIgnoreMissing(); + $set = $this->getMockery('Swift_Mime_SimpleHeaderSet')->shouldIgnoreMissing(); $set->shouldReceive('getAll') ->zeroOrMoreTimes() ->andReturn($headers); @@ -252,7 +269,7 @@ private function _createHeaders($headers = array()) return $set; } - private function _createHeader($name, $body = '') + private function createHeader($name, $body = '') { $header = $this->getMockery('Swift_Mime_Header')->shouldIgnoreMissing(); $header->shouldReceive('getFieldName') diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/LoggerPluginTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/LoggerPluginTest.php index bfe4cb7..d66021c 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/LoggerPluginTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/LoggerPluginTest.php @@ -4,118 +4,118 @@ class Swift_Plugins_LoggerPluginTest extends \SwiftMailerTestCase { public function testLoggerDelegatesAddingEntries() { - $logger = $this->_createLogger(); + $logger = $this->createLogger(); $logger->expects($this->once()) ->method('add') ->with('foo'); - $plugin = $this->_createPlugin($logger); + $plugin = $this->createPlugin($logger); $plugin->add('foo'); } public function testLoggerDelegatesDumpingEntries() { - $logger = $this->_createLogger(); + $logger = $this->createLogger(); $logger->expects($this->once()) ->method('dump') ->will($this->returnValue('foobar')); - $plugin = $this->_createPlugin($logger); + $plugin = $this->createPlugin($logger); $this->assertEquals('foobar', $plugin->dump()); } public function testLoggerDelegatesClearingEntries() { - $logger = $this->_createLogger(); + $logger = $this->createLogger(); $logger->expects($this->once()) ->method('clear'); - $plugin = $this->_createPlugin($logger); + $plugin = $this->createPlugin($logger); $plugin->clear(); } public function testCommandIsSentToLogger() { - $evt = $this->_createCommandEvent("foo\r\n"); - $logger = $this->_createLogger(); + $evt = $this->createCommandEvent("foo\r\n"); + $logger = $this->createLogger(); $logger->expects($this->once()) ->method('add') - ->with($this->regExp('~foo\r\n~')); + ->with(static::regExp('~foo\r\n~')); - $plugin = $this->_createPlugin($logger); + $plugin = $this->createPlugin($logger); $plugin->commandSent($evt); } public function testResponseIsSentToLogger() { - $evt = $this->_createResponseEvent("354 Go ahead\r\n"); - $logger = $this->_createLogger(); + $evt = $this->createResponseEvent("354 Go ahead\r\n"); + $logger = $this->createLogger(); $logger->expects($this->once()) ->method('add') - ->with($this->regExp('~354 Go ahead\r\n~')); + ->with(static::regExp('~354 Go ahead\r\n~')); - $plugin = $this->_createPlugin($logger); + $plugin = $this->createPlugin($logger); $plugin->responseReceived($evt); } public function testTransportBeforeStartChangeIsSentToLogger() { - $evt = $this->_createTransportChangeEvent(); - $logger = $this->_createLogger(); + $evt = $this->createTransportChangeEvent(); + $logger = $this->createLogger(); $logger->expects($this->once()) ->method('add') ->with($this->anything()); - $plugin = $this->_createPlugin($logger); + $plugin = $this->createPlugin($logger); $plugin->beforeTransportStarted($evt); } public function testTransportStartChangeIsSentToLogger() { - $evt = $this->_createTransportChangeEvent(); - $logger = $this->_createLogger(); + $evt = $this->createTransportChangeEvent(); + $logger = $this->createLogger(); $logger->expects($this->once()) ->method('add') ->with($this->anything()); - $plugin = $this->_createPlugin($logger); + $plugin = $this->createPlugin($logger); $plugin->transportStarted($evt); } public function testTransportStopChangeIsSentToLogger() { - $evt = $this->_createTransportChangeEvent(); - $logger = $this->_createLogger(); + $evt = $this->createTransportChangeEvent(); + $logger = $this->createLogger(); $logger->expects($this->once()) ->method('add') ->with($this->anything()); - $plugin = $this->_createPlugin($logger); + $plugin = $this->createPlugin($logger); $plugin->transportStopped($evt); } public function testTransportBeforeStopChangeIsSentToLogger() { - $evt = $this->_createTransportChangeEvent(); - $logger = $this->_createLogger(); + $evt = $this->createTransportChangeEvent(); + $logger = $this->createLogger(); $logger->expects($this->once()) ->method('add') ->with($this->anything()); - $plugin = $this->_createPlugin($logger); + $plugin = $this->createPlugin($logger); $plugin->beforeTransportStopped($evt); } public function testExceptionsArePassedToDelegateAndLeftToBubbleUp() { - $transport = $this->_createTransport(); - $evt = $this->_createTransportExceptionEvent(); - $logger = $this->_createLogger(); + $transport = $this->createTransport(); + $evt = $this->createTransportExceptionEvent(); + $logger = $this->createLogger(); $logger->expects($this->once()) ->method('add') ->with($this->anything()); - $plugin = $this->_createPlugin($logger); + $plugin = $this->createPlugin($logger); try { $plugin->exceptionThrown($evt); $this->fail('Exception should bubble up.'); @@ -123,17 +123,17 @@ public function testExceptionsArePassedToDelegateAndLeftToBubbleUp() } } - private function _createLogger() + private function createLogger() { return $this->getMockBuilder('Swift_Plugins_Logger')->getMock(); } - private function _createPlugin($logger) + private function createPlugin($logger) { return new Swift_Plugins_LoggerPlugin($logger); } - private function _createCommandEvent($command) + private function createCommandEvent($command) { $evt = $this->getMockBuilder('Swift_Events_CommandEvent') ->disableOriginalConstructor() @@ -145,7 +145,7 @@ private function _createCommandEvent($command) return $evt; } - private function _createResponseEvent($response) + private function createResponseEvent($response) { $evt = $this->getMockBuilder('Swift_Events_ResponseEvent') ->disableOriginalConstructor() @@ -157,24 +157,24 @@ private function _createResponseEvent($response) return $evt; } - private function _createTransport() + private function createTransport() { return $this->getMockBuilder('Swift_Transport')->getMock(); } - private function _createTransportChangeEvent() + private function createTransportChangeEvent() { $evt = $this->getMockBuilder('Swift_Events_TransportChangeEvent') ->disableOriginalConstructor() ->getMock(); $evt->expects($this->any()) ->method('getSource') - ->will($this->returnValue($this->_createTransport())); + ->will($this->returnValue($this->createTransport())); return $evt; } - public function _createTransportExceptionEvent() + public function createTransportExceptionEvent() { $evt = $this->getMockBuilder('Swift_Events_TransportExceptionEvent') ->disableOriginalConstructor() diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Loggers/ArrayLoggerTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Loggers/ArrayLoggerTest.php index 880bb32..48c1b07 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Loggers/ArrayLoggerTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Loggers/ArrayLoggerTest.php @@ -1,6 +1,6 @@ _createConnection(); + $connection = $this->createConnection(); $connection->expects($this->once()) ->method('connect'); - $plugin = $this->_createPlugin('pop.host.tld', 110); + $plugin = $this->createPlugin('pop.host.tld', 110); $plugin->setConnection($connection); - $transport = $this->_createTransport(); - $evt = $this->_createTransportChangeEvent($transport); + $transport = $this->createTransport(); + $evt = $this->createTransportChangeEvent($transport); $plugin->beforeTransportStarted($evt); } public function testPluginDisconnectsFromPop3HostBeforeTransportStarts() { - $connection = $this->_createConnection(); + $connection = $this->createConnection(); $connection->expects($this->once()) ->method('disconnect'); - $plugin = $this->_createPlugin('pop.host.tld', 110); + $plugin = $this->createPlugin('pop.host.tld', 110); $plugin->setConnection($connection); - $transport = $this->_createTransport(); - $evt = $this->_createTransportChangeEvent($transport); + $transport = $this->createTransport(); + $evt = $this->createTransportChangeEvent($transport); $plugin->beforeTransportStarted($evt); } public function testPluginDoesNotConnectToSmtpIfBoundToDifferentTransport() { - $connection = $this->_createConnection(); + $connection = $this->createConnection(); $connection->expects($this->never()) ->method('disconnect'); $connection->expects($this->never()) ->method('connect'); - $smtp = $this->_createTransport(); + $smtp = $this->createTransport(); - $plugin = $this->_createPlugin('pop.host.tld', 110); + $plugin = $this->createPlugin('pop.host.tld', 110); $plugin->setConnection($connection); $plugin->bindSmtp($smtp); - $transport = $this->_createTransport(); - $evt = $this->_createTransportChangeEvent($transport); + $transport = $this->createTransport(); + $evt = $this->createTransportChangeEvent($transport); $plugin->beforeTransportStarted($evt); } public function testPluginCanBindToSpecificTransport() { - $connection = $this->_createConnection(); + $connection = $this->createConnection(); $connection->expects($this->once()) ->method('connect'); - $smtp = $this->_createTransport(); + $smtp = $this->createTransport(); - $plugin = $this->_createPlugin('pop.host.tld', 110); + $plugin = $this->createPlugin('pop.host.tld', 110); $plugin->setConnection($connection); $plugin->bindSmtp($smtp); - $evt = $this->_createTransportChangeEvent($smtp); + $evt = $this->createTransportChangeEvent($smtp); $plugin->beforeTransportStarted($evt); } - private function _createTransport() + private function createTransport() { return $this->getMockBuilder('Swift_Transport')->getMock(); } - private function _createTransportChangeEvent($transport) + private function createTransportChangeEvent($transport) { $evt = $this->getMockBuilder('Swift_Events_TransportChangeEvent') ->disableOriginalConstructor() @@ -89,12 +89,12 @@ private function _createTransportChangeEvent($transport) return $evt; } - public function _createConnection() + public function createConnection() { return $this->getMockBuilder('Swift_Plugins_Pop_Pop3Connection')->getMock(); } - public function _createPlugin($host, $port, $crypto = null) + public function createPlugin($host, $port, $crypto = null) { return new Swift_Plugins_PopBeforeSmtpPlugin($host, $port, $crypto); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/RedirectingPluginTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/RedirectingPluginTest.php index bfd5669..0ad6386 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/RedirectingPluginTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/RedirectingPluginTest.php @@ -1,6 +1,6 @@ setSubject('...') - ->setFrom(array('john@example.com' => 'John Doe')) - ->setTo($to = array( + ->setFrom(['john@example.com' => 'John Doe']) + ->setTo($to = [ 'fabien-to@example.com' => 'Fabien (To)', 'chris-to@example.com' => 'Chris (To)', - )) - ->setCc($cc = array( + ]) + ->setCc($cc = [ 'fabien-cc@example.com' => 'Fabien (Cc)', 'chris-cc@example.com' => 'Chris (Cc)', - )) - ->setBcc($bcc = array( + ]) + ->setBcc($bcc = [ 'fabien-bcc@example.com' => 'Fabien (Bcc)', 'chris-bcc@example.com' => 'Chris (Bcc)', - )) + ]) ->setBody('...') ; $plugin = new Swift_Plugins_RedirectingPlugin('god@example.com'); - $evt = $this->_createSendEvent($message); + $evt = $this->createSendEvent($message); $plugin->beforeSendPerformed($evt); - $this->assertEquals($message->getTo(), array('god@example.com' => '')); - $this->assertEquals($message->getCc(), array()); - $this->assertEquals($message->getBcc(), array()); + $this->assertEquals($message->getTo(), ['god@example.com' => '']); + $this->assertEquals($message->getCc(), []); + $this->assertEquals($message->getBcc(), []); $plugin->sendPerformed($evt); @@ -49,75 +49,75 @@ public function testPluginChangesRecipients() public function testPluginRespectsUnsetToList() { - $message = Swift_Message::newInstance() + $message = (new Swift_Message()) ->setSubject('...') - ->setFrom(array('john@example.com' => 'John Doe')) - ->setCc($cc = array( + ->setFrom(['john@example.com' => 'John Doe']) + ->setCc($cc = [ 'fabien-cc@example.com' => 'Fabien (Cc)', 'chris-cc@example.com' => 'Chris (Cc)', - )) - ->setBcc($bcc = array( + ]) + ->setBcc($bcc = [ 'fabien-bcc@example.com' => 'Fabien (Bcc)', 'chris-bcc@example.com' => 'Chris (Bcc)', - )) + ]) ->setBody('...') ; $plugin = new Swift_Plugins_RedirectingPlugin('god@example.com'); - $evt = $this->_createSendEvent($message); + $evt = $this->createSendEvent($message); $plugin->beforeSendPerformed($evt); - $this->assertEquals($message->getTo(), array('god@example.com' => '')); - $this->assertEquals($message->getCc(), array()); - $this->assertEquals($message->getBcc(), array()); + $this->assertEquals($message->getTo(), ['god@example.com' => '']); + $this->assertEquals($message->getCc(), []); + $this->assertEquals($message->getBcc(), []); $plugin->sendPerformed($evt); - $this->assertEquals($message->getTo(), array()); + $this->assertEquals($message->getTo(), []); $this->assertEquals($message->getCc(), $cc); $this->assertEquals($message->getBcc(), $bcc); } public function testPluginRespectsAWhitelistOfPatterns() { - $message = Swift_Message::newInstance() + $message = (new Swift_Message()) ->setSubject('...') - ->setFrom(array('john@example.com' => 'John Doe')) - ->setTo($to = array( + ->setFrom(['john@example.com' => 'John Doe']) + ->setTo($to = [ 'fabien-to@example.com' => 'Fabien (To)', 'chris-to@example.com' => 'Chris (To)', 'lars-to@internal.com' => 'Lars (To)', - )) - ->setCc($cc = array( + ]) + ->setCc($cc = [ 'fabien-cc@example.com' => 'Fabien (Cc)', 'chris-cc@example.com' => 'Chris (Cc)', 'lars-cc@internal.org' => 'Lars (Cc)', - )) - ->setBcc($bcc = array( + ]) + ->setBcc($bcc = [ 'fabien-bcc@example.com' => 'Fabien (Bcc)', 'chris-bcc@example.com' => 'Chris (Bcc)', 'john-bcc@example.org' => 'John (Bcc)', - )) + ]) ->setBody('...') ; $recipient = 'god@example.com'; - $patterns = array('/^.*@internal.[a-z]+$/', '/^john-.*$/'); + $patterns = ['/^.*@internal.[a-z]+$/', '/^john-.*$/']; $plugin = new Swift_Plugins_RedirectingPlugin($recipient, $patterns); $this->assertEquals($recipient, $plugin->getRecipient()); $this->assertEquals($plugin->getWhitelist(), $patterns); - $evt = $this->_createSendEvent($message); + $evt = $this->createSendEvent($message); $plugin->beforeSendPerformed($evt); - $this->assertEquals($message->getTo(), array('lars-to@internal.com' => 'Lars (To)', 'god@example.com' => null)); - $this->assertEquals($message->getCc(), array('lars-cc@internal.org' => 'Lars (Cc)')); - $this->assertEquals($message->getBcc(), array('john-bcc@example.org' => 'John (Bcc)')); + $this->assertEquals($message->getTo(), ['lars-to@internal.com' => 'Lars (To)', 'god@example.com' => null]); + $this->assertEquals($message->getCc(), ['lars-cc@internal.org' => 'Lars (Cc)']); + $this->assertEquals($message->getBcc(), ['john-bcc@example.org' => 'John (Bcc)']); $plugin->sendPerformed($evt); @@ -128,48 +128,48 @@ public function testPluginRespectsAWhitelistOfPatterns() public function testArrayOfRecipientsCanBeExplicitlyDefined() { - $message = Swift_Message::newInstance() + $message = (new Swift_Message()) ->setSubject('...') - ->setFrom(array('john@example.com' => 'John Doe')) - ->setTo(array( + ->setFrom(['john@example.com' => 'John Doe']) + ->setTo([ 'fabien@example.com' => 'Fabien', 'chris@example.com' => 'Chris (To)', 'lars-to@internal.com' => 'Lars (To)', - )) - ->setCc(array( + ]) + ->setCc([ 'fabien@example.com' => 'Fabien', 'chris-cc@example.com' => 'Chris (Cc)', 'lars-cc@internal.org' => 'Lars (Cc)', - )) - ->setBcc(array( + ]) + ->setBcc([ 'fabien@example.com' => 'Fabien', 'chris-bcc@example.com' => 'Chris (Bcc)', 'john-bcc@example.org' => 'John (Bcc)', - )) + ]) ->setBody('...') ; - $recipients = array('god@example.com', 'fabien@example.com'); - $patterns = array('/^.*@internal.[a-z]+$/'); + $recipients = ['god@example.com', 'fabien@example.com']; + $patterns = ['/^.*@internal.[a-z]+$/']; $plugin = new Swift_Plugins_RedirectingPlugin($recipients, $patterns); - $evt = $this->_createSendEvent($message); + $evt = $this->createSendEvent($message); $plugin->beforeSendPerformed($evt); $this->assertEquals( $message->getTo(), - array('fabien@example.com' => 'Fabien', 'lars-to@internal.com' => 'Lars (To)', 'god@example.com' => null) + ['fabien@example.com' => 'Fabien', 'lars-to@internal.com' => 'Lars (To)', 'god@example.com' => null] ); $this->assertEquals( $message->getCc(), - array('fabien@example.com' => 'Fabien', 'lars-cc@internal.org' => 'Lars (Cc)') + ['fabien@example.com' => 'Fabien', 'lars-cc@internal.org' => 'Lars (Cc)'] ); - $this->assertEquals($message->getBcc(), array('fabien@example.com' => 'Fabien')); + $this->assertEquals($message->getBcc(), ['fabien@example.com' => 'Fabien']); } - private function _createSendEvent(Swift_Mime_Message $message) + private function createSendEvent(Swift_Mime_SimpleMessage $message) { $evt = $this->getMockBuilder('Swift_Events_SendEvent') ->disableOriginalConstructor() diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ReporterPluginTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ReporterPluginTest.php index 5ba5d5c..19238f8 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ReporterPluginTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ReporterPluginTest.php @@ -4,13 +4,13 @@ class Swift_Plugins_ReporterPluginTest extends \SwiftMailerTestCase { public function testReportingPasses() { - $message = $this->_createMessage(); - $evt = $this->_createSendEvent(); - $reporter = $this->_createReporter(); + $message = $this->createMessage(); + $evt = $this->createSendEvent(); + $reporter = $this->createReporter(); - $message->shouldReceive('getTo')->zeroOrMoreTimes()->andReturn(array('foo@bar.tld' => 'Foo')); + $message->shouldReceive('getTo')->zeroOrMoreTimes()->andReturn(['foo@bar.tld' => 'Foo']); $evt->shouldReceive('getMessage')->zeroOrMoreTimes()->andReturn($message); - $evt->shouldReceive('getFailedRecipients')->zeroOrMoreTimes()->andReturn(array()); + $evt->shouldReceive('getFailedRecipients')->zeroOrMoreTimes()->andReturn([]); $reporter->shouldReceive('notify')->once()->with($message, 'foo@bar.tld', Swift_Plugins_Reporter::RESULT_PASS); $plugin = new Swift_Plugins_ReporterPlugin($reporter); @@ -19,13 +19,13 @@ public function testReportingPasses() public function testReportingFailedTo() { - $message = $this->_createMessage(); - $evt = $this->_createSendEvent(); - $reporter = $this->_createReporter(); + $message = $this->createMessage(); + $evt = $this->createSendEvent(); + $reporter = $this->createReporter(); - $message->shouldReceive('getTo')->zeroOrMoreTimes()->andReturn(array('foo@bar.tld' => 'Foo', 'zip@button' => 'Zip')); + $message->shouldReceive('getTo')->zeroOrMoreTimes()->andReturn(['foo@bar.tld' => 'Foo', 'zip@button' => 'Zip']); $evt->shouldReceive('getMessage')->zeroOrMoreTimes()->andReturn($message); - $evt->shouldReceive('getFailedRecipients')->zeroOrMoreTimes()->andReturn(array('zip@button')); + $evt->shouldReceive('getFailedRecipients')->zeroOrMoreTimes()->andReturn(['zip@button']); $reporter->shouldReceive('notify')->once()->with($message, 'foo@bar.tld', Swift_Plugins_Reporter::RESULT_PASS); $reporter->shouldReceive('notify')->once()->with($message, 'zip@button', Swift_Plugins_Reporter::RESULT_FAIL); @@ -35,14 +35,14 @@ public function testReportingFailedTo() public function testReportingFailedCc() { - $message = $this->_createMessage(); - $evt = $this->_createSendEvent(); - $reporter = $this->_createReporter(); + $message = $this->createMessage(); + $evt = $this->createSendEvent(); + $reporter = $this->createReporter(); - $message->shouldReceive('getTo')->zeroOrMoreTimes()->andReturn(array('foo@bar.tld' => 'Foo')); - $message->shouldReceive('getCc')->zeroOrMoreTimes()->andReturn(array('zip@button' => 'Zip', 'test@test.com' => 'Test')); + $message->shouldReceive('getTo')->zeroOrMoreTimes()->andReturn(['foo@bar.tld' => 'Foo']); + $message->shouldReceive('getCc')->zeroOrMoreTimes()->andReturn(['zip@button' => 'Zip', 'test@test.com' => 'Test']); $evt->shouldReceive('getMessage')->zeroOrMoreTimes()->andReturn($message); - $evt->shouldReceive('getFailedRecipients')->zeroOrMoreTimes()->andReturn(array('zip@button')); + $evt->shouldReceive('getFailedRecipients')->zeroOrMoreTimes()->andReturn(['zip@button']); $reporter->shouldReceive('notify')->once()->with($message, 'foo@bar.tld', Swift_Plugins_Reporter::RESULT_PASS); $reporter->shouldReceive('notify')->once()->with($message, 'zip@button', Swift_Plugins_Reporter::RESULT_FAIL); $reporter->shouldReceive('notify')->once()->with($message, 'test@test.com', Swift_Plugins_Reporter::RESULT_PASS); @@ -53,14 +53,14 @@ public function testReportingFailedCc() public function testReportingFailedBcc() { - $message = $this->_createMessage(); - $evt = $this->_createSendEvent(); - $reporter = $this->_createReporter(); + $message = $this->createMessage(); + $evt = $this->createSendEvent(); + $reporter = $this->createReporter(); - $message->shouldReceive('getTo')->zeroOrMoreTimes()->andReturn(array('foo@bar.tld' => 'Foo')); - $message->shouldReceive('getBcc')->zeroOrMoreTimes()->andReturn(array('zip@button' => 'Zip', 'test@test.com' => 'Test')); + $message->shouldReceive('getTo')->zeroOrMoreTimes()->andReturn(['foo@bar.tld' => 'Foo']); + $message->shouldReceive('getBcc')->zeroOrMoreTimes()->andReturn(['zip@button' => 'Zip', 'test@test.com' => 'Test']); $evt->shouldReceive('getMessage')->zeroOrMoreTimes()->andReturn($message); - $evt->shouldReceive('getFailedRecipients')->zeroOrMoreTimes()->andReturn(array('zip@button')); + $evt->shouldReceive('getFailedRecipients')->zeroOrMoreTimes()->andReturn(['zip@button']); $reporter->shouldReceive('notify')->once()->with($message, 'foo@bar.tld', Swift_Plugins_Reporter::RESULT_PASS); $reporter->shouldReceive('notify')->once()->with($message, 'zip@button', Swift_Plugins_Reporter::RESULT_FAIL); $reporter->shouldReceive('notify')->once()->with($message, 'test@test.com', Swift_Plugins_Reporter::RESULT_PASS); @@ -69,17 +69,17 @@ public function testReportingFailedBcc() $plugin->sendPerformed($evt); } - private function _createMessage() + private function createMessage() { - return $this->getMockery('Swift_Mime_Message')->shouldIgnoreMissing(); + return $this->getMockery('Swift_Mime_SimpleMessage')->shouldIgnoreMissing(); } - private function _createSendEvent() + private function createSendEvent() { return $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); } - private function _createReporter() + private function createReporter() { return $this->getMockery('Swift_Plugins_Reporter')->shouldIgnoreMissing(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HitReporterTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HitReporterTest.php index 20aae57..d5a1c9c 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HitReporterTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HitReporterTest.php @@ -1,64 +1,64 @@ _hitReporter = new Swift_Plugins_Reporters_HitReporter(); - $this->_message = $this->getMockBuilder('Swift_Mime_Message')->getMock(); + $this->hitReporter = new Swift_Plugins_Reporters_HitReporter(); + $this->message = $this->getMockBuilder('Swift_Mime_SimpleMessage')->disableOriginalConstructor()->getMock(); } public function testReportingFail() { - $this->_hitReporter->notify($this->_message, 'foo@bar.tld', + $this->hitReporter->notify($this->message, 'foo@bar.tld', Swift_Plugins_Reporter::RESULT_FAIL ); - $this->assertEquals(array('foo@bar.tld'), - $this->_hitReporter->getFailedRecipients() + $this->assertEquals(['foo@bar.tld'], + $this->hitReporter->getFailedRecipients() ); } public function testMultipleReports() { - $this->_hitReporter->notify($this->_message, 'foo@bar.tld', + $this->hitReporter->notify($this->message, 'foo@bar.tld', Swift_Plugins_Reporter::RESULT_FAIL ); - $this->_hitReporter->notify($this->_message, 'zip@button', + $this->hitReporter->notify($this->message, 'zip@button', Swift_Plugins_Reporter::RESULT_FAIL ); - $this->assertEquals(array('foo@bar.tld', 'zip@button'), - $this->_hitReporter->getFailedRecipients() + $this->assertEquals(['foo@bar.tld', 'zip@button'], + $this->hitReporter->getFailedRecipients() ); } public function testReportingPassIsIgnored() { - $this->_hitReporter->notify($this->_message, 'foo@bar.tld', + $this->hitReporter->notify($this->message, 'foo@bar.tld', Swift_Plugins_Reporter::RESULT_FAIL ); - $this->_hitReporter->notify($this->_message, 'zip@button', + $this->hitReporter->notify($this->message, 'zip@button', Swift_Plugins_Reporter::RESULT_PASS ); - $this->assertEquals(array('foo@bar.tld'), - $this->_hitReporter->getFailedRecipients() + $this->assertEquals(['foo@bar.tld'], + $this->hitReporter->getFailedRecipients() ); } public function testBufferCanBeCleared() { - $this->_hitReporter->notify($this->_message, 'foo@bar.tld', + $this->hitReporter->notify($this->message, 'foo@bar.tld', Swift_Plugins_Reporter::RESULT_FAIL ); - $this->_hitReporter->notify($this->_message, 'zip@button', + $this->hitReporter->notify($this->message, 'zip@button', Swift_Plugins_Reporter::RESULT_FAIL ); - $this->assertEquals(array('foo@bar.tld', 'zip@button'), - $this->_hitReporter->getFailedRecipients() + $this->assertEquals(['foo@bar.tld', 'zip@button'], + $this->hitReporter->getFailedRecipients() ); - $this->_hitReporter->clear(); - $this->assertEquals(array(), $this->_hitReporter->getFailedRecipients()); + $this->hitReporter->clear(); + $this->assertEquals([], $this->hitReporter->getFailedRecipients()); } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HtmlReporterTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HtmlReporterTest.php index fb0bc97..6b86cfe 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HtmlReporterTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/Reporters/HtmlReporterTest.php @@ -1,20 +1,20 @@ _html = new Swift_Plugins_Reporters_HtmlReporter(); - $this->_message = $this->getMockBuilder('Swift_Mime_Message')->getMock(); + $this->html = new Swift_Plugins_Reporters_HtmlReporter(); + $this->message = $this->getMockBuilder('Swift_Mime_SimpleMessage')->disableOriginalConstructor()->getMock(); } public function testReportingPass() { ob_start(); - $this->_html->notify($this->_message, 'foo@bar.tld', + $this->html->notify($this->message, 'foo@bar.tld', Swift_Plugins_Reporter::RESULT_PASS ); $html = ob_get_clean(); @@ -26,7 +26,7 @@ public function testReportingPass() public function testReportingFail() { ob_start(); - $this->_html->notify($this->_message, 'zip@button', + $this->html->notify($this->message, 'zip@button', Swift_Plugins_Reporter::RESULT_FAIL ); $html = ob_get_clean(); @@ -38,10 +38,10 @@ public function testReportingFail() public function testMultipleReports() { ob_start(); - $this->_html->notify($this->_message, 'foo@bar.tld', + $this->html->notify($this->message, 'foo@bar.tld', Swift_Plugins_Reporter::RESULT_PASS ); - $this->_html->notify($this->_message, 'zip@button', + $this->html->notify($this->message, 'zip@button', Swift_Plugins_Reporter::RESULT_FAIL ); $html = ob_get_clean(); diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ThrottlerPluginTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ThrottlerPluginTest.php index 309f506..e35dcc8 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ThrottlerPluginTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Plugins/ThrottlerPluginTest.php @@ -4,8 +4,8 @@ class Swift_Plugins_ThrottlerPluginTest extends \SwiftMailerTestCase { public function testBytesPerMinuteThrottling() { - $sleeper = $this->_createSleeper(); - $timer = $this->_createTimer(); + $sleeper = $this->createSleeper(); + $timer = $this->createTimer(); //10MB/min $plugin = new Swift_Plugins_ThrottlerPlugin( @@ -25,9 +25,9 @@ public function testBytesPerMinuteThrottling() // .: (10,000,000/100,000)/60 emails per second = 1.667 emais/sec - $message = $this->_createMessageWithByteCount(100000); //100KB + $message = $this->createMessageWithByteCount(100000); //100KB - $evt = $this->_createSendEvent($message); + $evt = $this->createSendEvent($message); for ($i = 0; $i < 5; ++$i) { $plugin->beforeSendPerformed($evt); @@ -37,8 +37,8 @@ public function testBytesPerMinuteThrottling() public function testMessagesPerMinuteThrottling() { - $sleeper = $this->_createSleeper(); - $timer = $this->_createTimer(); + $sleeper = $this->createSleeper(); + $timer = $this->createTimer(); //60/min $plugin = new Swift_Plugins_ThrottlerPlugin( @@ -56,9 +56,9 @@ public function testMessagesPerMinuteThrottling() //60 messages per minute //1 message per second - $message = $this->_createMessageWithByteCount(10); + $message = $this->createMessageWithByteCount(10); - $evt = $this->_createSendEvent($message); + $evt = $this->createSendEvent($message); for ($i = 0; $i < 5; ++$i) { $plugin->beforeSendPerformed($evt); @@ -66,19 +66,19 @@ public function testMessagesPerMinuteThrottling() } } - private function _createSleeper() + private function createSleeper() { return $this->getMockery('Swift_Plugins_Sleeper'); } - private function _createTimer() + private function createTimer() { return $this->getMockery('Swift_Plugins_Timer'); } - private function _createMessageWithByteCount($bytes) + private function createMessageWithByteCount($bytes) { - $msg = $this->getMockery('Swift_Mime_Message'); + $msg = $this->getMockery('Swift_Mime_SimpleMessage'); $msg->shouldReceive('toByteStream') ->zeroOrMoreTimes() ->andReturnUsing(function ($is) use ($bytes) { @@ -90,7 +90,7 @@ private function _createMessageWithByteCount($bytes) return $msg; } - private function _createSendEvent($message) + private function createSendEvent($message) { $evt = $this->getMockery('Swift_Events_SendEvent'); $evt->shouldReceive('getMessage') diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/DKIMSignerTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/DKIMSignerTest.php index 5eda223..bcc41cf 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/DKIMSignerTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/DKIMSignerTest.php @@ -1,17 +1,12 @@ markTestSkipped('skipping because of https://bugs.php.net/bug.php?id=61421'); - } - } - public function testBasicSigningHeaderManipulation() { - $headers = $this->_createHeaders(); + $headers = $this->createHeaders(); $messageContent = 'Hello World'; $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector'); /* @var $signer Swift_Signers_HeaderSigner */ @@ -30,13 +25,13 @@ public function testBasicSigningHeaderManipulation() // SHA1 Signing public function testSigningSHA1() { - $headerSet = $this->_createHeaderSet(); + $headerSet = $this->createHeaderSet(); $messageContent = 'Hello World'; $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector'); $signer->setHashAlgorithm('rsa-sha1'); $signer->setSignatureTimestamp('1299879181'); $altered = $signer->getAlteredHeaders(); - $this->assertEquals(array('DKIM-Signature'), $altered); + $this->assertEquals(['DKIM-Signature'], $altered); $signer->reset(); $signer->setHeaders($headerSet); $this->assertFalse($headerSet->has('DKIM-Signature')); @@ -53,13 +48,13 @@ public function testSigningSHA1() // SHA256 Signing public function testSigning256() { - $headerSet = $this->_createHeaderSet(); + $headerSet = $this->createHeaderSet(); $messageContent = 'Hello World'; $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector'); $signer->setHashAlgorithm('rsa-sha256'); $signer->setSignatureTimestamp('1299879181'); $altered = $signer->getAlteredHeaders(); - $this->assertEquals(array('DKIM-Signature'), $altered); + $this->assertEquals(['DKIM-Signature'], $altered); $signer->reset(); $signer->setHeaders($headerSet); $this->assertFalse($headerSet->has('DKIM-Signature')); @@ -76,7 +71,7 @@ public function testSigning256() // Relaxed/Relaxed Hash Signing public function testSigningRelaxedRelaxed256() { - $headerSet = $this->_createHeaderSet(); + $headerSet = $this->createHeaderSet(); $messageContent = 'Hello World'; $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector'); $signer->setHashAlgorithm('rsa-sha256'); @@ -84,7 +79,7 @@ public function testSigningRelaxedRelaxed256() $signer->setBodyCanon('relaxed'); $signer->setHeaderCanon('relaxed'); $altered = $signer->getAlteredHeaders(); - $this->assertEquals(array('DKIM-Signature'), $altered); + $this->assertEquals(['DKIM-Signature'], $altered); $signer->reset(); $signer->setHeaders($headerSet); $this->assertFalse($headerSet->has('DKIM-Signature')); @@ -101,14 +96,14 @@ public function testSigningRelaxedRelaxed256() // Relaxed/Simple Hash Signing public function testSigningRelaxedSimple256() { - $headerSet = $this->_createHeaderSet(); + $headerSet = $this->createHeaderSet(); $messageContent = 'Hello World'; $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector'); $signer->setHashAlgorithm('rsa-sha256'); $signer->setSignatureTimestamp('1299879181'); $signer->setHeaderCanon('relaxed'); $altered = $signer->getAlteredHeaders(); - $this->assertEquals(array('DKIM-Signature'), $altered); + $this->assertEquals(['DKIM-Signature'], $altered); $signer->reset(); $signer->setHeaders($headerSet); $this->assertFalse($headerSet->has('DKIM-Signature')); @@ -125,14 +120,14 @@ public function testSigningRelaxedSimple256() // Simple/Relaxed Hash Signing public function testSigningSimpleRelaxed256() { - $headerSet = $this->_createHeaderSet(); + $headerSet = $this->createHeaderSet(); $messageContent = 'Hello World'; $signer = new Swift_Signers_DKIMSigner(file_get_contents(dirname(dirname(dirname(__DIR__))).'/_samples/dkim/dkim.test.priv'), 'dummy.nxdomain.be', 'dummySelector'); $signer->setHashAlgorithm('rsa-sha256'); $signer->setSignatureTimestamp('1299879181'); $signer->setBodyCanon('relaxed'); $altered = $signer->getAlteredHeaders(); - $this->assertEquals(array('DKIM-Signature'), $altered); + $this->assertEquals(['DKIM-Signature'], $altered); $signer->reset(); $signer->setHeaders($headerSet); $this->assertFalse($headerSet->has('DKIM-Signature')); @@ -146,16 +141,16 @@ public function testSigningSimpleRelaxed256() $this->assertEquals($sig->getValue(), 'v=1; a=rsa-sha256; bh=f+W+hu8dIhf2VAni89o8lF6WKTXi7nViA4RrMdpD5/U=; d=dummy.nxdomain.be; h=; i=@dummy.nxdomain.be; s=dummySelector; c=simple/relaxed; t=1299879181; b=M5eomH/zamyzix9kOes+6YLzQZxuJdBP4x3nP9zF2N26eMLG2/cBKbnNyqiOTDhJdYfWPbLIa 1CWnjST0j5p4CpeOkGYuiE+M4TWEZwhRmRWootlPO3Ii6XpbBJKFk1o9zviS7OmXblUUE4aqb yRSIMDhtLdCK5GlaCneFLN7RQ='); } - private function _createHeaderSet() + private function createHeaderSet() { $cache = new Swift_KeyCache_ArrayKeyCache(new Swift_KeyCache_SimpleKeyCacheInputStream()); $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); $contentEncoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder(); - $headerEncoder = new Swift_Mime_HeaderEncoder_QpHeaderEncoder(new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8')); - $paramEncoder = new Swift_Encoder_Rfc2231Encoder(new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8')); - $grammar = new Swift_Mime_Grammar(); - $headers = new Swift_Mime_SimpleHeaderSet(new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $grammar)); + $headerEncoder = new Swift_Mime_HeaderEncoder_QpHeaderEncoder(new Swift_CharacterStream_CharacterStream($factory, 'utf-8')); + $paramEncoder = new Swift_Encoder_Rfc2231Encoder(new Swift_CharacterStream_CharacterStream($factory, 'utf-8')); + $emailValidator = new EmailValidator(); + $headers = new Swift_Mime_SimpleHeaderSet(new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $emailValidator)); return $headers; } @@ -163,22 +158,22 @@ private function _createHeaderSet() /** * @return Swift_Mime_Headers */ - private function _createHeaders() + private function createHeaders() { $x = 0; $cache = new Swift_KeyCache_ArrayKeyCache(new Swift_KeyCache_SimpleKeyCacheInputStream()); $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory(); $contentEncoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder(); - $headerEncoder = new Swift_Mime_HeaderEncoder_QpHeaderEncoder(new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8')); - $paramEncoder = new Swift_Encoder_Rfc2231Encoder(new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8')); - $grammar = new Swift_Mime_Grammar(); - $headerFactory = new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $grammar); - $headers = $this->getMockery('Swift_Mime_HeaderSet'); + $headerEncoder = new Swift_Mime_HeaderEncoder_QpHeaderEncoder(new Swift_CharacterStream_CharacterStream($factory, 'utf-8')); + $paramEncoder = new Swift_Encoder_Rfc2231Encoder(new Swift_CharacterStream_CharacterStream($factory, 'utf-8')); + $emailValidator = new EmailValidator(); + $headerFactory = new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $emailValidator); + $headers = $this->getMockery('Swift_Mime_SimpleHeaderSet'); $headers->shouldReceive('listAll') ->zeroOrMoreTimes() - ->andReturn(array('From', 'To', 'Date', 'Subject')); + ->andReturn(['From', 'To', 'Date', 'Subject']); $headers->shouldReceive('has') ->zeroOrMoreTimes() ->with('From') @@ -186,7 +181,7 @@ private function _createHeaders() $headers->shouldReceive('getAll') ->zeroOrMoreTimes() ->with('From') - ->andReturn(array($headerFactory->createMailboxHeader('From', 'test@test.test'))); + ->andReturn([$headerFactory->createMailboxHeader('From', 'test@test.test')]); $headers->shouldReceive('has') ->zeroOrMoreTimes() ->with('To') @@ -194,7 +189,7 @@ private function _createHeaders() $headers->shouldReceive('getAll') ->zeroOrMoreTimes() ->with('To') - ->andReturn(array($headerFactory->createMailboxHeader('To', 'test@test.test'))); + ->andReturn([$headerFactory->createMailboxHeader('To', 'test@test.test')]); $headers->shouldReceive('has') ->zeroOrMoreTimes() ->with('Date') @@ -202,7 +197,7 @@ private function _createHeaders() $headers->shouldReceive('getAll') ->zeroOrMoreTimes() ->with('Date') - ->andReturn(array($headerFactory->createTextHeader('Date', 'Fri, 11 Mar 2011 20:56:12 +0000 (GMT)'))); + ->andReturn([$headerFactory->createTextHeader('Date', 'Fri, 11 Mar 2011 20:56:12 +0000 (GMT)')]); $headers->shouldReceive('has') ->zeroOrMoreTimes() ->with('Subject') @@ -210,7 +205,7 @@ private function _createHeaders() $headers->shouldReceive('getAll') ->zeroOrMoreTimes() ->with('Subject') - ->andReturn(array($headerFactory->createTextHeader('Subject', 'Foo Bar Text Message'))); + ->andReturn([$headerFactory->createTextHeader('Subject', 'Foo Bar Text Message')]); $headers->shouldReceive('addTextHeader') ->zeroOrMoreTimes() ->with('DKIM-Signature', \Mockery::any()) @@ -218,7 +213,7 @@ private function _createHeaders() $headers->shouldReceive('getAll') ->zeroOrMoreTimes() ->with('DKIM-Signature') - ->andReturn(array($headerFactory->createTextHeader('DKIM-Signature', 'Foo Bar Text Message'))); + ->andReturn([$headerFactory->createTextHeader('DKIM-Signature', 'Foo Bar Text Message')]); return $headers; } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/SMimeSignerTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/SMimeSignerTest.php index 5069c1f..932e486 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/SMimeSignerTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Signers/SMimeSignerTest.php @@ -1,6 +1,6 @@ samplesDir = str_replace('\\', '/', realpath(__DIR__.'/../../../_samples/')).'/'; } - public function testUnSingedMessage() + public function testUnSignedMessage() { - $message = Swift_SignedMessage::newInstance('Wonderful Subject') - ->setFrom(array('john@doe.com' => 'John Doe')) - ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name')) + $message = (new Swift_Message('Wonderful Subject')) + ->setFrom(['john@doe.com' => 'John Doe']) + ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) ->setBody('Here is the message itself'); $this->assertEquals('Here is the message itself', $message->getBody()); } - public function testSingedMessage() + public function testSignedMessage() { - $message = Swift_SignedMessage::newInstance('Wonderful Subject') - ->setFrom(array('john@doe.com' => 'John Doe')) - ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name')) + $message = (new Swift_Message('Wonderful Subject')) + ->setFrom(['john@doe.com' => 'John Doe']) + ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) ->setBody('Here is the message itself'); $signer = new Swift_Signers_SMimeSigner(); @@ -70,11 +70,66 @@ public function testSingedMessage() unset($messageStream); } - public function testSingedMessageExtraCerts() + public function testSignedMessageWithFullyWrappedMessage() { - $message = Swift_SignedMessage::newInstance('Wonderful Subject') - ->setFrom(array('john@doe.com' => 'John Doe')) - ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name')) + $message = (new Swift_Message('Middle-out compression secrets')) + ->setFrom(['richard@piedpiper.com' => 'Richard Hendricks']) + ->setTo(['jared@piedpiper.com' => 'Jared Dunn']) + ->setBody('Here goes the entire algorithm...'); + + $signer = new Swift_Signers_SMimeSigner(); + $signer->setSignCertificate($this->samplesDir.'smime/sign.crt', $this->samplesDir.'smime/sign.key'); + + // Tell the signer to wrap the full MIME message + $signer->setWrapFullMessage(true); + $message->attachSigner($signer); + + $messageStream = $this->newFilteredStream(); + $message->toByteStream($messageStream); + $messageStream->commit(); + + $entityString = $messageStream->getContent(); + $headers = self::getHeadersOfMessage($entityString); + + if (!($boundary = $this->getBoundary($headers['content-type']))) { + return false; + } + + $expectedBody = << +Date: .* +Subject: Middle-out compression secrets +From: Richard Hendricks +To: Jared Dunn +MIME-Version: 1.0 +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: quoted-printable + +Here goes the entire algorithm... +--$boundary +Content-Type: application/(x\-)?pkcs7-signature; name="smime\.p7s" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="smime\.p7s" + +(?:^[a-zA-Z0-9\/\\r\\n+]*={0,2}) + +--$boundary-- +OEL; + $this->assertValidVerify($expectedBody, $messageStream); + unset($messageStream); + } + + public function testSignedMessageExtraCerts() + { + $message = (new Swift_Message('Wonderful Subject')) + ->setFrom(['john@doe.com' => 'John Doe']) + ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) ->setBody('Here is the message itself'); $signer = new Swift_Signers_SMimeSigner(); @@ -113,11 +168,11 @@ public function testSingedMessageExtraCerts() unset($messageStream); } - public function testSingedMessageBinary() + public function testSignedMessageBinary() { - $message = Swift_SignedMessage::newInstance('Wonderful Subject') - ->setFrom(array('john@doe.com' => 'John Doe')) - ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name')) + $message = (new Swift_Message('Wonderful Subject')) + ->setFrom(['john@doe.com' => 'John Doe']) + ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) ->setBody('Here is the message itself'); $signer = new Swift_Signers_SMimeSigner(); @@ -148,11 +203,11 @@ public function testSingedMessageBinary() unset($messageStreamClean, $messageStream); } - public function testSingedMessageWithAttachments() + public function testSignedMessageWithAttachments() { - $message = Swift_SignedMessage::newInstance('Wonderful Subject') - ->setFrom(array('john@doe.com' => 'John Doe')) - ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name')) + $message = (new Swift_Message('Wonderful Subject')) + ->setFrom(['john@doe.com' => 'John Doe']) + ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) ->setBody('Here is the message itself'); $message->attach(Swift_Attachment::fromPath($this->samplesDir.'/files/textfile.zip')); @@ -214,9 +269,9 @@ public function testSingedMessageWithAttachments() public function testEncryptedMessage() { - $message = Swift_SignedMessage::newInstance('Wonderful Subject') - ->setFrom(array('john@doe.com' => 'John Doe')) - ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name')) + $message = (new Swift_Message('Wonderful Subject')) + ->setFrom(['john@doe.com' => 'John Doe']) + ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) ->setBody('Here is the message itself'); $originalMessage = $this->cleanMessage($message->toString()); @@ -242,7 +297,7 @@ public function testEncryptedMessage() $decryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - if (!openssl_pkcs7_decrypt($messageStream->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt.crt', array('file://'.$this->samplesDir.'smime/encrypt.key', 'swift'))) { + if (!openssl_pkcs7_decrypt($messageStream->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt.crt', ['file://'.$this->samplesDir.'smime/encrypt.key', 'swift'])) { $this->fail(sprintf('Decrypt of the message failed. Internal error "%s".', openssl_error_string())); } @@ -250,17 +305,62 @@ public function testEncryptedMessage() unset($decryptedMessageStream, $messageStream); } + public function testEncryptedMessageWithFullyWrappedMessage() + { + $message = (new Swift_Message('Middle-out compression secrets')) + ->setFrom(['richard@piedpiper.com' => 'Richard Hendricks']) + ->setTo(['jared@piedpiper.com' => 'Jared Dunn']) + ->setBody('Here goes the entire algorithm...'); + + $originalMessage = $message->toString(); + + $signer = new Swift_Signers_SMimeSigner(); + $signer->setEncryptCertificate($this->samplesDir.'smime/encrypt.crt'); + $signer->setWrapFullMessage(true); + $message->attachSigner($signer); + + $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); + $message->toByteStream($messageStream); + $messageStream->commit(); + + $entityString = $messageStream->getContent(); + $headers = self::getHeadersOfMessage($entityString); + + if (!preg_match('#^application/(x\-)?pkcs7-mime; smime-type=enveloped\-data;#', $headers['content-type'])) { + $this->fail('Content-type does not match.'); + + return false; + } + + $expectedBody = '(?:^[a-zA-Z0-9\/\\r\\n+]*={0,2})'; + + $decryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); + + if (!openssl_pkcs7_decrypt($messageStream->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt.crt', ['file://'.$this->samplesDir.'smime/encrypt.key', 'swift'])) { + $this->fail(sprintf('Decrypt of the message failed. Internal error "%s".', openssl_error_string())); + } + + $decryptedMessage = $decryptedMessageStream->getContent(); + $decryptedHeaders = self::getHeadersOfMessage($decryptedMessage); + $this->assertEquals('message/rfc822; charset=utf-8', $decryptedHeaders['content-type']); + $this->assertEquals('7bit', $decryptedHeaders['content-transfer-encoding']); + + $decryptedMessageBody = self::getBodyOfMessage($decryptedMessage); + $this->assertEquals($originalMessage, $decryptedMessageBody); + unset($decryptedMessageStream, $messageStream); + } + public function testEncryptedMessageWithMultipleCerts() { - $message = Swift_SignedMessage::newInstance('Wonderful Subject') - ->setFrom(array('john@doe.com' => 'John Doe')) - ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name')) + $message = (new Swift_Message('Wonderful Subject')) + ->setFrom(['john@doe.com' => 'John Doe']) + ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) ->setBody('Here is the message itself'); $originalMessage = $this->cleanMessage($message->toString()); $signer = new Swift_Signers_SMimeSigner(); - $signer->setEncryptCertificate(array($this->samplesDir.'smime/encrypt.crt', $this->samplesDir.'smime/encrypt2.crt')); + $signer->setEncryptCertificate([$this->samplesDir.'smime/encrypt.crt', $this->samplesDir.'smime/encrypt2.crt']); $message->attachSigner($signer); $messageStream = new Swift_ByteStream_TemporaryFileByteStream(); @@ -280,7 +380,7 @@ public function testEncryptedMessageWithMultipleCerts() $decryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - if (!openssl_pkcs7_decrypt($messageStream->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt.crt', array('file://'.$this->samplesDir.'smime/encrypt.key', 'swift'))) { + if (!openssl_pkcs7_decrypt($messageStream->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt.crt', ['file://'.$this->samplesDir.'smime/encrypt.key', 'swift'])) { $this->fail(sprintf('Decrypt of the message failed. Internal error "%s".', openssl_error_string())); } @@ -289,7 +389,7 @@ public function testEncryptedMessageWithMultipleCerts() $decryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - if (!openssl_pkcs7_decrypt($messageStream->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt2.crt', array('file://'.$this->samplesDir.'smime/encrypt2.key', 'swift'))) { + if (!openssl_pkcs7_decrypt($messageStream->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt2.crt', ['file://'.$this->samplesDir.'smime/encrypt2.key', 'swift'])) { $this->fail(sprintf('Decrypt of the message failed. Internal error "%s".', openssl_error_string())); } @@ -299,9 +399,9 @@ public function testEncryptedMessageWithMultipleCerts() public function testSignThenEncryptedMessage() { - $message = Swift_SignedMessage::newInstance('Wonderful Subject') - ->setFrom(array('john@doe.com' => 'John Doe')) - ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name')) + $message = (new Swift_Message('Wonderful Subject')) + ->setFrom(['john@doe.com' => 'John Doe']) + ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) ->setBody('Here is the message itself'); $signer = new Swift_Signers_SMimeSigner(); @@ -326,7 +426,7 @@ public function testSignThenEncryptedMessage() $decryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - if (!openssl_pkcs7_decrypt($messageStream->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt.crt', array('file://'.$this->samplesDir.'smime/encrypt.key', 'swift'))) { + if (!openssl_pkcs7_decrypt($messageStream->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt.crt', ['file://'.$this->samplesDir.'smime/encrypt.key', 'swift'])) { $this->fail(sprintf('Decrypt of the message failed. Internal error "%s".', openssl_error_string())); } @@ -364,14 +464,14 @@ public function testSignThenEncryptedMessage() public function testEncryptThenSignMessage() { - $message = Swift_SignedMessage::newInstance('Wonderful Subject') - ->setFrom(array('john@doe.com' => 'John Doe')) - ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name')) + $message = (new Swift_Message('Wonderful Subject')) + ->setFrom(['john@doe.com' => 'John Doe']) + ->setTo(['receiver@domain.org', 'other@domain.org' => 'A name']) ->setBody('Here is the message itself'); - $originalMessage = $this->cleanMessage($message->toString()); + $originalMessage = $message->toString(); - $signer = Swift_Signers_SMimeSigner::newInstance(); + $signer = new Swift_Signers_SMimeSigner(); $signer->setSignCertificate($this->samplesDir.'smime/sign.crt', $this->samplesDir.'smime/sign.key'); $signer->setEncryptCertificate($this->samplesDir.'smime/encrypt.crt'); $signer->setSignThenEncrypt(false); @@ -392,10 +492,10 @@ public function testEncryptThenSignMessage() This is an S/MIME signed message --$boundary -(?PMIME-Version: 1\.0 -Content-Disposition: attachment; filename="smime\.p7m" -Content-Type: application/(x\-)?pkcs7-mime; smime-type=enveloped-data; name="smime\.p7m" +(?PContent-Type: application/(x\-)?pkcs7-mime; smime-type=enveloped-data; + name="smime\.p7m"; charset=utf-8 Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="smime\.p7m" (?:^[a-zA-Z0-9\/\\r\\n+]*={0,2}) @@ -426,7 +526,7 @@ public function testEncryptThenSignMessage() $decryptedMessageStream = new Swift_ByteStream_TemporaryFileByteStream(); - if (!openssl_pkcs7_decrypt($messageStreamClean->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt.crt', array('file://'.$this->samplesDir.'smime/encrypt.key', 'swift'))) { + if (!openssl_pkcs7_decrypt($messageStreamClean->getPath(), $decryptedMessageStream->getPath(), 'file://'.$this->samplesDir.'smime/encrypt.crt', ['file://'.$this->samplesDir.'smime/encrypt.key', 'swift'])) { $this->fail(sprintf('Decrypt of the message failed. Internal error "%s".', openssl_error_string())); } @@ -441,13 +541,13 @@ protected function assertValidVerify($expected, Swift_ByteStream_TemporaryFileBy // File is UNIX encoded so convert them to correct line ending $expected = str_replace("\n", "\r\n", $expected); - $actual = trim(self::getBodyOfMessage($actual)); + $actual = self::getBodyOfMessage($actual); if (!$this->assertRegExp('%^'.$expected.'$\s*%m', $actual)) { return false; } $opensslOutput = new Swift_ByteStream_TemporaryFileByteStream(); - $verify = openssl_pkcs7_verify($messageStream->getPath(), null, $opensslOutput->getPath(), array($this->samplesDir.'smime/ca.crt')); + $verify = openssl_pkcs7_verify($messageStream->getPath(), null, $opensslOutput->getPath(), [$this->samplesDir.'smime/ca.crt']); if (false === $verify) { $this->fail('Verification of the message failed.'); @@ -484,14 +584,11 @@ protected function newFilteredStream() protected static function getBodyOfMessage($message) { - return substr($message, strpos($message, "\r\n\r\n")); + return trim(substr($message, strpos($message, "\r\n\r\n"))); } /** * Strips of the sender headers and Mime-Version. - * - * @param Swift_ByteStream_TemporaryFileByteStream $messageStream - * @param Swift_ByteStream_TemporaryFileByteStream $inputStream */ protected function cleanMessage($content) { @@ -499,7 +596,7 @@ protected function cleanMessage($content) $headers = self::getHeadersOfMessage($content); foreach ($headers as $headerName => $value) { - if (!in_array($headerName, array('content-type', 'content-transfer-encoding', 'content-disposition'))) { + if (!in_array($headerName, ['content-type', 'content-transfer-encoding', 'content-disposition'])) { continue; } @@ -514,7 +611,7 @@ protected function cleanMessage($content) $newContent .= "$headerName: $value\r\n"; } - return $newContent."\r\n".ltrim(self::getBodyOfMessage($content)); + return $newContent."\r\n".self::getBodyOfMessage($content); } /** @@ -529,17 +626,19 @@ protected function cleanMessage($content) protected static function getHeadersOfMessage($message) { $headersPosEnd = strpos($message, "\r\n\r\n"); - $headerData = substr($message, 0, $headersPosEnd); + $headerData = trim(substr($message, 0, $headersPosEnd)); $headerLines = explode("\r\n", $headerData); + $headers = []; - if (empty($headerLines)) { - return array(); + if (false === $headerLines) { + return $headers; } - $headers = array(); - + // Transform header lines into an associative array + $currentHeaderName = ''; foreach ($headerLines as $headerLine) { - if (ctype_space($headerLines[0]) || false === strpos($headerLine, ':')) { + // Handle headers that span multiple lines + if (false === strpos($headerLine, ':')) { $headers[$currentHeaderName] .= ' '.trim($headerLine); continue; } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/ByteArrayReplacementFilterTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/ByteArrayReplacementFilterTest.php index c85bdc1..3c81224 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/ByteArrayReplacementFilterTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/ByteArrayReplacementFilterTest.php @@ -1,20 +1,20 @@ _createFilter(array(0x61, 0x62), array(0x63, 0x64)); + $filter = $this->createFilter([0x61, 0x62], [0x63, 0x64]); $this->assertEquals( - array(0x59, 0x60, 0x63, 0x64, 0x65), - $filter->filter(array(0x59, 0x60, 0x61, 0x62, 0x65)) + [0x59, 0x60, 0x63, 0x64, 0x65], + $filter->filter([0x59, 0x60, 0x61, 0x62, 0x65]) ); } public function testShouldBufferReturnsTrueIfPartialMatchAtEndOfBuffer() { - $filter = $this->_createFilter(array(0x61, 0x62), array(0x63, 0x64)); - $this->assertTrue($filter->shouldBuffer(array(0x59, 0x60, 0x61)), + $filter = $this->createFilter([0x61, 0x62], [0x63, 0x64]); + $this->assertTrue($filter->shouldBuffer([0x59, 0x60, 0x61]), '%s: Filter should buffer since 0x61 0x62 is the needle and the ending '. '0x61 could be from 0x61 0x62' ); @@ -22,34 +22,34 @@ public function testShouldBufferReturnsTrueIfPartialMatchAtEndOfBuffer() public function testFilterCanMakeMultipleReplacements() { - $filter = $this->_createFilter(array(array(0x61), array(0x62)), array(0x63)); + $filter = $this->createFilter([[0x61], [0x62]], [0x63]); $this->assertEquals( - array(0x60, 0x63, 0x60, 0x63, 0x60), - $filter->filter(array(0x60, 0x61, 0x60, 0x62, 0x60)) + [0x60, 0x63, 0x60, 0x63, 0x60], + $filter->filter([0x60, 0x61, 0x60, 0x62, 0x60]) ); } public function testMultipleReplacementsCanBeDifferent() { - $filter = $this->_createFilter(array(array(0x61), array(0x62)), array(array(0x63), array(0x64))); + $filter = $this->createFilter([[0x61], [0x62]], [[0x63], [0x64]]); $this->assertEquals( - array(0x60, 0x63, 0x60, 0x64, 0x60), - $filter->filter(array(0x60, 0x61, 0x60, 0x62, 0x60)) + [0x60, 0x63, 0x60, 0x64, 0x60], + $filter->filter([0x60, 0x61, 0x60, 0x62, 0x60]) ); } public function testShouldBufferReturnsFalseIfPartialMatchNotAtEndOfString() { - $filter = $this->_createFilter(array(0x0D, 0x0A), array(0x0A)); - $this->assertFalse($filter->shouldBuffer(array(0x61, 0x62, 0x0D, 0x0A, 0x63)), + $filter = $this->createFilter([0x0D, 0x0A], [0x0A]); + $this->assertFalse($filter->shouldBuffer([0x61, 0x62, 0x0D, 0x0A, 0x63]), '%s: Filter should not buffer since x0Dx0A is the needle and is not at EOF' ); } public function testShouldBufferReturnsTrueIfAnyOfMultipleMatchesAtEndOfString() { - $filter = $this->_createFilter(array(array(0x61, 0x62), array(0x63)), array(0x64)); - $this->assertTrue($filter->shouldBuffer(array(0x59, 0x60, 0x61)), + $filter = $this->createFilter([[0x61, 0x62], [0x63]], [0x64]); + $this->assertTrue($filter->shouldBuffer([0x59, 0x60, 0x61]), '%s: Filter should buffer since 0x61 0x62 is a needle and the ending '. '0x61 could be from 0x61 0x62' ); @@ -57,53 +57,53 @@ public function testShouldBufferReturnsTrueIfAnyOfMultipleMatchesAtEndOfString() public function testConvertingAllLineEndingsToCRLFWhenInputIsLF() { - $filter = $this->_createFilter( - array(array(0x0D, 0x0A), array(0x0D), array(0x0A)), - array(array(0x0A), array(0x0A), array(0x0D, 0x0A)) + $filter = $this->createFilter( + [[0x0D, 0x0A], [0x0D], [0x0A]], + [[0x0A], [0x0A], [0x0D, 0x0A]] ); $this->assertEquals( - array(0x60, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x63), - $filter->filter(array(0x60, 0x0A, 0x61, 0x0A, 0x62, 0x0A, 0x63)) + [0x60, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x63], + $filter->filter([0x60, 0x0A, 0x61, 0x0A, 0x62, 0x0A, 0x63]) ); } public function testConvertingAllLineEndingsToCRLFWhenInputIsCR() { - $filter = $this->_createFilter( - array(array(0x0D, 0x0A), array(0x0D), array(0x0A)), - array(array(0x0A), array(0x0A), array(0x0D, 0x0A)) + $filter = $this->createFilter( + [[0x0D, 0x0A], [0x0D], [0x0A]], + [[0x0A], [0x0A], [0x0D, 0x0A]] ); $this->assertEquals( - array(0x60, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x63), - $filter->filter(array(0x60, 0x0D, 0x61, 0x0D, 0x62, 0x0D, 0x63)) + [0x60, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x63], + $filter->filter([0x60, 0x0D, 0x61, 0x0D, 0x62, 0x0D, 0x63]) ); } public function testConvertingAllLineEndingsToCRLFWhenInputIsCRLF() { - $filter = $this->_createFilter( - array(array(0x0D, 0x0A), array(0x0D), array(0x0A)), - array(array(0x0A), array(0x0A), array(0x0D, 0x0A)) + $filter = $this->createFilter( + [[0x0D, 0x0A], [0x0D], [0x0A]], + [[0x0A], [0x0A], [0x0D, 0x0A]] ); $this->assertEquals( - array(0x60, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x63), - $filter->filter(array(0x60, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x63)) + [0x60, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x63], + $filter->filter([0x60, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x63]) ); } public function testConvertingAllLineEndingsToCRLFWhenInputIsLFCR() { - $filter = $this->_createFilter( - array(array(0x0D, 0x0A), array(0x0D), array(0x0A)), - array(array(0x0A), array(0x0A), array(0x0D, 0x0A)) + $filter = $this->createFilter( + [[0x0D, 0x0A], [0x0D], [0x0A]], + [[0x0A], [0x0A], [0x0D, 0x0A]] ); $this->assertEquals( - array(0x60, 0x0D, 0x0A, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x0D, 0x0A, 0x63), - $filter->filter(array(0x60, 0x0A, 0x0D, 0x61, 0x0A, 0x0D, 0x62, 0x0A, 0x0D, 0x63)) + [0x60, 0x0D, 0x0A, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x0D, 0x0A, 0x63], + $filter->filter([0x60, 0x0A, 0x0D, 0x61, 0x0A, 0x0D, 0x62, 0x0A, 0x0D, 0x63]) ); } @@ -111,18 +111,18 @@ public function testConvertingAllLineEndingsToCRLFWhenInputContainsLFLF() { //Lighthouse Bug #23 - $filter = $this->_createFilter( - array(array(0x0D, 0x0A), array(0x0D), array(0x0A)), - array(array(0x0A), array(0x0A), array(0x0D, 0x0A)) + $filter = $this->createFilter( + [[0x0D, 0x0A], [0x0D], [0x0A]], + [[0x0A], [0x0A], [0x0D, 0x0A]] ); $this->assertEquals( - array(0x60, 0x0D, 0x0A, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x0D, 0x0A, 0x63), - $filter->filter(array(0x60, 0x0A, 0x0A, 0x61, 0x0A, 0x0A, 0x62, 0x0A, 0x0A, 0x63)) + [0x60, 0x0D, 0x0A, 0x0D, 0x0A, 0x61, 0x0D, 0x0A, 0x0D, 0x0A, 0x62, 0x0D, 0x0A, 0x0D, 0x0A, 0x63], + $filter->filter([0x60, 0x0A, 0x0A, 0x61, 0x0A, 0x0A, 0x62, 0x0A, 0x0A, 0x63]) ); } - private function _createFilter($search, $replace) + private function createFilter($search, $replace) { return new Swift_StreamFilters_ByteArrayReplacementFilter($search, $replace); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/StringReplacementFilterFactoryTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/StringReplacementFilterFactoryTest.php index c14d5dc..514829f 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/StringReplacementFilterFactoryTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/StringReplacementFilterFactoryTest.php @@ -1,10 +1,10 @@ _createFactory(); + $factory = $this->createFactory(); $this->assertInstanceOf( 'Swift_StreamFilters_StringReplacementFilter', $factory->createFilter('a', 'b') @@ -13,7 +13,7 @@ public function testInstancesOfStringReplacementFilterAreCreated() public function testSameInstancesAreCached() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $filter1 = $factory->createFilter('a', 'b'); $filter2 = $factory->createFilter('a', 'b'); $this->assertSame($filter1, $filter2, '%s: Instances should be cached'); @@ -21,7 +21,7 @@ public function testSameInstancesAreCached() public function testDifferingInstancesAreNotCached() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $filter1 = $factory->createFilter('a', 'b'); $filter2 = $factory->createFilter('a', 'c'); $this->assertNotEquals($filter1, $filter2, @@ -29,7 +29,7 @@ public function testDifferingInstancesAreNotCached() ); } - private function _createFactory() + private function createFactory() { return new Swift_StreamFilters_StringReplacementFilterFactory(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/StringReplacementFilterTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/StringReplacementFilterTest.php index 681e235..1a5f4dc 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/StringReplacementFilterTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/StreamFilters/StringReplacementFilterTest.php @@ -1,16 +1,16 @@ _createFilter('foo', 'bar'); + $filter = $this->createFilter('foo', 'bar'); $this->assertEquals('XbarYbarZ', $filter->filter('XfooYfooZ')); } public function testShouldBufferReturnsTrueIfPartialMatchAtEndOfBuffer() { - $filter = $this->_createFilter('foo', 'bar'); + $filter = $this->createFilter('foo', 'bar'); $this->assertTrue($filter->shouldBuffer('XfooYf'), '%s: Filter should buffer since "foo" is the needle and the ending '. '"f" could be from "foo"' @@ -19,19 +19,19 @@ public function testShouldBufferReturnsTrueIfPartialMatchAtEndOfBuffer() public function testFilterCanMakeMultipleReplacements() { - $filter = $this->_createFilter(array('a', 'b'), 'foo'); + $filter = $this->createFilter(['a', 'b'], 'foo'); $this->assertEquals('XfooYfooZ', $filter->filter('XaYbZ')); } public function testMultipleReplacementsCanBeDifferent() { - $filter = $this->_createFilter(array('a', 'b'), array('foo', 'zip')); + $filter = $this->createFilter(['a', 'b'], ['foo', 'zip']); $this->assertEquals('XfooYzipZ', $filter->filter('XaYbZ')); } public function testShouldBufferReturnsFalseIfPartialMatchNotAtEndOfString() { - $filter = $this->_createFilter("\r\n", "\n"); + $filter = $this->createFilter("\r\n", "\n"); $this->assertFalse($filter->shouldBuffer("foo\r\nbar"), '%s: Filter should not buffer since x0Dx0A is the needle and is not at EOF' ); @@ -39,7 +39,7 @@ public function testShouldBufferReturnsFalseIfPartialMatchNotAtEndOfString() public function testShouldBufferReturnsTrueIfAnyOfMultipleMatchesAtEndOfString() { - $filter = $this->_createFilter(array('foo', 'zip'), 'bar'); + $filter = $this->createFilter(['foo', 'zip'], 'bar'); $this->assertTrue($filter->shouldBuffer('XfooYzi'), '%s: Filter should buffer since "zip" is a needle and the ending '. '"zi" could be from "zip"' @@ -48,11 +48,11 @@ public function testShouldBufferReturnsTrueIfAnyOfMultipleMatchesAtEndOfString() public function testShouldBufferReturnsFalseOnEmptyBuffer() { - $filter = $this->_createFilter("\r\n", "\n"); + $filter = $this->createFilter("\r\n", "\n"); $this->assertFalse($filter->shouldBuffer('')); } - private function _createFilter($search, $replace) + private function createFilter($search, $replace) { return new Swift_StreamFilters_StringReplacementFilter($search, $replace); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpEventSupportTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpEventSupportTest.php index 81bda4f..896171d 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpEventSupportTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpEventSupportTest.php @@ -6,10 +6,10 @@ abstract class Swift_Transport_AbstractSmtpEventSupportTest extends Swift_Transp { public function testRegisterPluginLoadsPluginInEventDispatcher() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); $listener = $this->getMockery('Swift_Events_EventListener'); - $smtp = $this->_getTransport($buf, $dispatcher); + $smtp = $this->getTransport($buf, $dispatcher); $dispatcher->shouldReceive('bindEventListener') ->once() ->with($listener); @@ -19,18 +19,18 @@ public function testRegisterPluginLoadsPluginInEventDispatcher() public function testSendingDispatchesBeforeSendEvent() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); - $message = $this->_createMessage(); - $smtp = $this->_getTransport($buf, $dispatcher); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); + $message = $this->createMessage(); + $smtp = $this->getTransport($buf, $dispatcher); $evt = $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); $message->shouldReceive('getFrom') ->zeroOrMoreTimes() - ->andReturn(array('chris@swiftmailer.org' => null)); + ->andReturn(['chris@swiftmailer.org' => null]); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array('mark@swiftmailer.org' => 'Mark')); + ->andReturn(['mark@swiftmailer.org' => 'Mark']); $dispatcher->shouldReceive('createSendEvent') ->once() ->andReturn($evt); @@ -43,25 +43,25 @@ public function testSendingDispatchesBeforeSendEvent() ->zeroOrMoreTimes() ->andReturn(false); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $this->assertEquals(1, $smtp->send($message)); } public function testSendingDispatchesSendEvent() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); - $message = $this->_createMessage(); - $smtp = $this->_getTransport($buf, $dispatcher); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); + $message = $this->createMessage(); + $smtp = $this->getTransport($buf, $dispatcher); $evt = $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); $message->shouldReceive('getFrom') ->zeroOrMoreTimes() - ->andReturn(array('chris@swiftmailer.org' => null)); + ->andReturn(['chris@swiftmailer.org' => null]); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array('mark@swiftmailer.org' => 'Mark')); + ->andReturn(['mark@swiftmailer.org' => 'Mark']); $dispatcher->shouldReceive('createSendEvent') ->once() ->andReturn($evt); @@ -74,25 +74,25 @@ public function testSendingDispatchesSendEvent() ->zeroOrMoreTimes() ->andReturn(false); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $this->assertEquals(1, $smtp->send($message)); } public function testSendEventCapturesFailures() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); $evt = $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); - $smtp = $this->_getTransport($buf, $dispatcher); - $message = $this->_createMessage(); + $smtp = $this->getTransport($buf, $dispatcher); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->zeroOrMoreTimes() - ->andReturn(array('chris@swiftmailer.org' => null)); + ->andReturn(['chris@swiftmailer.org' => null]); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array('mark@swiftmailer.org' => 'Mark')); + ->andReturn(['mark@swiftmailer.org' => 'Mark']); $buf->shouldReceive('write') ->once() ->with("MAIL FROM:\r\n") @@ -123,27 +123,27 @@ public function testSendEventCapturesFailures() ->andReturn(false); $evt->shouldReceive('setFailedRecipients') ->once() - ->with(array('mark@swiftmailer.org')); + ->with(['mark@swiftmailer.org']); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $this->assertEquals(0, $smtp->send($message)); } public function testSendEventHasResultFailedIfAllFailures() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); $evt = $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); - $smtp = $this->_getTransport($buf, $dispatcher); - $message = $this->_createMessage(); + $smtp = $this->getTransport($buf, $dispatcher); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->zeroOrMoreTimes() - ->andReturn(array('chris@swiftmailer.org' => null)); + ->andReturn(['chris@swiftmailer.org' => null]); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array('mark@swiftmailer.org' => 'Mark')); + ->andReturn(['mark@swiftmailer.org' => 'Mark']); $buf->shouldReceive('write') ->once() ->with("MAIL FROM:\r\n") @@ -176,28 +176,28 @@ public function testSendEventHasResultFailedIfAllFailures() ->once() ->with(Swift_Events_SendEvent::RESULT_FAILED); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $this->assertEquals(0, $smtp->send($message)); } public function testSendEventHasResultTentativeIfSomeFailures() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); $evt = $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); - $smtp = $this->_getTransport($buf, $dispatcher); - $message = $this->_createMessage(); + $smtp = $this->getTransport($buf, $dispatcher); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->zeroOrMoreTimes() - ->andReturn(array('chris@swiftmailer.org' => null)); + ->andReturn(['chris@swiftmailer.org' => null]); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array( + ->andReturn([ 'mark@swiftmailer.org' => 'Mark', 'chris@site.tld' => 'Chris', - )); + ]); $buf->shouldReceive('write') ->once() ->with("MAIL FROM:\r\n") @@ -230,28 +230,28 @@ public function testSendEventHasResultTentativeIfSomeFailures() ->once() ->with(Swift_Events_SendEvent::RESULT_TENTATIVE); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $this->assertEquals(1, $smtp->send($message)); } public function testSendEventHasResultSuccessIfNoFailures() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); $evt = $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); - $smtp = $this->_getTransport($buf, $dispatcher); - $message = $this->_createMessage(); + $smtp = $this->getTransport($buf, $dispatcher); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->zeroOrMoreTimes() - ->andReturn(array('chris@swiftmailer.org' => null)); + ->andReturn(['chris@swiftmailer.org' => null]); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array( + ->andReturn([ 'mark@swiftmailer.org' => 'Mark', 'chris@site.tld' => 'Chris', - )); + ]); $dispatcher->shouldReceive('createSendEvent') ->zeroOrMoreTimes() ->with($smtp, \Mockery::any()) @@ -268,25 +268,25 @@ public function testSendEventHasResultSuccessIfNoFailures() ->once() ->with(Swift_Events_SendEvent::RESULT_SUCCESS); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $this->assertEquals(2, $smtp->send($message)); } public function testCancellingEventBubbleBeforeSendStopsEvent() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); $evt = $this->getMockery('Swift_Events_SendEvent')->shouldIgnoreMissing(); - $smtp = $this->_getTransport($buf, $dispatcher); - $message = $this->_createMessage(); + $smtp = $this->getTransport($buf, $dispatcher); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->zeroOrMoreTimes() - ->andReturn(array('chris@swiftmailer.org' => null)); + ->andReturn(['chris@swiftmailer.org' => null]); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array('mark@swiftmailer.org' => 'Mark')); + ->andReturn(['mark@swiftmailer.org' => 'Mark']); $dispatcher->shouldReceive('createSendEvent') ->zeroOrMoreTimes() ->with($smtp, \Mockery::any()) @@ -300,17 +300,17 @@ public function testCancellingEventBubbleBeforeSendStopsEvent() ->atLeast()->once() ->andReturn(true); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $this->assertEquals(0, $smtp->send($message)); } public function testStartingTransportDispatchesTransportChangeEvent() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); $evt = $this->getMockery('Swift_Events_TransportChangeEvent'); - $smtp = $this->_getTransport($buf, $dispatcher); + $smtp = $this->getTransport($buf, $dispatcher); $dispatcher->shouldReceive('createTransportChangeEvent') ->atLeast()->once() @@ -325,16 +325,16 @@ public function testStartingTransportDispatchesTransportChangeEvent() ->atLeast()->once() ->andReturn(false); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); } public function testStartingTransportDispatchesBeforeTransportChangeEvent() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); $evt = $this->getMockery('Swift_Events_TransportChangeEvent'); - $smtp = $this->_getTransport($buf, $dispatcher); + $smtp = $this->getTransport($buf, $dispatcher); $dispatcher->shouldReceive('createTransportChangeEvent') ->atLeast()->once() @@ -349,16 +349,16 @@ public function testStartingTransportDispatchesBeforeTransportChangeEvent() ->atLeast()->once() ->andReturn(false); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); } public function testCancellingBubbleBeforeTransportStartStopsEvent() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); $evt = $this->getMockery('Swift_Events_TransportChangeEvent'); - $smtp = $this->_getTransport($buf, $dispatcher); + $smtp = $this->getTransport($buf, $dispatcher); $dispatcher->shouldReceive('createTransportChangeEvent') ->atLeast()->once() @@ -373,7 +373,7 @@ public function testCancellingBubbleBeforeTransportStartStopsEvent() ->atLeast()->once() ->andReturn(true); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $this->assertFalse($smtp->isStarted(), @@ -383,10 +383,10 @@ public function testCancellingBubbleBeforeTransportStartStopsEvent() public function testStoppingTransportDispatchesTransportChangeEvent() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); $evt = $this->getMockery('Swift_Events_TransportChangeEvent')->shouldIgnoreMissing(); - $smtp = $this->_getTransport($buf, $dispatcher); + $smtp = $this->getTransport($buf, $dispatcher); $dispatcher->shouldReceive('createTransportChangeEvent') ->atLeast()->once() @@ -398,17 +398,17 @@ public function testStoppingTransportDispatchesTransportChangeEvent() $dispatcher->shouldReceive('dispatchEvent') ->zeroOrMoreTimes(); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $smtp->stop(); } public function testStoppingTransportDispatchesBeforeTransportChangeEvent() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); $evt = $this->getMockery('Swift_Events_TransportChangeEvent')->shouldIgnoreMissing(); - $smtp = $this->_getTransport($buf, $dispatcher); + $smtp = $this->getTransport($buf, $dispatcher); $dispatcher->shouldReceive('createTransportChangeEvent') ->atLeast()->once() @@ -420,17 +420,17 @@ public function testStoppingTransportDispatchesBeforeTransportChangeEvent() $dispatcher->shouldReceive('dispatchEvent') ->zeroOrMoreTimes(); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $smtp->stop(); } public function testCancellingBubbleBeforeTransportStoppedStopsEvent() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); $evt = $this->getMockery('Swift_Events_TransportChangeEvent'); - $smtp = $this->_getTransport($buf, $dispatcher); + $smtp = $this->getTransport($buf, $dispatcher); $hasRun = false; $dispatcher->shouldReceive('createTransportChangeEvent') @@ -451,7 +451,7 @@ public function testCancellingBubbleBeforeTransportStoppedStopsEvent() return $hasRun; }); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $smtp->stop(); @@ -462,10 +462,10 @@ public function testCancellingBubbleBeforeTransportStoppedStopsEvent() public function testResponseEventsAreGenerated() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); $evt = $this->getMockery('Swift_Events_ResponseEvent'); - $smtp = $this->_getTransport($buf, $dispatcher); + $smtp = $this->getTransport($buf, $dispatcher); $dispatcher->shouldReceive('createResponseEvent') ->atLeast()->once() @@ -475,16 +475,16 @@ public function testResponseEventsAreGenerated() ->atLeast()->once() ->with($evt, 'responseReceived'); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); } public function testCommandEventsAreGenerated() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); $evt = $this->getMockery('Swift_Events_CommandEvent'); - $smtp = $this->_getTransport($buf, $dispatcher); + $smtp = $this->getTransport($buf, $dispatcher); $dispatcher->shouldReceive('createCommandEvent') ->once() @@ -494,16 +494,16 @@ public function testCommandEventsAreGenerated() ->once() ->with($evt, 'commandSent'); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); } public function testExceptionsCauseExceptionEvents() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); $evt = $this->getMockery('Swift_Events_TransportExceptionEvent'); - $smtp = $this->_getTransport($buf, $dispatcher); + $smtp = $this->getTransport($buf, $dispatcher); $buf->shouldReceive('readLine') ->atLeast()->once() @@ -528,10 +528,10 @@ public function testExceptionsCauseExceptionEvents() public function testExceptionBubblesCanBeCancelled() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(false); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(false); $evt = $this->getMockery('Swift_Events_TransportExceptionEvent'); - $smtp = $this->_getTransport($buf, $dispatcher); + $smtp = $this->getTransport($buf, $dispatcher); $buf->shouldReceive('readLine') ->atLeast()->once() @@ -547,11 +547,11 @@ public function testExceptionBubblesCanBeCancelled() ->atLeast()->once() ->andReturn(true); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); } - protected function _createEventDispatcher($stub = true) + protected function createEventDispatcher($stub = true) { return $this->getMockery('Swift_Events_EventDispatcher')->shouldIgnoreMissing(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpTest.php index f49b489..4c837fa 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/AbstractSmtpTest.php @@ -2,8 +2,7 @@ abstract class Swift_Transport_AbstractSmtpTest extends \SwiftMailerTestCase { - /** Abstract test method */ - abstract protected function _getTransport($buf); + abstract protected function getTransport($buf); public function testStartAccepts220ServiceGreeting() { @@ -18,8 +17,8 @@ public function testStartAccepts220ServiceGreeting() E: 554 */ - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $buf->shouldReceive('initialize') ->once(); $buf->shouldReceive('readLine') @@ -27,7 +26,7 @@ public function testStartAccepts220ServiceGreeting() ->with(0) ->andReturn("220 some.server.tld bleh\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); try { $this->assertFalse($smtp->isStarted(), '%s: SMTP should begin non-started'); $smtp->start(); @@ -39,20 +38,20 @@ public function testStartAccepts220ServiceGreeting() public function testBadGreetingCausesException() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $buf->shouldReceive('initialize') ->once(); $buf->shouldReceive('readLine') ->once() ->with(0) ->andReturn("554 I'm busy\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); try { $this->assertFalse($smtp->isStarted(), '%s: SMTP should begin non-started'); $smtp->start(); $this->fail('554 greeting indicates an error and should cause an exception'); - } catch (Exception $e) { + } catch (Swift_TransportException $e) { $this->assertFalse($smtp->isStarted(), '%s: start() should have failed'); } } @@ -93,8 +92,8 @@ public function testStartSendsHeloToInitiate() */ - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $buf->shouldReceive('initialize') ->once(); @@ -104,14 +103,14 @@ public function testStartSendsHeloToInitiate() ->andReturn("220 some.server.tld bleh\r\n"); $buf->shouldReceive('write') ->once() - ->with('~^HELO .*?\r\n$~D') + ->with('~^HELO example.org\r\n$~D') ->andReturn(1); $buf->shouldReceive('readLine') ->once() ->with(1) ->andReturn('250 ServerName'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); try { $smtp->start(); } catch (Exception $e) { @@ -121,8 +120,8 @@ public function testStartSendsHeloToInitiate() public function testInvalidHeloResponseCausesException() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $buf->shouldReceive('initialize') ->once(); @@ -132,19 +131,19 @@ public function testInvalidHeloResponseCausesException() ->andReturn("220 some.server.tld bleh\r\n"); $buf->shouldReceive('write') ->once() - ->with('~^HELO .*?\r\n$~D') + ->with('~^HELO example.org\r\n$~D') ->andReturn(1); $buf->shouldReceive('readLine') ->once() ->with(1) ->andReturn('504 WTF'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); try { $this->assertFalse($smtp->isStarted(), '%s: SMTP should begin non-started'); $smtp->start(); $this->fail('Non 250 HELO response should raise Exception'); - } catch (Exception $e) { + } catch (Swift_TransportException $e) { $this->assertFalse($smtp->isStarted(), '%s: SMTP start() should have failed'); } } @@ -162,8 +161,8 @@ public function testDomainNameIsPlacedInHelo() identifying the client. */ - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $buf->shouldReceive('initialize') ->once(); @@ -180,7 +179,7 @@ public function testDomainNameIsPlacedInHelo() ->with(1) ->andReturn('250 ServerName'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->setLocalDomain('mydomain.com'); $smtp->start(); } @@ -222,15 +221,15 @@ public function testSuccessfulMailCommand() E: 552, 451, 452, 550, 553, 503 */ - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->once() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->once() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $buf->shouldReceive('initialize') ->once(); $buf->shouldReceive('write') @@ -242,7 +241,7 @@ public function testSuccessfulMailCommand() ->with(1) ->andReturn("250 OK\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); try { $smtp->start(); $smtp->send($message); @@ -253,16 +252,16 @@ public function testSuccessfulMailCommand() public function testInvalidResponseCodeFromMailCausesException() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->once() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->once() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $buf->shouldReceive('write') ->once() ->with("MAIL FROM:\r\n") @@ -272,30 +271,30 @@ public function testInvalidResponseCodeFromMailCausesException() ->with(1) ->andReturn('553 Bad'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); try { $smtp->start(); $smtp->send($message); $this->fail('MAIL FROM should accept a 250 response'); - } catch (Exception $e) { + } catch (Swift_TransportException $e) { } } public function testSenderIsPreferredOverFrom() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->once() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getSender') ->once() - ->andReturn(array('another@domain.com' => 'Someone')); + ->andReturn(['another@domain.com' => 'Someone']); $message->shouldReceive('getTo') ->once() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $buf->shouldReceive('write') ->once() ->with("MAIL FROM:\r\n") @@ -305,29 +304,29 @@ public function testSenderIsPreferredOverFrom() ->with(1) ->andReturn('250 OK'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $smtp->send($message); } public function testReturnPathIsPreferredOverSender() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->once() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getSender') ->once() - ->andReturn(array('another@domain.com' => 'Someone')); + ->andReturn(['another@domain.com' => 'Someone']); $message->shouldReceive('getReturnPath') ->once() ->andReturn('more@domain.com'); $message->shouldReceive('getTo') ->once() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $buf->shouldReceive('write') ->once() ->with("MAIL FROM:\r\n") @@ -337,7 +336,7 @@ public function testReturnPathIsPreferredOverSender() ->with(1) ->andReturn('250 OK'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $smtp->send($message); } @@ -392,16 +391,16 @@ public function testSuccessfulRcptCommandWith250Response() //We'll treat 252 as accepted since it isn't really a failure - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->once() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->once() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $buf->shouldReceive('write') ->once() ->with("MAIL FROM:\r\n") @@ -419,7 +418,7 @@ public function testSuccessfulRcptCommandWith250Response() ->with(2) ->andReturn('250 OK'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); try { $smtp->start(); $smtp->send($message); @@ -428,18 +427,101 @@ public function testSuccessfulRcptCommandWith250Response() } } + public function testUtf8AddressWithIdnEncoder() + { + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); + + $message->shouldReceive('getFrom') + ->once() + ->andReturn(['me@dömain.com' => 'Me']); + $message->shouldReceive('getTo') + ->once() + ->andReturn(['foo@bär' => null]); + $buf->shouldReceive('write') + ->once() + ->with("MAIL FROM:\r\n") + ->andReturn(1); + $buf->shouldReceive('write') + ->once() + ->with("RCPT TO:\r\n") + ->andReturn(1); + $buf->shouldReceive('readLine') + ->once() + ->with(1) + ->andReturn('250 OK'."\r\n"); + + $this->finishBuffer($buf); + $smtp->start(); + $smtp->send($message); + } + + public function testUtf8AddressWithUtf8Encoder() + { + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf, null, new Swift_AddressEncoder_Utf8AddressEncoder()); + $message = $this->createMessage(); + + $message->shouldReceive('getFrom') + ->once() + ->andReturn(['më@dömain.com' => 'Me']); + $message->shouldReceive('getTo') + ->once() + ->andReturn(['föö@bär' => null]); + $buf->shouldReceive('write') + ->once() + ->with("MAIL FROM:\r\n") + ->andReturn(1); + $buf->shouldReceive('write') + ->once() + ->with("RCPT TO:\r\n") + ->andReturn(1); + $buf->shouldReceive('readLine') + ->once() + ->with(1) + ->andReturn('250 OK'."\r\n"); + + $this->finishBuffer($buf); + $smtp->start(); + $smtp->send($message); + } + + public function testNonEncodableSenderCausesException() + { + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); + + $message->shouldReceive('getFrom') + ->once() + ->andReturn(['më@domain.com' => 'Me']); + $message->shouldReceive('getTo') + ->once() + ->andReturn(['foo@bar' => null]); + + $this->finishBuffer($buf); + try { + $smtp->start(); + $smtp->send($message); + $this->fail('më@domain.com cannot be encoded (not observed)'); + } catch (Swift_AddressEncoderException $e) { + $this->assertEquals('më@domain.com', $e->getAddress()); + } + } + public function testMailFromCommandIsOnlySentOncePerMessage() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->once() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->once() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $buf->shouldReceive('write') ->once() ->with("MAIL FROM:\r\n") @@ -460,27 +542,28 @@ public function testMailFromCommandIsOnlySentOncePerMessage() ->never() ->with("MAIL FROM:\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $smtp->send($message); } public function testMultipleRecipientsSendsMultipleRcpt() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->once() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->once() - ->andReturn(array( + ->andReturn([ 'foo@bar' => null, 'zip@button' => 'Zip Button', 'test@domain' => 'Test user', - )); + 'tëst@domain' => 'Test user', + ]); $buf->shouldReceive('write') ->once() ->with("RCPT TO:\r\n") @@ -506,29 +589,29 @@ public function testMultipleRecipientsSendsMultipleRcpt() ->with(3) ->andReturn('250 OK'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $smtp->send($message); } public function testCcRecipientsSendsMultipleRcpt() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->once() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->once() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $message->shouldReceive('getCc') ->once() - ->andReturn(array( + ->andReturn([ 'zip@button' => 'Zip Button', 'test@domain' => 'Test user', - )); + ]); $buf->shouldReceive('write') ->once() ->with("RCPT TO:\r\n") @@ -554,29 +637,29 @@ public function testCcRecipientsSendsMultipleRcpt() ->with(3) ->andReturn('250 OK'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $smtp->send($message); } public function testSendReturnsNumberOfSuccessfulRecipients() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->once() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->once() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $message->shouldReceive('getCc') ->once() - ->andReturn(array( + ->andReturn([ 'zip@button' => 'Zip Button', 'test@domain' => 'Test user', - )); + ]); $buf->shouldReceive('write') ->once() ->with("RCPT TO:\r\n") @@ -602,7 +685,7 @@ public function testSendReturnsNumberOfSuccessfulRecipients() ->with(3) ->andReturn('250 OK'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $this->assertEquals(2, $smtp->send($message), '%s: 1 of 3 recipients failed so 2 should be returned' @@ -625,16 +708,16 @@ public function testRsetIsSentIfNoSuccessfulRecipients() S: 250 */ - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->once() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->once() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $buf->shouldReceive('write') ->once() ->with("RCPT TO:\r\n") @@ -652,7 +735,7 @@ public function testRsetIsSentIfNoSuccessfulRecipients() ->with(2) ->andReturn('250 OK'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $this->assertEquals(0, $smtp->send($message), '%s: 1 of 1 recipients failed so 0 should be returned' @@ -691,16 +774,16 @@ public function testSuccessfulDataCommand() E: 451, 554, 503 */ - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->once() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->once() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $buf->shouldReceive('write') ->once() ->with("DATA\r\n") @@ -710,7 +793,7 @@ public function testSuccessfulDataCommand() ->with(1) ->andReturn('354 Go ahead'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); try { $smtp->start(); $smtp->send($message); @@ -721,16 +804,16 @@ public function testSuccessfulDataCommand() public function testBadDataResponseCausesException() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->once() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->once() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $buf->shouldReceive('write') ->once() ->with("DATA\r\n") @@ -740,27 +823,27 @@ public function testBadDataResponseCausesException() ->with(1) ->andReturn('451 Bad'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); try { $smtp->start(); $smtp->send($message); $this->fail('354 is the expected response to DATA (not observed)'); - } catch (Exception $e) { + } catch (Swift_TransportException $e) { } } public function testMessageIsStreamedToBufferForData() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->once() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->once() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $buf->shouldReceive('write') ->once() ->with("DATA\r\n") @@ -778,23 +861,23 @@ public function testMessageIsStreamedToBufferForData() ->with(2) ->andReturn('250 OK'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $smtp->send($message); } public function testBadResponseAfterDataTransmissionCausesException() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->once() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->once() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $buf->shouldReceive('write') ->once() ->with("DATA\r\n") @@ -812,12 +895,12 @@ public function testBadResponseAfterDataTransmissionCausesException() ->with(2) ->andReturn('554 Error'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); try { $smtp->start(); $smtp->send($message); $this->fail('250 is the expected response after a DATA transmission (not observed)'); - } catch (Exception $e) { + } catch (Swift_TransportException $e) { } } @@ -840,65 +923,65 @@ public function testBccRecipientsAreRemovedFromHeaders() transaction containing only a single RCPT command. */ - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->zeroOrMoreTimes() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $message->shouldReceive('getBcc') ->zeroOrMoreTimes() - ->andReturn(array( + ->andReturn([ 'zip@button' => 'Zip Button', 'test@domain' => 'Test user', - )); + ]); $message->shouldReceive('setBcc') ->once() - ->with(array()); + ->with([]); $message->shouldReceive('setBcc') ->zeroOrMoreTimes(); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $smtp->send($message); } public function testEachBccRecipientIsSentASeparateMessage() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->zeroOrMoreTimes() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $message->shouldReceive('getBcc') ->zeroOrMoreTimes() - ->andReturn(array( + ->andReturn([ 'zip@button' => 'Zip Button', 'test@domain' => 'Test user', - )); + ]); $message->shouldReceive('setBcc') ->atLeast()->once() - ->with(array()); + ->with([]); $message->shouldReceive('setBcc') ->once() - ->with(array('zip@button' => 'Zip Button')); + ->with(['zip@button' => 'Zip Button']); $message->shouldReceive('setBcc') ->once() - ->with(array('test@domain' => 'Test user')); + ->with(['test@domain' => 'Test user']); $message->shouldReceive('setBcc') ->atLeast()->once() - ->with(array( + ->with([ 'zip@button' => 'Zip Button', 'test@domain' => 'Test user', - )); + ]); $buf->shouldReceive('write')->once()->with("MAIL FROM:\r\n")->andReturn(1); $buf->shouldReceive('readLine')->once()->with(1)->andReturn("250 OK\r\n"); @@ -927,38 +1010,38 @@ public function testEachBccRecipientIsSentASeparateMessage() $buf->shouldReceive('write')->once()->with("\r\n.\r\n")->andReturn(12); $buf->shouldReceive('readLine')->once()->with(12)->andReturn("250 OK\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $this->assertEquals(3, $smtp->send($message)); } public function testMessageStateIsRestoredOnFailure() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->zeroOrMoreTimes() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $message->shouldReceive('getBcc') ->zeroOrMoreTimes() - ->andReturn(array( + ->andReturn([ 'zip@button' => 'Zip Button', 'test@domain' => 'Test user', - )); + ]); $message->shouldReceive('setBcc') ->once() - ->with(array()); + ->with([]); $message->shouldReceive('setBcc') ->once() - ->with(array( + ->with([ 'zip@button' => 'Zip Button', 'test@domain' => 'Test user', - )); + ]); $buf->shouldReceive('write') ->once() ->with("MAIL FROM:\r\n") @@ -984,13 +1067,13 @@ public function testMessageStateIsRestoredOnFailure() ->with(3) ->andReturn("451 No\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); try { $smtp->send($message); $this->fail('A bad response was given so exception is expected'); - } catch (Exception $e) { + } catch (Swift_TransportException $e) { } } @@ -1018,9 +1101,9 @@ public function testStopSendsQuitCommand() "QUIT" CRLF */ - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $buf->shouldReceive('initialize') ->once(); $buf->shouldReceive('write') @@ -1034,7 +1117,7 @@ public function testStopSendsQuitCommand() $buf->shouldReceive('terminate') ->once(); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $this->assertFalse($smtp->isStarted()); $smtp->start(); @@ -1045,17 +1128,17 @@ public function testStopSendsQuitCommand() public function testBufferCanBeFetched() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $ref = $smtp->getBuffer(); $this->assertEquals($buf, $ref); } public function testBufferCanBeWrittenToUsingExecuteCommand() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $buf->shouldReceive('write') ->zeroOrMoreTimes() ->with("FOO\r\n") @@ -1071,9 +1154,9 @@ public function testBufferCanBeWrittenToUsingExecuteCommand() public function testResponseCodesAreValidated() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $buf->shouldReceive('write') ->zeroOrMoreTimes() ->with("FOO\r\n") @@ -1084,45 +1167,45 @@ public function testResponseCodesAreValidated() ->andReturn("551 Not ok\r\n"); try { - $smtp->executeCommand("FOO\r\n", array(250, 251)); + $smtp->executeCommand("FOO\r\n", [250, 251]); $this->fail('A 250 or 251 response was needed but 551 was returned.'); - } catch (Exception $e) { + } catch (Swift_TransportException $e) { } } public function testFailedRecipientsCanBeCollectedByReference() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->zeroOrMoreTimes() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $message->shouldReceive('getBcc') ->zeroOrMoreTimes() - ->andReturn(array( + ->andReturn([ 'zip@button' => 'Zip Button', 'test@domain' => 'Test user', - )); + ]); $message->shouldReceive('setBcc') ->atLeast()->once() - ->with(array()); + ->with([]); $message->shouldReceive('setBcc') ->once() - ->with(array('zip@button' => 'Zip Button')); + ->with(['zip@button' => 'Zip Button']); $message->shouldReceive('setBcc') ->once() - ->with(array('test@domain' => 'Test user')); + ->with(['test@domain' => 'Test user']); $message->shouldReceive('setBcc') ->atLeast()->once() - ->with(array( + ->with([ 'zip@button' => 'Zip Button', 'test@domain' => 'Test user', - )); + ]); $buf->shouldReceive('write')->once()->with("MAIL FROM:\r\n")->andReturn(1); $buf->shouldReceive('readLine')->once()->with(1)->andReturn("250 OK\r\n"); @@ -1147,44 +1230,112 @@ public function testFailedRecipientsCanBeCollectedByReference() $buf->shouldReceive('write')->once()->with("RSET\r\n")->andReturn(11); $buf->shouldReceive('readLine')->once()->with(11)->andReturn("250 OK\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $this->assertEquals(1, $smtp->send($message, $failures)); - $this->assertEquals(array('zip@button', 'test@domain'), $failures, + $this->assertEquals(['zip@button', 'test@domain'], $failures, '%s: Failures should be caught in an array' ); } public function testSendingRegeneratesMessageId() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->zeroOrMoreTimes() - ->andReturn(array('me@domain.com' => 'Me')); + ->andReturn(['me@domain.com' => 'Me']); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $message->shouldReceive('generateId') ->once(); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->start(); $smtp->send($message); } - protected function _getBuffer() + public function testPing() + { + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + + $buf->shouldReceive('initialize') + ->once(); + $buf->shouldReceive('readLine') + ->once() + ->with(0) + ->andReturn("220 some.server.tld bleh\r\n"); + $buf->shouldReceive('write') + ->once() + ->with('~^NOOP\r\n$~D') + ->andReturn(1); + $buf->shouldReceive('readLine') + ->once() + ->with(1) + ->andReturn('250 OK'."\r\n"); + + $this->finishBuffer($buf); + $this->assertTrue($smtp->ping()); + } + + public function testPingOnDeadConnection() + { + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + + $buf->shouldReceive('initialize') + ->once(); + $buf->shouldReceive('readLine') + ->once() + ->with(0) + ->andReturn("220 some.server.tld bleh\r\n"); + $buf->shouldReceive('write') + ->once() + ->with('~^NOOP\r\n$~D') + ->andThrow('Swift_TransportException'); + + $this->finishBuffer($buf); + $smtp->start(); + $this->assertTrue($smtp->isStarted()); + $this->assertFalse($smtp->ping()); + $this->assertFalse($smtp->isStarted()); + } + + public function testSetLocalDomain() + { + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + + $smtp->setLocalDomain('example.com'); + $this->assertEquals('example.com', $smtp->getLocalDomain()); + + $smtp->setLocalDomain('192.168.0.1'); + $this->assertEquals('[192.168.0.1]', $smtp->getLocalDomain()); + + $smtp->setLocalDomain('[192.168.0.1]'); + $this->assertEquals('[192.168.0.1]', $smtp->getLocalDomain()); + + $smtp->setLocalDomain('fd00::'); + $this->assertEquals('[IPv6:fd00::]', $smtp->getLocalDomain()); + + $smtp->setLocalDomain('[IPv6:fd00::]'); + $this->assertEquals('[IPv6:fd00::]', $smtp->getLocalDomain()); + } + + protected function getBuffer() { return $this->getMockery('Swift_Transport_IoBuffer')->shouldIgnoreMissing(); } - protected function _createMessage() + protected function createMessage() { - return $this->getMockery('Swift_Mime_Message')->shouldIgnoreMissing(); + return $this->getMockery('Swift_Mime_SimpleMessage')->shouldIgnoreMissing(); } - protected function _finishBuffer($buf) + protected function finishBuffer($buf) { $buf->shouldReceive('readLine') ->zeroOrMoreTimes() @@ -1193,7 +1344,7 @@ protected function _finishBuffer($buf) $buf->shouldReceive('write') ->zeroOrMoreTimes() ->with('~^(EH|HE)LO .*?\r\n$~D') - ->andReturn($x = uniqid()); + ->andReturn($x = uniqid('', true)); $buf->shouldReceive('readLine') ->zeroOrMoreTimes() ->with($x) @@ -1201,7 +1352,7 @@ protected function _finishBuffer($buf) $buf->shouldReceive('write') ->zeroOrMoreTimes() ->with('~^MAIL FROM:<.*?>\r\n$~D') - ->andReturn($x = uniqid()); + ->andReturn($x = uniqid('', true)); $buf->shouldReceive('readLine') ->zeroOrMoreTimes() ->with($x) @@ -1209,7 +1360,7 @@ protected function _finishBuffer($buf) $buf->shouldReceive('write') ->zeroOrMoreTimes() ->with('~^RCPT TO:<.*?>\r\n$~D') - ->andReturn($x = uniqid()); + ->andReturn($x = uniqid('', true)); $buf->shouldReceive('readLine') ->zeroOrMoreTimes() ->with($x) @@ -1217,7 +1368,7 @@ protected function _finishBuffer($buf) $buf->shouldReceive('write') ->zeroOrMoreTimes() ->with("DATA\r\n") - ->andReturn($x = uniqid()); + ->andReturn($x = uniqid('', true)); $buf->shouldReceive('readLine') ->zeroOrMoreTimes() ->with($x) @@ -1225,7 +1376,7 @@ protected function _finishBuffer($buf) $buf->shouldReceive('write') ->zeroOrMoreTimes() ->with("\r\n.\r\n") - ->andReturn($x = uniqid()); + ->andReturn($x = uniqid('', true)); $buf->shouldReceive('readLine') ->zeroOrMoreTimes() ->with($x) @@ -1233,7 +1384,7 @@ protected function _finishBuffer($buf) $buf->shouldReceive('write') ->zeroOrMoreTimes() ->with("RSET\r\n") - ->andReturn($x = uniqid()); + ->andReturn($x = uniqid('', true)); $buf->shouldReceive('readLine') ->zeroOrMoreTimes() ->with($x) diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/CramMd5AuthenticatorTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/CramMd5AuthenticatorTest.php index aca03a9..ba131e8 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/CramMd5AuthenticatorTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/CramMd5AuthenticatorTest.php @@ -2,11 +2,11 @@ class Swift_Transport_Esmtp_Auth_CramMd5AuthenticatorTest extends \SwiftMailerTestCase { - private $_agent; + private $agent; protected function setUp() { - $this->_agent = $this->getMockery('Swift_Transport_SmtpAgent')->shouldIgnoreMissing(); + $this->agent = $this->getMockery('Swift_Transport_SmtpAgent')->shouldIgnoreMissing(); } public function testKeywordIsCramMd5() @@ -15,49 +15,50 @@ public function testKeywordIsCramMd5() The authentication type associated with CRAM is "CRAM-MD5". */ - $cram = $this->_getAuthenticator(); + $cram = $this->getAuthenticator(); $this->assertEquals('CRAM-MD5', $cram->getAuthKeyword()); } public function testSuccessfulAuthentication() { - $cram = $this->_getAuthenticator(); + $cram = $this->getAuthenticator(); - $this->_agent->shouldReceive('executeCommand') + $this->agent->shouldReceive('executeCommand') ->once() - ->with("AUTH CRAM-MD5\r\n", array(334)) + ->with("AUTH CRAM-MD5\r\n", [334]) ->andReturn('334 '.base64_encode('')."\r\n"); - $this->_agent->shouldReceive('executeCommand') + $this->agent->shouldReceive('executeCommand') ->once() - ->with(\Mockery::any(), array(235)); + ->with(\Mockery::any(), [235]); - $this->assertTrue($cram->authenticate($this->_agent, 'jack', 'pass'), + $this->assertTrue($cram->authenticate($this->agent, 'jack', 'pass'), '%s: The buffer accepted all commands authentication should succeed' ); } - public function testAuthenticationFailureSendRsetAndReturnFalse() + /** + * @expectedException \Swift_TransportException + */ + public function testAuthenticationFailureSendRset() { - $cram = $this->_getAuthenticator(); + $cram = $this->getAuthenticator(); - $this->_agent->shouldReceive('executeCommand') + $this->agent->shouldReceive('executeCommand') ->once() - ->with("AUTH CRAM-MD5\r\n", array(334)) + ->with("AUTH CRAM-MD5\r\n", [334]) ->andReturn('334 '.base64_encode('')."\r\n"); - $this->_agent->shouldReceive('executeCommand') + $this->agent->shouldReceive('executeCommand') ->once() - ->with(\Mockery::any(), array(235)) + ->with(\Mockery::any(), [235]) ->andThrow(new Swift_TransportException('')); - $this->_agent->shouldReceive('executeCommand') + $this->agent->shouldReceive('executeCommand') ->once() - ->with("RSET\r\n", array(250)); + ->with("RSET\r\n", [250]); - $this->assertFalse($cram->authenticate($this->_agent, 'jack', 'pass'), - '%s: Authentication fails, so RSET should be sent' - ); + $cram->authenticate($this->agent, 'jack', 'pass'); } - private function _getAuthenticator() + private function getAuthenticator() { return new Swift_Transport_Esmtp_Auth_CramMd5Authenticator(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/LoginAuthenticatorTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/LoginAuthenticatorTest.php index 13f0209..499ceb7 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/LoginAuthenticatorTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/LoginAuthenticatorTest.php @@ -2,62 +2,63 @@ class Swift_Transport_Esmtp_Auth_LoginAuthenticatorTest extends \SwiftMailerTestCase { - private $_agent; + private $agent; protected function setUp() { - $this->_agent = $this->getMockery('Swift_Transport_SmtpAgent')->shouldIgnoreMissing(); + $this->agent = $this->getMockery('Swift_Transport_SmtpAgent')->shouldIgnoreMissing(); } public function testKeywordIsLogin() { - $login = $this->_getAuthenticator(); + $login = $this->getAuthenticator(); $this->assertEquals('LOGIN', $login->getAuthKeyword()); } public function testSuccessfulAuthentication() { - $login = $this->_getAuthenticator(); + $login = $this->getAuthenticator(); - $this->_agent->shouldReceive('executeCommand') + $this->agent->shouldReceive('executeCommand') ->once() - ->with("AUTH LOGIN\r\n", array(334)); - $this->_agent->shouldReceive('executeCommand') + ->with("AUTH LOGIN\r\n", [334]); + $this->agent->shouldReceive('executeCommand') ->once() - ->with(base64_encode('jack')."\r\n", array(334)); - $this->_agent->shouldReceive('executeCommand') + ->with(base64_encode('jack')."\r\n", [334]); + $this->agent->shouldReceive('executeCommand') ->once() - ->with(base64_encode('pass')."\r\n", array(235)); + ->with(base64_encode('pass')."\r\n", [235]); - $this->assertTrue($login->authenticate($this->_agent, 'jack', 'pass'), + $this->assertTrue($login->authenticate($this->agent, 'jack', 'pass'), '%s: The buffer accepted all commands authentication should succeed' ); } - public function testAuthenticationFailureSendRsetAndReturnFalse() + /** + * @expectedException \Swift_TransportException + */ + public function testAuthenticationFailureSendRset() { - $login = $this->_getAuthenticator(); + $login = $this->getAuthenticator(); - $this->_agent->shouldReceive('executeCommand') + $this->agent->shouldReceive('executeCommand') ->once() - ->with("AUTH LOGIN\r\n", array(334)); - $this->_agent->shouldReceive('executeCommand') + ->with("AUTH LOGIN\r\n", [334]); + $this->agent->shouldReceive('executeCommand') ->once() - ->with(base64_encode('jack')."\r\n", array(334)); - $this->_agent->shouldReceive('executeCommand') + ->with(base64_encode('jack')."\r\n", [334]); + $this->agent->shouldReceive('executeCommand') ->once() - ->with(base64_encode('pass')."\r\n", array(235)) + ->with(base64_encode('pass')."\r\n", [235]) ->andThrow(new Swift_TransportException('')); - $this->_agent->shouldReceive('executeCommand') + $this->agent->shouldReceive('executeCommand') ->once() - ->with("RSET\r\n", array(250)); + ->with("RSET\r\n", [250]); - $this->assertFalse($login->authenticate($this->_agent, 'jack', 'pass'), - '%s: Authentication fails, so RSET should be sent' - ); + $login->authenticate($this->agent, 'jack', 'pass'); } - private function _getAuthenticator() + private function getAuthenticator() { return new Swift_Transport_Esmtp_Auth_LoginAuthenticator(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/NTLMAuthenticatorTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/NTLMAuthenticatorTest.php index 911d258..98e2e25 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/NTLMAuthenticatorTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/NTLMAuthenticatorTest.php @@ -2,29 +2,29 @@ class Swift_Transport_Esmtp_Auth_NTLMAuthenticatorTest extends \SwiftMailerTestCase { - private $_message1 = '4e544c4d535350000100000007020000'; - private $_message2 = '4e544c4d53535000020000000c000c003000000035828980514246973ea892c10000000000000000460046003c00000054004500530054004e00540002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d0000000000'; - private $_message3 = '4e544c4d5353500003000000180018006000000076007600780000000c000c0040000000080008004c0000000c000c0054000000000000009a0000000102000054004500530054004e00540074006500730074004d0045004d00420045005200bf2e015119f6bdb3f6fdb768aa12d478f5ce3d2401c8f6e9caa4da8f25d5e840974ed8976d3ada46010100000000000030fa7e3c677bc301f5ce3d2401c8f6e90000000002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d000000000000000000'; + private $message1 = '4e544c4d535350000100000007020000'; + private $message2 = '4e544c4d53535000020000000c000c003000000035828980514246973ea892c10000000000000000460046003c00000054004500530054004e00540002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d0000000000'; + private $message3 = '4e544c4d5353500003000000180018006000000076007600780000000c000c0040000000080008004c0000000c000c0054000000000000009a0000000102000054004500530054004e00540074006500730074004d0045004d00420045005200bf2e015119f6bdb3f6fdb768aa12d478f5ce3d2401c8f6e9caa4da8f25d5e840974ed8976d3ada46010100000000000030fa7e3c677bc301f5ce3d2401c8f6e90000000002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d000000000000000000'; protected function setUp() { - if (!function_exists('openssl_encrypt') || !function_exists('openssl_random_pseudo_bytes') || !function_exists('bcmul') || !function_exists('iconv')) { + if (!function_exists('openssl_encrypt') || !function_exists('bcmul')) { $this->markTestSkipped('One of the required functions is not available.'); } } public function testKeywordIsNtlm() { - $login = $this->_getAuthenticator(); + $login = $this->getAuthenticator(); $this->assertEquals('NTLM', $login->getAuthKeyword()); } public function testMessage1Generator() { - $login = $this->_getAuthenticator(); - $message1 = $this->_invokePrivateMethod('createMessage1', $login); + $login = $this->getAuthenticator(); + $message1 = $this->invokePrivateMethod('createMessage1', $login); - $this->assertEquals($this->_message1, bin2hex($message1), '%s: We send the smallest ntlm message which should never fail.'); + $this->assertEquals($this->message1, bin2hex($message1), '%s: We send the smallest ntlm message which should never fail.'); } public function testLMv1Generator() @@ -33,8 +33,8 @@ public function testLMv1Generator() $challenge = 'b019d38bad875c9d'; $lmv1 = '1879f60127f8a877022132ec221bcbf3ca016a9f76095606'; - $login = $this->_getAuthenticator(); - $lmv1Result = $this->_invokePrivateMethod('createLMPassword', $login, array($password, $this->hex2bin($challenge))); + $login = $this->getAuthenticator(); + $lmv1Result = $this->invokePrivateMethod('createLMPassword', $login, [$password, hex2bin($challenge)]); $this->assertEquals($lmv1, bin2hex($lmv1Result), '%s: The keys should be the same cause we use the same values to generate them.'); } @@ -47,8 +47,8 @@ public function testLMv2Generator() $challenge = '0123456789abcdef'; $lmv2 = 'd6e6152ea25d03b7c6ba6629c2d6aaf0ffffff0011223344'; - $login = $this->_getAuthenticator(); - $lmv2Result = $this->_invokePrivateMethod('createLMv2Password', $login, array($password, $username, $domain, $this->hex2bin($challenge), $this->hex2bin('ffffff0011223344'))); + $login = $this->getAuthenticator(); + $lmv2Result = $this->invokePrivateMethod('createLMv2Password', $login, [$password, $username, $domain, hex2bin($challenge), hex2bin('ffffff0011223344')]); $this->assertEquals($lmv2, bin2hex($lmv2Result), '%s: The keys should be the same cause we use the same values to generate them.'); } @@ -62,8 +62,8 @@ public function testMessage3v1Generator() $ntlmResponse = 'e6285df3287c5d194f84df1a94817c7282d09754b6f9e02a'; $message3T = '4e544c4d5353500003000000180018006000000018001800780000000c000c0040000000080008004c0000000c000c0054000000000000009a0000000102000054004500530054004e00540074006500730074004d0045004d004200450052001879f60127f8a877022132ec221bcbf3ca016a9f76095606e6285df3287c5d194f84df1a94817c7282d09754b6f9e02a'; - $login = $this->_getAuthenticator(); - $message3 = $this->_invokePrivateMethod('createMessage3', $login, array($domain, $username, $workstation, $this->hex2bin($lmResponse), $this->hex2bin($ntlmResponse))); + $login = $this->getAuthenticator(); + $message3 = $this->invokePrivateMethod('createMessage3', $login, [$domain, $username, $workstation, hex2bin($lmResponse), hex2bin($ntlmResponse)]); $this->assertEquals($message3T, bin2hex($message3), '%s: We send the same information as the example is created with so this should be the same'); } @@ -76,18 +76,18 @@ public function testMessage3v2Generator() $lmResponse = 'bf2e015119f6bdb3f6fdb768aa12d478f5ce3d2401c8f6e9'; $ntlmResponse = 'caa4da8f25d5e840974ed8976d3ada46010100000000000030fa7e3c677bc301f5ce3d2401c8f6e90000000002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d000000000000000000'; - $login = $this->_getAuthenticator(); - $message3 = $this->_invokePrivateMethod('createMessage3', $login, array($domain, $username, $workstation, $this->hex2bin($lmResponse), $this->hex2bin($ntlmResponse))); + $login = $this->getAuthenticator(); + $message3 = $this->invokePrivateMethod('createMessage3', $login, [$domain, $username, $workstation, hex2bin($lmResponse), hex2bin($ntlmResponse)]); - $this->assertEquals($this->_message3, bin2hex($message3), '%s: We send the same information as the example is created with so this should be the same'); + $this->assertEquals($this->message3, bin2hex($message3), '%s: We send the same information as the example is created with so this should be the same'); } public function testGetDomainAndUsername() { $username = "DOMAIN\user"; - $login = $this->_getAuthenticator(); - list($domain, $user) = $this->_invokePrivateMethod('getDomainAndUsername', $login, array($username)); + $login = $this->getAuthenticator(); + list($domain, $user) = $this->invokePrivateMethod('getDomainAndUsername', $login, [$username]); $this->assertEquals('DOMAIN', $domain, '%s: the fetched domain did not match'); $this->assertEquals('user', $user, '%s: the fetched user did not match'); @@ -97,8 +97,8 @@ public function testGetDomainAndUsernameWithExtension() { $username = "domain.com\user"; - $login = $this->_getAuthenticator(); - list($domain, $user) = $this->_invokePrivateMethod('getDomainAndUsername', $login, array($username)); + $login = $this->getAuthenticator(); + list($domain, $user) = $this->invokePrivateMethod('getDomainAndUsername', $login, [$username]); $this->assertEquals('domain.com', $domain, '%s: the fetched domain did not match'); $this->assertEquals('user', $user, '%s: the fetched user did not match'); @@ -108,8 +108,8 @@ public function testGetDomainAndUsernameWithAtSymbol() { $username = 'user@DOMAIN'; - $login = $this->_getAuthenticator(); - list($domain, $user) = $this->_invokePrivateMethod('getDomainAndUsername', $login, array($username)); + $login = $this->getAuthenticator(); + list($domain, $user) = $this->invokePrivateMethod('getDomainAndUsername', $login, [$username]); $this->assertEquals('DOMAIN', $domain, '%s: the fetched domain did not match'); $this->assertEquals('user', $user, '%s: the fetched user did not match'); @@ -119,8 +119,8 @@ public function testGetDomainAndUsernameWithAtSymbolAndExtension() { $username = 'user@domain.com'; - $login = $this->_getAuthenticator(); - list($domain, $user) = $this->_invokePrivateMethod('getDomainAndUsername', $login, array($username)); + $login = $this->getAuthenticator(); + list($domain, $user) = $this->invokePrivateMethod('getDomainAndUsername', $login, [$username]); $this->assertEquals('domain.com', $domain, '%s: the fetched domain did not match'); $this->assertEquals('user', $user, '%s: the fetched user did not match'); @@ -130,8 +130,8 @@ public function testGetDomainAndUsernameWithoutDomain() { $username = 'user'; - $login = $this->_getAuthenticator(); - list($domain, $user) = $this->_invokePrivateMethod('getDomainAndUsername', $login, array($username)); + $login = $this->getAuthenticator(); + list($domain, $user) = $this->invokePrivateMethod('getDomainAndUsername', $login, [$username]); $this->assertEquals('', $domain, '%s: the fetched domain did not match'); $this->assertEquals('user', $user, '%s: the fetched user did not match'); @@ -143,71 +143,62 @@ public function testSuccessfulAuthentication() $username = 'test'; $secret = 'test1234'; - $ntlm = $this->_getAuthenticator(); - $agent = $this->_getAgent(); + $ntlm = $this->getAuthenticator(); + $agent = $this->getAgent(); $agent->shouldReceive('executeCommand') ->once() ->with('AUTH NTLM '.base64_encode( - $this->_invokePrivateMethod('createMessage1', $ntlm) - )."\r\n", array(334)) - ->andReturn('334 '.base64_encode($this->hex2bin('4e544c4d53535000020000000c000c003000000035828980514246973ea892c10000000000000000460046003c00000054004500530054004e00540002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d0000000000'))); + $this->invokePrivateMethod('createMessage1', $ntlm) + )."\r\n", [334]) + ->andReturn('334 '.base64_encode(hex2bin('4e544c4d53535000020000000c000c003000000035828980514246973ea892c10000000000000000460046003c00000054004500530054004e00540002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d0000000000'))); $agent->shouldReceive('executeCommand') ->once() ->with(base64_encode( - $this->_invokePrivateMethod('createMessage3', $ntlm, array($domain, $username, $this->hex2bin('4d0045004d00420045005200'), $this->hex2bin('bf2e015119f6bdb3f6fdb768aa12d478f5ce3d2401c8f6e9'), $this->hex2bin('caa4da8f25d5e840974ed8976d3ada46010100000000000030fa7e3c677bc301f5ce3d2401c8f6e90000000002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d000000000000000000')) - ))."\r\n", array(235)); + $this->invokePrivateMethod('createMessage3', $ntlm, [$domain, $username, hex2bin('4d0045004d00420045005200'), hex2bin('bf2e015119f6bdb3f6fdb768aa12d478f5ce3d2401c8f6e9'), hex2bin('caa4da8f25d5e840974ed8976d3ada46010100000000000030fa7e3c677bc301f5ce3d2401c8f6e90000000002000c0054004500530054004e00540001000c004d0045004d0042004500520003001e006d0065006d006200650072002e0074006500730074002e0063006f006d000000000000000000')] + ))."\r\n", [235]); - $this->assertTrue($ntlm->authenticate($agent, $username.'@'.$domain, $secret, $this->hex2bin('30fa7e3c677bc301'), $this->hex2bin('f5ce3d2401c8f6e9')), '%s: The buffer accepted all commands authentication should succeed'); + $this->assertTrue($ntlm->authenticate($agent, $username.'@'.$domain, $secret, hex2bin('30fa7e3c677bc301'), hex2bin('f5ce3d2401c8f6e9')), '%s: The buffer accepted all commands authentication should succeed'); } - public function testAuthenticationFailureSendRsetAndReturnFalse() + /** + * @expectedException \Swift_TransportException + */ + public function testAuthenticationFailureSendRset() { $domain = 'TESTNT'; $username = 'test'; $secret = 'test1234'; - $ntlm = $this->_getAuthenticator(); - $agent = $this->_getAgent(); + $ntlm = $this->getAuthenticator(); + $agent = $this->getAgent(); $agent->shouldReceive('executeCommand') ->once() ->with('AUTH NTLM '.base64_encode( - $this->_invokePrivateMethod('createMessage1', $ntlm) - )."\r\n", array(334)) + $this->invokePrivateMethod('createMessage1', $ntlm) + )."\r\n", [334]) ->andThrow(new Swift_TransportException('')); $agent->shouldReceive('executeCommand') ->once() - ->with("RSET\r\n", array(250)); + ->with("RSET\r\n", [250]); - $this->assertFalse($ntlm->authenticate($agent, $username.'@'.$domain, $secret, $this->hex2bin('30fa7e3c677bc301'), $this->hex2bin('f5ce3d2401c8f6e9')), '%s: Authentication fails, so RSET should be sent'); + $ntlm->authenticate($agent, $username.'@'.$domain, $secret, hex2bin('30fa7e3c677bc301'), hex2bin('f5ce3d2401c8f6e9')); } - private function _getAuthenticator() + private function getAuthenticator() { return new Swift_Transport_Esmtp_Auth_NTLMAuthenticator(); } - private function _getAgent() + private function getAgent() { return $this->getMockery('Swift_Transport_SmtpAgent')->shouldIgnoreMissing(); } - private function _invokePrivateMethod($method, $instance, array $args = array()) + private function invokePrivateMethod($method, $instance, array $args = []) { $methodC = new ReflectionMethod($instance, trim($method)); $methodC->setAccessible(true); return $methodC->invokeArgs($instance, $args); } - - /** - * Hex2bin replacement for < PHP 5.4. - * - * @param string $hex - * - * @return string Binary - */ - protected function hex2bin($hex) - { - return function_exists('hex2bin') ? hex2bin($hex) : pack('H*', $hex); - } } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/PlainAuthenticatorTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/PlainAuthenticatorTest.php index 73a9062..1bb2c99 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/PlainAuthenticatorTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/Auth/PlainAuthenticatorTest.php @@ -2,11 +2,11 @@ class Swift_Transport_Esmtp_Auth_PlainAuthenticatorTest extends \SwiftMailerTestCase { - private $_agent; + private $agent; protected function setUp() { - $this->_agent = $this->getMockery('Swift_Transport_SmtpAgent')->shouldIgnoreMissing(); + $this->agent = $this->getMockery('Swift_Transport_SmtpAgent')->shouldIgnoreMissing(); } public function testKeywordIsPlain() @@ -15,7 +15,7 @@ public function testKeywordIsPlain() The name associated with this mechanism is "PLAIN". */ - $login = $this->_getAuthenticator(); + $login = $this->getAuthenticator(); $this->assertEquals('PLAIN', $login->getAuthKeyword()); } @@ -28,39 +28,40 @@ public function testSuccessfulAuthentication() (U+0000) character, followed by the clear-text password. */ - $plain = $this->_getAuthenticator(); + $plain = $this->getAuthenticator(); - $this->_agent->shouldReceive('executeCommand') + $this->agent->shouldReceive('executeCommand') ->once() ->with('AUTH PLAIN '.base64_encode( 'jack'.chr(0).'jack'.chr(0).'pass' - )."\r\n", array(235)); + )."\r\n", [235]); - $this->assertTrue($plain->authenticate($this->_agent, 'jack', 'pass'), + $this->assertTrue($plain->authenticate($this->agent, 'jack', 'pass'), '%s: The buffer accepted all commands authentication should succeed' ); } - public function testAuthenticationFailureSendRsetAndReturnFalse() + /** + * @expectedException \Swift_TransportException + */ + public function testAuthenticationFailureSendRset() { - $plain = $this->_getAuthenticator(); + $plain = $this->getAuthenticator(); - $this->_agent->shouldReceive('executeCommand') + $this->agent->shouldReceive('executeCommand') ->once() ->with('AUTH PLAIN '.base64_encode( 'jack'.chr(0).'jack'.chr(0).'pass' - )."\r\n", array(235)) + )."\r\n", [235]) ->andThrow(new Swift_TransportException('')); - $this->_agent->shouldReceive('executeCommand') + $this->agent->shouldReceive('executeCommand') ->once() - ->with("RSET\r\n", array(250)); + ->with("RSET\r\n", [250]); - $this->assertFalse($plain->authenticate($this->_agent, 'jack', 'pass'), - '%s: Authentication fails, so RSET should be sent' - ); + $plain->authenticate($this->agent, 'jack', 'pass'); } - private function _getAuthenticator() + private function getAuthenticator() { return new Swift_Transport_Esmtp_Auth_PlainAuthenticator(); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/AuthHandlerTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/AuthHandlerTest.php index d52328a..36a4cf8 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/AuthHandlerTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/Esmtp/AuthHandlerTest.php @@ -2,43 +2,43 @@ class Swift_Transport_Esmtp_AuthHandlerTest extends \SwiftMailerTestCase { - private $_agent; + private $agent; protected function setUp() { - $this->_agent = $this->getMockery('Swift_Transport_SmtpAgent')->shouldIgnoreMissing(); + $this->agent = $this->getMockery('Swift_Transport_SmtpAgent')->shouldIgnoreMissing(); } public function testKeywordIsAuth() { - $auth = $this->_createHandler(array()); + $auth = $this->createHandler([]); $this->assertEquals('AUTH', $auth->getHandledKeyword()); } public function testUsernameCanBeSetAndFetched() { - $auth = $this->_createHandler(array()); + $auth = $this->createHandler([]); $auth->setUsername('jack'); $this->assertEquals('jack', $auth->getUsername()); } public function testPasswordCanBeSetAndFetched() { - $auth = $this->_createHandler(array()); + $auth = $this->createHandler([]); $auth->setPassword('pass'); $this->assertEquals('pass', $auth->getPassword()); } public function testAuthModeCanBeSetAndFetched() { - $auth = $this->_createHandler(array()); + $auth = $this->createHandler([]); $auth->setAuthMode('PLAIN'); $this->assertEquals('PLAIN', $auth->getAuthMode()); } public function testMixinMethods() { - $auth = $this->_createHandler(array()); + $auth = $this->createHandler([]); $mixins = $auth->exposeMixinMethods(); $this->assertTrue(in_array('getUsername', $mixins), '%s: getUsername() should be accessible via mixin' @@ -62,98 +62,98 @@ public function testMixinMethods() public function testAuthenticatorsAreCalledAccordingToParamsAfterEhlo() { - $a1 = $this->_createMockAuthenticator('PLAIN'); - $a2 = $this->_createMockAuthenticator('LOGIN'); + $a1 = $this->createMockAuthenticator('PLAIN'); + $a2 = $this->createMockAuthenticator('LOGIN'); $a1->shouldReceive('authenticate') ->never() - ->with($this->_agent, 'jack', 'pass'); + ->with($this->agent, 'jack', 'pass'); $a2->shouldReceive('authenticate') ->once() - ->with($this->_agent, 'jack', 'pass') + ->with($this->agent, 'jack', 'pass') ->andReturn(true); - $auth = $this->_createHandler(array($a1, $a2)); + $auth = $this->createHandler([$a1, $a2]); $auth->setUsername('jack'); $auth->setPassword('pass'); - $auth->setKeywordParams(array('CRAM-MD5', 'LOGIN')); - $auth->afterEhlo($this->_agent); + $auth->setKeywordParams(['CRAM-MD5', 'LOGIN']); + $auth->afterEhlo($this->agent); } public function testAuthenticatorsAreNotUsedIfNoUsernameSet() { - $a1 = $this->_createMockAuthenticator('PLAIN'); - $a2 = $this->_createMockAuthenticator('LOGIN'); + $a1 = $this->createMockAuthenticator('PLAIN'); + $a2 = $this->createMockAuthenticator('LOGIN'); $a1->shouldReceive('authenticate') ->never() - ->with($this->_agent, 'jack', 'pass'); + ->with($this->agent, 'jack', 'pass'); $a2->shouldReceive('authenticate') ->never() - ->with($this->_agent, 'jack', 'pass') + ->with($this->agent, 'jack', 'pass') ->andReturn(true); - $auth = $this->_createHandler(array($a1, $a2)); + $auth = $this->createHandler([$a1, $a2]); - $auth->setKeywordParams(array('CRAM-MD5', 'LOGIN')); - $auth->afterEhlo($this->_agent); + $auth->setKeywordParams(['CRAM-MD5', 'LOGIN']); + $auth->afterEhlo($this->agent); } public function testSeveralAuthenticatorsAreTriedIfNeeded() { - $a1 = $this->_createMockAuthenticator('PLAIN'); - $a2 = $this->_createMockAuthenticator('LOGIN'); + $a1 = $this->createMockAuthenticator('PLAIN'); + $a2 = $this->createMockAuthenticator('LOGIN'); $a1->shouldReceive('authenticate') ->once() - ->with($this->_agent, 'jack', 'pass') + ->with($this->agent, 'jack', 'pass') ->andReturn(false); $a2->shouldReceive('authenticate') ->once() - ->with($this->_agent, 'jack', 'pass') + ->with($this->agent, 'jack', 'pass') ->andReturn(true); - $auth = $this->_createHandler(array($a1, $a2)); + $auth = $this->createHandler([$a1, $a2]); $auth->setUsername('jack'); $auth->setPassword('pass'); - $auth->setKeywordParams(array('PLAIN', 'LOGIN')); - $auth->afterEhlo($this->_agent); + $auth->setKeywordParams(['PLAIN', 'LOGIN']); + $auth->afterEhlo($this->agent); } public function testFirstAuthenticatorToPassBreaksChain() { - $a1 = $this->_createMockAuthenticator('PLAIN'); - $a2 = $this->_createMockAuthenticator('LOGIN'); - $a3 = $this->_createMockAuthenticator('CRAM-MD5'); + $a1 = $this->createMockAuthenticator('PLAIN'); + $a2 = $this->createMockAuthenticator('LOGIN'); + $a3 = $this->createMockAuthenticator('CRAM-MD5'); $a1->shouldReceive('authenticate') ->once() - ->with($this->_agent, 'jack', 'pass') + ->with($this->agent, 'jack', 'pass') ->andReturn(false); $a2->shouldReceive('authenticate') ->once() - ->with($this->_agent, 'jack', 'pass') + ->with($this->agent, 'jack', 'pass') ->andReturn(true); $a3->shouldReceive('authenticate') ->never() - ->with($this->_agent, 'jack', 'pass'); + ->with($this->agent, 'jack', 'pass'); - $auth = $this->_createHandler(array($a1, $a2)); + $auth = $this->createHandler([$a1, $a2]); $auth->setUsername('jack'); $auth->setPassword('pass'); - $auth->setKeywordParams(array('PLAIN', 'LOGIN', 'CRAM-MD5')); - $auth->afterEhlo($this->_agent); + $auth->setKeywordParams(['PLAIN', 'LOGIN', 'CRAM-MD5']); + $auth->afterEhlo($this->agent); } - private function _createHandler($authenticators) + private function createHandler($authenticators) { return new Swift_Transport_Esmtp_AuthHandler($authenticators); } - private function _createMockAuthenticator($type) + private function createMockAuthenticator($type) { $authenticator = $this->getMockery('Swift_Transport_Esmtp_Authenticator')->shouldIgnoreMissing(); $authenticator->shouldReceive('getAuthKeyword') diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransport/ExtensionSupportTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransport/ExtensionSupportTest.php index 166e160..d9e363a 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransport/ExtensionSupportTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransport/ExtensionSupportTest.php @@ -13,8 +13,8 @@ class Swift_Transport_EsmtpTransport_ExtensionSupportTest extends Swift_Transpor { public function testExtensionHandlersAreSortedAsNeeded() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $ext1 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); @@ -32,16 +32,16 @@ public function testExtensionHandlersAreSortedAsNeeded() ->zeroOrMoreTimes() ->with('AUTH') ->andReturn(-1); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); - $smtp->setExtensionHandlers(array($ext1, $ext2)); - $this->assertEquals(array($ext2, $ext1), $smtp->getExtensionHandlers()); + $smtp->setExtensionHandlers([$ext1, $ext2]); + $this->assertEquals([$ext2, $ext1], $smtp->getExtensionHandlers()); } public function testHandlersAreNotifiedOfParams() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $ext1 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); @@ -71,23 +71,23 @@ public function testHandlersAreNotifiedOfParams() ->andReturn('AUTH'); $ext1->shouldReceive('setKeywordParams') ->once() - ->with(array('PLAIN', 'LOGIN')); + ->with(['PLAIN', 'LOGIN']); $ext2->shouldReceive('getHandledKeyword') ->zeroOrMoreTimes() ->andReturn('SIZE'); $ext2->shouldReceive('setKeywordParams') ->zeroOrMoreTimes() - ->with(array('123456')); - $this->_finishBuffer($buf); + ->with(['123456']); + $this->finishBuffer($buf); - $smtp->setExtensionHandlers(array($ext1, $ext2)); + $smtp->setExtensionHandlers([$ext1, $ext2]); $smtp->start(); } public function testSupportedExtensionHandlersAreRunAfterEhlo() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $ext1 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); $ext3 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); @@ -131,28 +131,28 @@ public function testSupportedExtensionHandlersAreRunAfterEhlo() $ext3->shouldReceive('afterEhlo') ->never() ->with($smtp); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); - $smtp->setExtensionHandlers(array($ext1, $ext2, $ext3)); + $smtp->setExtensionHandlers([$ext1, $ext2, $ext3]); $smtp->start(); } public function testExtensionsCanModifyMailFromParams() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(); - $smtp = new Swift_Transport_EsmtpTransport($buf, array(), $dispatcher); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(); + $smtp = new Swift_Transport_EsmtpTransport($buf, [], $dispatcher, 'example.org'); $ext1 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); $ext3 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->zeroOrMoreTimes() - ->andReturn(array('me@domain' => 'Me')); + ->andReturn(['me@domain' => 'Me']); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $buf->shouldReceive('readLine') ->once() @@ -190,7 +190,7 @@ public function testExtensionsCanModifyMailFromParams() ->once() ->with(3) ->andReturn("250 OK\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $ext1->shouldReceive('getHandledKeyword') ->zeroOrMoreTimes() @@ -200,7 +200,11 @@ public function testExtensionsCanModifyMailFromParams() ->andReturn('FOO'); $ext1->shouldReceive('getPriorityOver') ->zeroOrMoreTimes() - ->with('AUTH') + ->with('STARTTLS') + ->andReturn(1); + $ext1->shouldReceive('getPriorityOver') + ->zeroOrMoreTimes() + ->with('SIZE') ->andReturn(-1); $ext2->shouldReceive('getHandledKeyword') ->zeroOrMoreTimes() @@ -212,33 +216,45 @@ public function testExtensionsCanModifyMailFromParams() ->zeroOrMoreTimes() ->with('AUTH') ->andReturn(1); + $ext2->shouldReceive('getPriorityOver') + ->zeroOrMoreTimes() + ->with('STARTTLS') + ->andReturn(1); $ext3->shouldReceive('getHandledKeyword') ->zeroOrMoreTimes() ->andReturn('STARTTLS'); $ext3->shouldReceive('getMailParams') ->never(); + $ext3->shouldReceive('getPriorityOver') + ->zeroOrMoreTimes() + ->with('AUTH') + ->andReturn(-1); + $ext3->shouldReceive('getPriorityOver') + ->zeroOrMoreTimes() + ->with('SIZE') + ->andReturn(-1); - $smtp->setExtensionHandlers(array($ext1, $ext2, $ext3)); + $smtp->setExtensionHandlers([$ext1, $ext2, $ext3]); $smtp->start(); $smtp->send($message); } public function testExtensionsCanModifyRcptParams() { - $buf = $this->_getBuffer(); - $dispatcher = $this->_createEventDispatcher(); - $smtp = new Swift_Transport_EsmtpTransport($buf, array(), $dispatcher); + $buf = $this->getBuffer(); + $dispatcher = $this->createEventDispatcher(); + $smtp = new Swift_Transport_EsmtpTransport($buf, [], $dispatcher, 'example.org'); $ext1 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); $ext3 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); - $message = $this->_createMessage(); + $message = $this->createMessage(); $message->shouldReceive('getFrom') ->zeroOrMoreTimes() - ->andReturn(array('me@domain' => 'Me')); + ->andReturn(['me@domain' => 'Me']); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array('foo@bar' => null)); + ->andReturn(['foo@bar' => null]); $buf->shouldReceive('readLine') ->once() @@ -276,7 +292,7 @@ public function testExtensionsCanModifyRcptParams() ->once() ->with(3) ->andReturn("250 OK\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $ext1->shouldReceive('getHandledKeyword') ->zeroOrMoreTimes() @@ -286,7 +302,11 @@ public function testExtensionsCanModifyRcptParams() ->andReturn('FOO'); $ext1->shouldReceive('getPriorityOver') ->zeroOrMoreTimes() - ->with('AUTH') + ->with('STARTTLS') + ->andReturn(1); + $ext1->shouldReceive('getPriorityOver') + ->zeroOrMoreTimes() + ->with('SIZE') ->andReturn(-1); $ext2->shouldReceive('getHandledKeyword') ->zeroOrMoreTimes() @@ -294,6 +314,10 @@ public function testExtensionsCanModifyRcptParams() $ext2->shouldReceive('getRcptParams') ->once() ->andReturn('ZIP'); + $ext2->shouldReceive('getPriorityOver') + ->zeroOrMoreTimes() + ->with('STARTTLS') + ->andReturn(1); $ext2->shouldReceive('getPriorityOver') ->zeroOrMoreTimes() ->with('AUTH') @@ -303,16 +327,24 @@ public function testExtensionsCanModifyRcptParams() ->andReturn('STARTTLS'); $ext3->shouldReceive('getRcptParams') ->never(); + $ext3->shouldReceive('getPriorityOver') + ->zeroOrMoreTimes() + ->with('AUTH') + ->andReturn(-1); + $ext3->shouldReceive('getPriorityOver') + ->zeroOrMoreTimes() + ->with('SIZE') + ->andReturn(-1); - $smtp->setExtensionHandlers(array($ext1, $ext2, $ext3)); + $smtp->setExtensionHandlers([$ext1, $ext2, $ext3]); $smtp->start(); $smtp->send($message); } public function testExtensionsAreNotifiedOnCommand() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $ext1 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); $ext3 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); @@ -345,20 +377,20 @@ public function testExtensionsAreNotifiedOnCommand() ->once() ->with(2) ->andReturn("250 Cool\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $ext1->shouldReceive('getHandledKeyword') ->zeroOrMoreTimes() ->andReturn('AUTH'); $ext1->shouldReceive('onCommand') ->once() - ->with($smtp, "FOO\r\n", array(250, 251), \Mockery::any(), \Mockery::any()); + ->with($smtp, "FOO\r\n", [250, 251], \Mockery::any(), \Mockery::any()); $ext2->shouldReceive('getHandledKeyword') ->zeroOrMoreTimes() ->andReturn('SIZE'); $ext2->shouldReceive('onCommand') ->once() - ->with($smtp, "FOO\r\n", array(250, 251), \Mockery::any(), \Mockery::any()); + ->with($smtp, "FOO\r\n", [250, 251], \Mockery::any(), \Mockery::any()); $ext3->shouldReceive('getHandledKeyword') ->zeroOrMoreTimes() ->andReturn('STARTTLS'); @@ -366,15 +398,15 @@ public function testExtensionsAreNotifiedOnCommand() ->never() ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any()); - $smtp->setExtensionHandlers(array($ext1, $ext2, $ext3)); + $smtp->setExtensionHandlers([$ext1, $ext2, $ext3]); $smtp->start(); - $smtp->executeCommand("FOO\r\n", array(250, 251)); + $smtp->executeCommand("FOO\r\n", [250, 251]); } public function testChainOfCommandAlgorithmWhenNotifyingExtensions() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $ext1 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); $ext3 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); @@ -402,14 +434,14 @@ public function testChainOfCommandAlgorithmWhenNotifyingExtensions() $buf->shouldReceive('write') ->never() ->with("FOO\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $ext1->shouldReceive('getHandledKeyword') ->zeroOrMoreTimes() ->andReturn('AUTH'); $ext1->shouldReceive('onCommand') ->once() - ->with($smtp, "FOO\r\n", array(250, 251), \Mockery::any(), \Mockery::any()) + ->with($smtp, "FOO\r\n", [250, 251], \Mockery::any(), \Mockery::any()) ->andReturnUsing(function ($a, $b, $c, $d, &$e) { $e = true; @@ -429,15 +461,15 @@ public function testChainOfCommandAlgorithmWhenNotifyingExtensions() ->never() ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any()); - $smtp->setExtensionHandlers(array($ext1, $ext2, $ext3)); + $smtp->setExtensionHandlers([$ext1, $ext2, $ext3]); $smtp->start(); - $smtp->executeCommand("FOO\r\n", array(250, 251)); + $smtp->executeCommand("FOO\r\n", [250, 251]); } public function testExtensionsCanExposeMixinMethods() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $ext1 = $this->getMockery('Swift_Transport_EsmtpHandlerMixin')->shouldIgnoreMissing(); $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); @@ -446,7 +478,7 @@ public function testExtensionsCanExposeMixinMethods() ->andReturn('AUTH'); $ext1->shouldReceive('exposeMixinMethods') ->zeroOrMoreTimes() - ->andReturn(array('setUsername', 'setPassword')); + ->andReturn(['setUsername', 'setPassword']); $ext1->shouldReceive('setUsername') ->once() ->with('mick'); @@ -456,17 +488,17 @@ public function testExtensionsCanExposeMixinMethods() $ext2->shouldReceive('getHandledKeyword') ->zeroOrMoreTimes() ->andReturn('STARTTLS'); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); - $smtp->setExtensionHandlers(array($ext1, $ext2)); + $smtp->setExtensionHandlers([$ext1, $ext2]); $smtp->setUsername('mick'); $smtp->setPassword('pass'); } public function testMixinMethodsBeginningWithSetAndNullReturnAreFluid() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $ext1 = $this->getMockery('Swift_Transport_EsmtpHandlerMixin')->shouldIgnoreMissing(); $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); @@ -475,7 +507,7 @@ public function testMixinMethodsBeginningWithSetAndNullReturnAreFluid() ->andReturn('AUTH'); $ext1->shouldReceive('exposeMixinMethods') ->zeroOrMoreTimes() - ->andReturn(array('setUsername', 'setPassword')); + ->andReturn(['setUsername', 'setPassword']); $ext1->shouldReceive('setUsername') ->once() ->with('mick') @@ -487,9 +519,9 @@ public function testMixinMethodsBeginningWithSetAndNullReturnAreFluid() $ext2->shouldReceive('getHandledKeyword') ->zeroOrMoreTimes() ->andReturn('STARTTLS'); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); - $smtp->setExtensionHandlers(array($ext1, $ext2)); + $smtp->setExtensionHandlers([$ext1, $ext2]); $ret = $smtp->setUsername('mick'); $this->assertEquals($smtp, $ret); $ret = $smtp->setPassword('pass'); @@ -498,8 +530,8 @@ public function testMixinMethodsBeginningWithSetAndNullReturnAreFluid() public function testMixinSetterWhichReturnValuesAreNotFluid() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $ext1 = $this->getMockery('Swift_Transport_EsmtpHandlerMixin')->shouldIgnoreMissing(); $ext2 = $this->getMockery('Swift_Transport_EsmtpHandler')->shouldIgnoreMissing(); @@ -508,7 +540,7 @@ public function testMixinSetterWhichReturnValuesAreNotFluid() ->andReturn('AUTH'); $ext1->shouldReceive('exposeMixinMethods') ->zeroOrMoreTimes() - ->andReturn(array('setUsername', 'setPassword')); + ->andReturn(['setUsername', 'setPassword']); $ext1->shouldReceive('setUsername') ->once() ->with('mick') @@ -520,9 +552,9 @@ public function testMixinSetterWhichReturnValuesAreNotFluid() $ext2->shouldReceive('getHandledKeyword') ->zeroOrMoreTimes() ->andReturn('STARTTLS'); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); - $smtp->setExtensionHandlers(array($ext1, $ext2)); + $smtp->setExtensionHandlers([$ext1, $ext2]); $this->assertEquals('x', $smtp->setUsername('mick')); $this->assertEquals('x', $smtp->setPassword('pass')); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransportTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransportTest.php index e6cca15..db1edce 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransportTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/EsmtpTransportTest.php @@ -2,54 +2,54 @@ class Swift_Transport_EsmtpTransportTest extends Swift_Transport_AbstractSmtpEventSupportTest { - protected function _getTransport($buf, $dispatcher = null) + protected function getTransport($buf, $dispatcher = null, $addressEncoder = null) { - if (!$dispatcher) { - $dispatcher = $this->_createEventDispatcher(); - } + $dispatcher = $dispatcher ?? $this->createEventDispatcher(); + $addressEncoder = $addressEncoder ?? new Swift_AddressEncoder_IdnAddressEncoder(); - return new Swift_Transport_EsmtpTransport($buf, array(), $dispatcher); + return new Swift_Transport_EsmtpTransport($buf, [], $dispatcher, 'example.org', $addressEncoder); } public function testHostCanBeSetAndFetched() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $smtp->setHost('foo'); $this->assertEquals('foo', $smtp->getHost(), '%s: Host should be returned'); } public function testPortCanBeSetAndFetched() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $smtp->setPort(25); $this->assertEquals(25, $smtp->getPort(), '%s: Port should be returned'); } public function testTimeoutCanBeSetAndFetched() { - $buf = $this->_getBuffer(); + $buf = $this->getBuffer(); $buf->shouldReceive('setParam') ->once() ->with('timeout', 10); - $smtp = $this->_getTransport($buf); + $smtp = $this->getTransport($buf); $smtp->setTimeout(10); $this->assertEquals(10, $smtp->getTimeout(), '%s: Timeout should be returned'); } public function testEncryptionCanBeSetAndFetched() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $smtp->setEncryption('tls'); $this->assertEquals('tls', $smtp->getEncryption(), '%s: Crypto should be returned'); } public function testStartSendsHeloToInitiate() { - //Overridden for EHLO instead + // previous loop would fail if there is an issue + $this->addToAssertionCount(1); } public function testStartSendsEhloToInitiate() @@ -88,8 +88,8 @@ public function testStartSendsEhloToInitiate() */ - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $buf->shouldReceive('initialize') ->once(); @@ -106,11 +106,11 @@ public function testStartSendsEhloToInitiate() ->with(1) ->andReturn('250 ServerName'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); try { $smtp->start(); } catch (Exception $e) { - $this->fail('Starting Esmtp should send EHLO and accept 250 response'); + $this->fail('Starting Esmtp should send EHLO and accept 250 response: '.$e->getMessage()); } } @@ -124,8 +124,8 @@ public function testHeloIsUsedAsFallback() that it was in before the EHLO was received. */ - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $buf->shouldReceive('initialize') ->once(); @@ -150,7 +150,7 @@ public function testHeloIsUsedAsFallback() ->with(2) ->andReturn('250 HELO'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); try { $smtp->start(); } catch (Exception $e) { @@ -163,8 +163,8 @@ public function testHeloIsUsedAsFallback() public function testInvalidHeloResponseCausesException() { //Overridden to first try EHLO - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $buf->shouldReceive('initialize') ->once(); @@ -188,7 +188,7 @@ public function testInvalidHeloResponseCausesException() ->once() ->with(2) ->andReturn('504 WTF'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); try { $this->assertFalse($smtp->isStarted(), '%s: SMTP should begin non-started'); @@ -212,8 +212,8 @@ public function testDomainNameIsPlacedInEhlo() identifying the client. */ - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $buf->shouldReceive('initialize') ->once(); $buf->shouldReceive('readLine') @@ -229,7 +229,7 @@ public function testDomainNameIsPlacedInEhlo() ->with(1) ->andReturn('250 ServerName'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->setLocalDomain('mydomain.com'); $smtp->start(); } @@ -248,8 +248,8 @@ public function testDomainNameIsPlacedInHelo() identifying the client. */ - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $buf->shouldReceive('initialize') ->once(); $buf->shouldReceive('readLine') @@ -273,15 +273,368 @@ public function testDomainNameIsPlacedInHelo() ->with(2) ->andReturn('250 ServerName'."\r\n"); - $this->_finishBuffer($buf); + $this->finishBuffer($buf); $smtp->setLocalDomain('mydomain.com'); $smtp->start(); } + public function testPipelining() + { + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $this->assertNull($smtp->getPipelining()); + + $message = $this->createMessage(); + $message->shouldReceive('getFrom') + ->zeroOrMoreTimes() + ->andReturn(['me@domain.com' => 'Me']); + $message->shouldReceive('getTo') + ->zeroOrMoreTimes() + ->andReturn(['foo@bar' => null]); + + $buf->shouldReceive('initialize') + ->once(); + $buf->shouldReceive('readLine') + ->once() + ->with(0) + ->andReturn("220 some.server.tld bleh\r\n"); + $buf->shouldReceive('write') + ->once() + ->with('~^EHLO .+?\r\n$~D') + ->andReturn(1); + $buf->shouldReceive('readLine') + ->once() + ->with(1) + ->andReturn('250-ServerName'."\r\n"); + $buf->shouldReceive('readLine') + ->once() + ->with(1) + ->andReturn('250 PIPELINING'."\r\n"); + + $buf->shouldReceive('write') + ->ordered() + ->once() + ->with("MAIL FROM:\r\n") + ->andReturn(1); + $buf->shouldReceive('write') + ->ordered() + ->once() + ->with("RCPT TO:\r\n") + ->andReturn(2); + $buf->shouldReceive('write') + ->ordered() + ->once() + ->with("DATA\r\n")->andReturn(3); + $buf->shouldReceive('readLine') + ->ordered() + ->once() + ->with(1)->andReturn("250 OK\r\n"); + $buf->shouldReceive('readLine') + ->ordered() + ->once() + ->with(2)->andReturn("250 OK\r\n"); + $buf->shouldReceive('readLine') + ->ordered() + ->once() + ->with(3)->andReturn("354 OK\r\n"); + + $this->finishBuffer($buf); + $smtp->start(); + $sent = $smtp->send($message, $failedRecipients); + + $this->assertEquals(1, $sent); + $this->assertEmpty($failedRecipients); + + $this->assertTrue($smtp->getPipelining()); + } + + public function testPipeliningWithRecipientFailure() + { + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $this->assertNull($smtp->getPipelining()); + + $message = $this->createMessage(); + $message->shouldReceive('getFrom') + ->zeroOrMoreTimes() + ->andReturn(['me@domain.com' => 'Me']); + $message->shouldReceive('getTo') + ->zeroOrMoreTimes() + ->andReturn([ + 'good@foo' => null, + 'bad@foo' => null, + 'good@bar' => null, + ]); + + $buf->shouldReceive('initialize') + ->once(); + $buf->shouldReceive('readLine') + ->once() + ->with(0) + ->andReturn("220 some.server.tld bleh\r\n"); + $buf->shouldReceive('write') + ->once() + ->with('~^EHLO .+?\r\n$~D') + ->andReturn(1); + $buf->shouldReceive('readLine') + ->once() + ->with(1) + ->andReturn('250-ServerName'."\r\n"); + $buf->shouldReceive('readLine') + ->once() + ->with(1) + ->andReturn('250 PIPELINING'."\r\n"); + + $buf->shouldReceive('write') + ->ordered() + ->once() + ->with("MAIL FROM:\r\n") + ->andReturn(1); + $buf->shouldReceive('write') + ->ordered() + ->once() + ->with("RCPT TO:\r\n") + ->andReturn(2); + $buf->shouldReceive('write') + ->ordered() + ->once() + ->with("RCPT TO:\r\n") + ->andReturn(3); + $buf->shouldReceive('write') + ->ordered() + ->once() + ->with("RCPT TO:\r\n") + ->andReturn(4); + $buf->shouldReceive('write') + ->ordered() + ->once() + ->with("DATA\r\n") + ->andReturn(5); + $buf->shouldReceive('readLine') + ->ordered() + ->once() + ->with(1) + ->andReturn("250 OK\r\n"); + $buf->shouldReceive('readLine') + ->ordered() + ->once() + ->with(2) + ->andReturn("250 OK\r\n"); + $buf->shouldReceive('readLine') + ->ordered() + ->once() + ->with(3) + ->andReturn("450 Unknown address bad@foo\r\n"); + $buf->shouldReceive('readLine') + ->ordered() + ->once() + ->with(4) + ->andReturn("250 OK\r\n"); + $buf->shouldReceive('readLine') + ->ordered() + ->once() + ->with(5) + ->andReturn("354 OK\r\n"); + + $this->finishBuffer($buf); + $smtp->start(); + $sent = $smtp->send($message, $failedRecipients); + + $this->assertEquals(2, $sent); + $this->assertEquals(['bad@foo'], $failedRecipients); + + $this->assertTrue($smtp->getPipelining()); + } + + public function testPipeliningWithSenderFailure() + { + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $this->assertNull($smtp->getPipelining()); + + $message = $this->createMessage(); + $message->shouldReceive('getFrom') + ->zeroOrMoreTimes() + ->andReturn(['me@domain.com' => 'Me']); + $message->shouldReceive('getTo') + ->zeroOrMoreTimes() + ->andReturn(['foo@bar' => null]); + + $buf->shouldReceive('initialize') + ->once(); + $buf->shouldReceive('readLine') + ->once() + ->with(0) + ->andReturn("220 some.server.tld bleh\r\n"); + $buf->shouldReceive('write') + ->once() + ->with('~^EHLO .+?\r\n$~D') + ->andReturn(1); + $buf->shouldReceive('readLine') + ->once() + ->with(1) + ->andReturn('250-ServerName'."\r\n"); + $buf->shouldReceive('readLine') + ->once() + ->with(1) + ->andReturn('250 PIPELINING'."\r\n"); + + $buf->shouldReceive('write') + ->ordered() + ->once() + ->with("MAIL FROM:\r\n") + ->andReturn(1); + $buf->shouldReceive('write') + ->ordered() + ->once() + ->with("RCPT TO:\r\n") + ->andReturn(2); + $buf->shouldReceive('write') + ->ordered() + ->once() + ->with("DATA\r\n")->andReturn(3); + $buf->shouldReceive('readLine') + ->ordered() + ->once() + ->with(1) + ->andReturn("550 Unknown address me@domain.com\r\n"); + + $smtp->start(); + + $this->expectException('Swift_TransportException'); + $this->expectExceptionMessage('Expected response code 250 but got code "550"'); + $smtp->send($message, $failedRecipients); + } + + public function testPipeliningWithDataFailure() + { + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $this->assertNull($smtp->getPipelining()); + + $message = $this->createMessage(); + $message->shouldReceive('getFrom') + ->zeroOrMoreTimes() + ->andReturn(['me@domain.com' => 'Me']); + $message->shouldReceive('getTo') + ->zeroOrMoreTimes() + ->andReturn(['foo@bar' => null]); + + $buf->shouldReceive('initialize') + ->once(); + $buf->shouldReceive('readLine') + ->once() + ->with(0) + ->andReturn("220 some.server.tld bleh\r\n"); + $buf->shouldReceive('write') + ->once() + ->with('~^EHLO .+?\r\n$~D') + ->andReturn(1); + $buf->shouldReceive('readLine') + ->once() + ->with(1) + ->andReturn('250-ServerName'."\r\n"); + $buf->shouldReceive('readLine') + ->once() + ->with(1) + ->andReturn('250 PIPELINING'."\r\n"); + + $buf->shouldReceive('write') + ->ordered() + ->once() + ->with("MAIL FROM:\r\n") + ->andReturn(1); + $buf->shouldReceive('write') + ->ordered() + ->once() + ->with("RCPT TO:\r\n") + ->andReturn(2); + $buf->shouldReceive('write') + ->ordered() + ->once() + ->with("DATA\r\n")->andReturn(3); + $buf->shouldReceive('readLine') + ->ordered() + ->once() + ->with(1) + ->andReturn("250 OK\r\n"); + $buf->shouldReceive('readLine') + ->ordered() + ->once() + ->with(2) + ->andReturn("250 OK\r\n"); + $buf->shouldReceive('readLine') + ->ordered() + ->once() + ->with(3) + ->andReturn("452 Insufficient system storage\r\n"); + + $smtp->start(); + + $this->expectException('Swift_TransportException'); + $this->expectExceptionMessage('Expected response code 354 but got code "452"'); + $smtp->send($message, $failedRecipients); + } + + public function providerPipeliningOverride() + { + return [ + [null, true, true], + [null, false, false], + [true, false, true], + [true, true, true], + [false, false, false], + [false, true, false], + ]; + } + + /** + * @dataProvider providerPipeliningOverride + */ + public function testPipeliningOverride($enabled, bool $supported, bool $expected) + { + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); + $this->assertNull($smtp->getPipelining()); + + $smtp->setPipelining($enabled); + $this->assertSame($enabled, $smtp->getPipelining()); + + $message = $this->createMessage(); + $message->shouldReceive('getFrom') + ->zeroOrMoreTimes() + ->andReturn(['me@domain.com' => 'Me']); + + $buf->shouldReceive('initialize') + ->once(); + $buf->shouldReceive('readLine') + ->once() + ->with(0) + ->andReturn("220 some.server.tld bleh\r\n"); + $buf->shouldReceive('write') + ->once() + ->with('~^EHLO .+?\r\n$~D') + ->andReturn(1); + $buf->shouldReceive('readLine') + ->once() + ->with(1) + ->andReturn('250-ServerName'."\r\n"); + $buf->shouldReceive('readLine') + ->once() + ->with(1) + ->andReturn('250 '.($supported ? 'PIPELINING' : 'FOOBAR')."\r\n"); + + $this->finishBuffer($buf); + $smtp->start(); + $smtp->send($message); + + $this->assertSame($expected, $smtp->getPipelining()); + } + public function testFluidInterface() { - $buf = $this->_getBuffer(); - $smtp = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $smtp = $this->getTransport($buf); $buf->shouldReceive('setParam') ->once() ->with('timeout', 30); @@ -291,6 +644,7 @@ public function testFluidInterface() ->setPort(25) ->setEncryption('tls') ->setTimeout(30) + ->setPipelining(false) ; $this->assertEquals($ref, $smtp); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/FailoverTransportTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/FailoverTransportTest.php index e56e37f..deb0617 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/FailoverTransportTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/FailoverTransportTest.php @@ -4,8 +4,8 @@ class Swift_Transport_FailoverTransportTest extends \SwiftMailerTestCase { public function testFirstTransportIsUsed() { - $message1 = $this->getMockery('Swift_Mime_Message'); - $message2 = $this->getMockery('Swift_Mime_Message'); + $message1 = $this->getMockery('Swift_Mime_SimpleMessage'); + $message2 = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); $connectionState = false; @@ -33,7 +33,7 @@ public function testFirstTransportIsUsed() $t2->shouldReceive('start')->never(); $t2->shouldReceive('send')->never(); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); $this->assertEquals(1, $transport->send($message1)); $this->assertEquals(1, $transport->send($message2)); @@ -43,7 +43,7 @@ public function testMessageCanBeTriedOnNextTransportIfExceptionThrown() { $e = new Swift_TransportException('b0rken'); - $message = $this->getMockery('Swift_Mime_Message'); + $message = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); $connectionState1 = false; @@ -91,14 +91,14 @@ public function testMessageCanBeTriedOnNextTransportIfExceptionThrown() } }); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); $this->assertEquals(1, $transport->send($message)); } public function testZeroIsReturnedIfTransportReturnsZero() { - $message = $this->getMockery('Swift_Mime_Message')->shouldIgnoreMissing(); + $message = $this->getMockery('Swift_Mime_SimpleMessage')->shouldIgnoreMissing(); $t1 = $this->getMockery('Swift_Transport')->shouldIgnoreMissing(); $connectionState = false; @@ -126,7 +126,7 @@ public function testZeroIsReturnedIfTransportReturnsZero() return 0; }); - $transport = $this->_getTransport(array($t1)); + $transport = $this->getTransport([$t1]); $transport->start(); $this->assertEquals(0, $transport->send($message)); } @@ -135,10 +135,10 @@ public function testTransportsWhichThrowExceptionsAreNotRetried() { $e = new Swift_TransportException('maur b0rken'); - $message1 = $this->getMockery('Swift_Mime_Message'); - $message2 = $this->getMockery('Swift_Mime_Message'); - $message3 = $this->getMockery('Swift_Mime_Message'); - $message4 = $this->getMockery('Swift_Mime_Message'); + $message1 = $this->getMockery('Swift_Mime_SimpleMessage'); + $message2 = $this->getMockery('Swift_Mime_SimpleMessage'); + $message3 = $this->getMockery('Swift_Mime_SimpleMessage'); + $message4 = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); $connectionState1 = false; @@ -195,7 +195,7 @@ public function testTransportsWhichThrowExceptionsAreNotRetried() } }); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); $this->assertEquals(1, $transport->send($message1)); $this->assertEquals(1, $transport->send($message2)); @@ -207,7 +207,7 @@ public function testExceptionIsThrownIfAllTransportsDie() { $e = new Swift_TransportException('b0rken'); - $message = $this->getMockery('Swift_Mime_Message'); + $message = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); $connectionState1 = false; @@ -255,7 +255,7 @@ public function testExceptionIsThrownIfAllTransportsDie() } }); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); try { $transport->send($message); @@ -298,7 +298,7 @@ public function testStoppingTransportStopsAllDelegates() } }); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); $transport->stop(); } @@ -307,7 +307,7 @@ public function testTransportShowsAsNotStartedIfAllDelegatesDead() { $e = new Swift_TransportException('b0rken'); - $message = $this->getMockery('Swift_Mime_Message'); + $message = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); @@ -358,7 +358,7 @@ public function testTransportShowsAsNotStartedIfAllDelegatesDead() } }); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); $this->assertTrue($transport->isStarted()); try { @@ -373,8 +373,8 @@ public function testRestartingTransportRestartsDeadDelegates() { $e = new Swift_TransportException('b0rken'); - $message1 = $this->getMockery('Swift_Mime_Message'); - $message2 = $this->getMockery('Swift_Mime_Message'); + $message1 = $this->getMockery('Swift_Mime_SimpleMessage'); + $message2 = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); @@ -436,7 +436,7 @@ public function testRestartingTransportRestartsDeadDelegates() ->never() ->with($message2, \Mockery::any()); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); $this->assertTrue($transport->isStarted()); try { @@ -453,9 +453,9 @@ public function testRestartingTransportRestartsDeadDelegates() public function testFailureReferenceIsPassedToDelegates() { - $failures = array(); + $failures = []; - $message = $this->getMockery('Swift_Mime_Message'); + $message = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $connectionState = false; @@ -481,14 +481,14 @@ public function testFailureReferenceIsPassedToDelegates() } }); - $transport = $this->_getTransport(array($t1)); + $transport = $this->getTransport([$t1]); $transport->start(); $transport->send($message, $failures); } public function testRegisterPluginDelegatesToLoadedTransports() { - $plugin = $this->_createPlugin(); + $plugin = $this->createPlugin(); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); @@ -499,11 +499,93 @@ public function testRegisterPluginDelegatesToLoadedTransports() ->once() ->with($plugin); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->registerPlugin($plugin); } - private function _getTransport(array $transports) + public function testEachDelegateIsPinged() + { + $t1 = $this->getMockery('Swift_Transport'); + $t2 = $this->getMockery('Swift_Transport'); + $connectionState1 = false; + $connectionState2 = false; + + $testCase = $this; + $t1->shouldReceive('isStarted') + ->zeroOrMoreTimes() + ->andReturnUsing(function () use (&$connectionState1) { + return $connectionState1; + }); + $t1->shouldReceive('ping') + ->once() + ->andReturn(true); + + $transport = $this->getTransport([$t1, $t2]); + $this->assertTrue($transport->isStarted()); + $this->assertTrue($transport->ping()); + } + + public function testDelegateIsKilledWhenPingFails() + { + $t1 = $this->getMockery('Swift_Transport'); + $t2 = $this->getMockery('Swift_Transport'); + + $testCase = $this; + $t1->shouldReceive('isStarted') + ->zeroOrMoreTimes() + ->andReturnUsing(function () use (&$connectionState1) { + return $connectionState1; + }); + $t1->shouldReceive('ping') + ->once() + ->andReturn(false); + + $t2->shouldReceive('isStarted') + ->zeroOrMoreTimes() + ->andReturnUsing(function () use (&$connectionState2) { + return $connectionState2; + }); + $t2->shouldReceive('ping') + ->twice() + ->andReturn(true); + + $transport = $this->getTransport([$t1, $t2]); + $this->assertTrue($transport->ping()); + $this->assertTrue($transport->ping()); + $this->assertTrue($transport->isStarted()); + } + + public function XtestTransportShowsAsNotStartedIfAllPingFails() + { + $t1 = $this->getMockery('Swift_Transport'); + $t2 = $this->getMockery('Swift_Transport'); + + $testCase = $this; + $t1->shouldReceive('isStarted') + ->zeroOrMoreTimes() + ->andReturnUsing(function () use (&$connectionState1) { + return $connectionState1; + }); + $t1->shouldReceive('ping') + ->once() + ->andReturn(false); + + $t2->shouldReceive('isStarted') + ->zeroOrMoreTimes() + ->andReturnUsing(function () use (&$connectionState2) { + return $connectionState2; + }); + $t2->shouldReceive('ping') + ->once() + ->andReturn(false); + + $transport = $this->getTransport([$t1, $t2]); + $this->assertFalse($transport->ping()); + $this->assertFalse($transport->isStarted()); + $this->assertFalse($transport->ping()); + } + + private function getTransport(array $transports) { $transport = new Swift_Transport_FailoverTransport(); $transport->setTransports($transports); @@ -511,7 +593,7 @@ private function _getTransport(array $transports) return $transport; } - private function _createPlugin() + private function createPlugin() { return $this->getMockery('Swift_Events_EventListener'); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/LoadBalancedTransportTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/LoadBalancedTransportTest.php index f6bb819..dbc60af 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/LoadBalancedTransportTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/LoadBalancedTransportTest.php @@ -4,8 +4,8 @@ class Swift_Transport_LoadBalancedTransportTest extends \SwiftMailerTestCase { public function testEachTransportIsUsedInTurn() { - $message1 = $this->getMockery('Swift_Mime_Message'); - $message2 = $this->getMockery('Swift_Mime_Message'); + $message1 = $this->getMockery('Swift_Mime_SimpleMessage'); + $message2 = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); $connectionState1 = false; @@ -62,7 +62,7 @@ public function testEachTransportIsUsedInTurn() ->never() ->with($message1, \Mockery::any()); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); $this->assertEquals(1, $transport->send($message1)); $this->assertEquals(1, $transport->send($message2)); @@ -70,10 +70,10 @@ public function testEachTransportIsUsedInTurn() public function testTransportsAreReusedInRotatingFashion() { - $message1 = $this->getMockery('Swift_Mime_Message'); - $message2 = $this->getMockery('Swift_Mime_Message'); - $message3 = $this->getMockery('Swift_Mime_Message'); - $message4 = $this->getMockery('Swift_Mime_Message'); + $message1 = $this->getMockery('Swift_Mime_SimpleMessage'); + $message2 = $this->getMockery('Swift_Mime_SimpleMessage'); + $message3 = $this->getMockery('Swift_Mime_SimpleMessage'); + $message4 = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); $connectionState1 = false; @@ -154,7 +154,7 @@ public function testTransportsAreReusedInRotatingFashion() ->never() ->with($message3, \Mockery::any()); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); $this->assertEquals(1, $transport->send($message1)); @@ -167,7 +167,7 @@ public function testMessageCanBeTriedOnNextTransportIfExceptionThrown() { $e = new Swift_TransportException('b0rken'); - $message = $this->getMockery('Swift_Mime_Message'); + $message = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); $connectionState1 = false; @@ -218,14 +218,14 @@ public function testMessageCanBeTriedOnNextTransportIfExceptionThrown() $testCase->fail(); }); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); $this->assertEquals(1, $transport->send($message)); } public function testMessageIsTriedOnNextTransportIfZeroReturned() { - $message = $this->getMockery('Swift_Mime_Message'); + $message = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); $connectionState1 = false; @@ -277,14 +277,14 @@ public function testMessageIsTriedOnNextTransportIfZeroReturned() return 0; }); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); $this->assertEquals(1, $transport->send($message)); } public function testZeroIsReturnedIfAllTransportsReturnZero() { - $message = $this->getMockery('Swift_Mime_Message'); + $message = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); $connectionState1 = false; @@ -336,7 +336,7 @@ public function testZeroIsReturnedIfAllTransportsReturnZero() return 1; }); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); $this->assertEquals(0, $transport->send($message)); } @@ -345,10 +345,10 @@ public function testTransportsWhichThrowExceptionsAreNotRetried() { $e = new Swift_TransportException('maur b0rken'); - $message1 = $this->getMockery('Swift_Mime_Message'); - $message2 = $this->getMockery('Swift_Mime_Message'); - $message3 = $this->getMockery('Swift_Mime_Message'); - $message4 = $this->getMockery('Swift_Mime_Message'); + $message1 = $this->getMockery('Swift_Mime_SimpleMessage'); + $message2 = $this->getMockery('Swift_Mime_SimpleMessage'); + $message3 = $this->getMockery('Swift_Mime_SimpleMessage'); + $message4 = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); $connectionState1 = false; @@ -408,7 +408,7 @@ public function testTransportsWhichThrowExceptionsAreNotRetried() $testCase->fail(); }); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); $this->assertEquals(1, $transport->send($message1)); $this->assertEquals(1, $transport->send($message2)); @@ -420,7 +420,7 @@ public function testExceptionIsThrownIfAllTransportsDie() { $e = new Swift_TransportException('b0rken'); - $message = $this->getMockery('Swift_Mime_Message'); + $message = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); $connectionState1 = false; @@ -468,7 +468,7 @@ public function testExceptionIsThrownIfAllTransportsDie() } }); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); try { $transport->send($message); @@ -510,7 +510,7 @@ public function testStoppingTransportStopsAllDelegates() } }); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); $transport->stop(); } @@ -519,7 +519,7 @@ public function testTransportShowsAsNotStartedIfAllDelegatesDead() { $e = new Swift_TransportException('b0rken'); - $message = $this->getMockery('Swift_Mime_Message'); + $message = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); $connectionState1 = false; @@ -567,7 +567,7 @@ public function testTransportShowsAsNotStartedIfAllDelegatesDead() } }); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); $this->assertTrue($transport->isStarted()); try { @@ -582,8 +582,8 @@ public function testRestartingTransportRestartsDeadDelegates() { $e = new Swift_TransportException('b0rken'); - $message1 = $this->getMockery('Swift_Mime_Message'); - $message2 = $this->getMockery('Swift_Mime_Message'); + $message1 = $this->getMockery('Swift_Mime_SimpleMessage'); + $message2 = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); $connectionState1 = false; @@ -643,7 +643,7 @@ public function testRestartingTransportRestartsDeadDelegates() ->never() ->with($message2, \Mockery::any()); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->start(); $this->assertTrue($transport->isStarted()); try { @@ -660,10 +660,10 @@ public function testRestartingTransportRestartsDeadDelegates() public function testFailureReferenceIsPassedToDelegates() { - $failures = array(); + $failures = []; $testCase = $this; - $message = $this->getMockery('Swift_Mime_Message'); + $message = $this->getMockery('Swift_Mime_SimpleMessage'); $t1 = $this->getMockery('Swift_Transport'); $connectionState = false; @@ -690,14 +690,14 @@ public function testFailureReferenceIsPassedToDelegates() } }); - $transport = $this->_getTransport(array($t1)); + $transport = $this->getTransport([$t1]); $transport->start(); $transport->send($message, $failures); } public function testRegisterPluginDelegatesToLoadedTransports() { - $plugin = $this->_createPlugin(); + $plugin = $this->createPlugin(); $t1 = $this->getMockery('Swift_Transport'); $t2 = $this->getMockery('Swift_Transport'); @@ -709,10 +709,99 @@ public function testRegisterPluginDelegatesToLoadedTransports() ->once() ->with($plugin); - $transport = $this->_getTransport(array($t1, $t2)); + $transport = $this->getTransport([$t1, $t2]); $transport->registerPlugin($plugin); } + public function testEachDelegateIsPinged() + { + $t1 = $this->getMockery('Swift_Transport'); + $t2 = $this->getMockery('Swift_Transport'); + + $testCase = $this; + $t1->shouldReceive('isStarted') + ->zeroOrMoreTimes() + ->andReturnUsing(function () use (&$connectionState1) { + return $connectionState1; + }); + $t1->shouldReceive('ping') + ->once() + ->andReturn(true); + + $t2->shouldReceive('isStarted') + ->zeroOrMoreTimes() + ->andReturnUsing(function () use (&$connectionState2) { + return $connectionState2; + }); + $t2->shouldReceive('ping') + ->once() + ->andReturn(true); + + $transport = $this->getTransport([$t1, $t2]); + $this->assertTrue($transport->isStarted()); + $this->assertTrue($transport->ping()); + } + + public function testDelegateIsKilledWhenPingFails() + { + $t1 = $this->getMockery('Swift_Transport'); + $t2 = $this->getMockery('Swift_Transport'); + + $testCase = $this; + $t1->shouldReceive('isStarted') + ->zeroOrMoreTimes() + ->andReturnUsing(function () use (&$connectionState1) { + return $connectionState1; + }); + $t1->shouldReceive('ping') + ->twice() + ->andReturn(true); + + $t2->shouldReceive('isStarted') + ->zeroOrMoreTimes() + ->andReturnUsing(function () use (&$connectionState2) { + return $connectionState2; + }); + $t2->shouldReceive('ping') + ->once() + ->andReturn(false); + + $transport = $this->getTransport([$t1, $t2]); + $this->assertTrue($transport->ping()); + $this->assertTrue($transport->ping()); + $this->assertTrue($transport->isStarted()); + } + + public function testTransportShowsAsNotStartedIfAllPingFails() + { + $t1 = $this->getMockery('Swift_Transport'); + $t2 = $this->getMockery('Swift_Transport'); + + $testCase = $this; + $t1->shouldReceive('isStarted') + ->zeroOrMoreTimes() + ->andReturnUsing(function () use (&$connectionState1) { + return $connectionState1; + }); + $t1->shouldReceive('ping') + ->once() + ->andReturn(false); + + $t2->shouldReceive('isStarted') + ->zeroOrMoreTimes() + ->andReturnUsing(function () use (&$connectionState2) { + return $connectionState2; + }); + $t2->shouldReceive('ping') + ->once() + ->andReturn(false); + + $transport = $this->getTransport([$t1, $t2]); + $this->assertFalse($transport->ping()); + $this->assertFalse($transport->isStarted()); + $this->assertFalse($transport->ping()); + } + /** * Adapted from Yay_Matchers_ReferenceMatcher. */ @@ -726,7 +815,7 @@ public function varsAreReferences(&$ref1, &$ref2) } $copy = $ref2; - $randomString = uniqid('yay'); + $randomString = uniqid('yay', true); $ref2 = $randomString; $isRef = ($ref1 === $ref2); $ref2 = $copy; @@ -734,7 +823,7 @@ public function varsAreReferences(&$ref1, &$ref2) return $isRef; } - private function _getTransport(array $transports) + private function getTransport(array $transports) { $transport = new Swift_Transport_LoadBalancedTransport(); $transport->setTransports($transports); @@ -742,7 +831,7 @@ private function _getTransport(array $transports) return $transport; } - private function _createPlugin() + private function createPlugin() { return $this->getMockery('Swift_Events_EventListener'); } diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/MailTransportTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/MailTransportTest.php deleted file mode 100644 index 6672a3d..0000000 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/MailTransportTest.php +++ /dev/null @@ -1,533 +0,0 @@ -_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $headers = $this->_createHeaders(); - $message = $this->_createMessageWithRecipient($headers); - - $invoker->shouldReceive('mail') - ->once(); - - $transport->send($message); - } - - public function testTransportUsesToFieldBodyInSending() - { - $invoker = $this->_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $to = $this->_createHeader(); - $headers = $this->_createHeaders(array( - 'To' => $to, - )); - $message = $this->_createMessageWithRecipient($headers); - - $to->shouldReceive('getFieldBody') - ->zeroOrMoreTimes() - ->andReturn('Foo '); - $invoker->shouldReceive('mail') - ->once() - ->with('Foo ', \Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any()); - - $transport->send($message); - } - - public function testTransportUsesSubjectFieldBodyInSending() - { - $invoker = $this->_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $subj = $this->_createHeader(); - $headers = $this->_createHeaders(array( - 'Subject' => $subj, - )); - $message = $this->_createMessageWithRecipient($headers); - - $subj->shouldReceive('getFieldBody') - ->zeroOrMoreTimes() - ->andReturn('Thing'); - $invoker->shouldReceive('mail') - ->once() - ->with(\Mockery::any(), 'Thing', \Mockery::any(), \Mockery::any(), \Mockery::any()); - - $transport->send($message); - } - - public function testTransportUsesBodyOfMessage() - { - $invoker = $this->_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $headers = $this->_createHeaders(); - $message = $this->_createMessageWithRecipient($headers); - - $message->shouldReceive('toString') - ->zeroOrMoreTimes() - ->andReturn( - "To: Foo \r\n". - "\r\n". - 'This body' - ); - $invoker->shouldReceive('mail') - ->once() - ->with(\Mockery::any(), \Mockery::any(), 'This body', \Mockery::any(), \Mockery::any()); - - $transport->send($message); - } - - public function testTransportSettingUsingReturnPathForExtraParams() - { - $invoker = $this->_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $headers = $this->_createHeaders(); - $message = $this->_createMessageWithRecipient($headers); - - $message->shouldReceive('getReturnPath') - ->zeroOrMoreTimes() - ->andReturn( - 'foo@bar' - ); - $invoker->shouldReceive('mail') - ->once() - ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), '-ffoo@bar'); - - $transport->send($message); - } - - public function testTransportSettingEmptyExtraParams() - { - $invoker = $this->_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $headers = $this->_createHeaders(); - $message = $this->_createMessageWithRecipient($headers); - - $message->shouldReceive('getReturnPath') - ->zeroOrMoreTimes() - ->andReturn(null); - $message->shouldReceive('getSender') - ->zeroOrMoreTimes() - ->andReturn(null); - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(null); - $invoker->shouldReceive('mail') - ->once() - ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), null); - - $transport->send($message); - } - - public function testTransportSettingSettingExtraParamsWithF() - { - $invoker = $this->_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - $transport->setExtraParams('-x\'foo\' -f%s'); - - $headers = $this->_createHeaders(); - $message = $this->_createMessageWithRecipient($headers); - - $message->shouldReceive('getReturnPath') - ->zeroOrMoreTimes() - ->andReturn( - 'foo@bar' - ); - $message->shouldReceive('getSender') - ->zeroOrMoreTimes() - ->andReturn(null); - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(null); - $invoker->shouldReceive('mail') - ->once() - ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), '-x\'foo\' -ffoo@bar'); - - $transport->send($message); - } - - public function testTransportSettingSettingExtraParamsWithoutF() - { - $invoker = $this->_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - $transport->setExtraParams('-x\'foo\''); - - $headers = $this->_createHeaders(); - $message = $this->_createMessageWithRecipient($headers); - - $message->shouldReceive('getReturnPath') - ->zeroOrMoreTimes() - ->andReturn( - 'foo@bar' - ); - $message->shouldReceive('getSender') - ->zeroOrMoreTimes() - ->andReturn(null); - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(null); - $invoker->shouldReceive('mail') - ->once() - ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), '-x\'foo\''); - - $transport->send($message); - } - - public function testTransportSettingInvalidFromEmail() - { - $invoker = $this->_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $headers = $this->_createHeaders(); - $message = $this->_createMessageWithRecipient($headers); - - $message->shouldReceive('getReturnPath') - ->zeroOrMoreTimes() - ->andReturn( - '"attacker\" -oQ/tmp/ -X/var/www/cache/phpcode.php "@email.com' - ); - $message->shouldReceive('getSender') - ->zeroOrMoreTimes() - ->andReturn(null); - $message->shouldReceive('getFrom') - ->zeroOrMoreTimes() - ->andReturn(null); - $invoker->shouldReceive('mail') - ->once() - ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), null); - - $transport->send($message); - } - - public function testTransportUsesHeadersFromMessage() - { - $invoker = $this->_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $headers = $this->_createHeaders(); - $message = $this->_createMessageWithRecipient($headers); - - $message->shouldReceive('toString') - ->zeroOrMoreTimes() - ->andReturn( - "Subject: Stuff\r\n". - "\r\n". - 'This body' - ); - $invoker->shouldReceive('mail') - ->once() - ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), 'Subject: Stuff'.PHP_EOL, \Mockery::any()); - - $transport->send($message); - } - - public function testTransportReturnsCountOfAllRecipientsIfInvokerReturnsTrue() - { - $invoker = $this->_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $headers = $this->_createHeaders(); - $message = $this->_createMessage($headers); - - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(array('foo@bar' => null, 'zip@button' => null)); - $message->shouldReceive('getCc') - ->zeroOrMoreTimes() - ->andReturn(array('test@test' => null)); - $invoker->shouldReceive('mail') - ->once() - ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn(true); - - $this->assertEquals(3, $transport->send($message)); - } - - public function testTransportReturnsZeroIfInvokerReturnsFalse() - { - $invoker = $this->_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $headers = $this->_createHeaders(); - $message = $this->_createMessage($headers); - - $message->shouldReceive('getTo') - ->zeroOrMoreTimes() - ->andReturn(array('foo@bar' => null, 'zip@button' => null)); - $message->shouldReceive('getCc') - ->zeroOrMoreTimes() - ->andReturn(array('test@test' => null)); - $invoker->shouldReceive('mail') - ->once() - ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any()) - ->andReturn(false); - - $this->assertEquals(0, $transport->send($message)); - } - - public function testToHeaderIsRemovedFromHeaderSetDuringSending() - { - $invoker = $this->_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $to = $this->_createHeader(); - $headers = $this->_createHeaders(array( - 'To' => $to, - )); - $message = $this->_createMessageWithRecipient($headers); - - $headers->shouldReceive('remove') - ->once() - ->with('To'); - $headers->shouldReceive('remove') - ->zeroOrMoreTimes(); - $invoker->shouldReceive('mail') - ->once() - ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any()); - - $transport->send($message); - } - - public function testSubjectHeaderIsRemovedFromHeaderSetDuringSending() - { - $invoker = $this->_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $subject = $this->_createHeader(); - $headers = $this->_createHeaders(array( - 'Subject' => $subject, - )); - $message = $this->_createMessageWithRecipient($headers); - - $headers->shouldReceive('remove') - ->once() - ->with('Subject'); - $headers->shouldReceive('remove') - ->zeroOrMoreTimes(); - $invoker->shouldReceive('mail') - ->once() - ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any()); - - $transport->send($message); - } - - public function testToHeaderIsPutBackAfterSending() - { - $invoker = $this->_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $to = $this->_createHeader(); - $headers = $this->_createHeaders(array( - 'To' => $to, - )); - $message = $this->_createMessageWithRecipient($headers); - - $headers->shouldReceive('set') - ->once() - ->with($to); - $headers->shouldReceive('set') - ->zeroOrMoreTimes(); - $invoker->shouldReceive('mail') - ->once() - ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any()); - - $transport->send($message); - } - - public function testSubjectHeaderIsPutBackAfterSending() - { - $invoker = $this->_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $subject = $this->_createHeader(); - $headers = $this->_createHeaders(array( - 'Subject' => $subject, - )); - $message = $this->_createMessageWithRecipient($headers); - - $headers->shouldReceive('set') - ->once() - ->with($subject); - $headers->shouldReceive('set') - ->zeroOrMoreTimes(); - $invoker->shouldReceive('mail') - ->once() - ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any()); - - $transport->send($message); - } - - public function testMessageHeadersOnlyHavePHPEolsDuringSending() - { - $invoker = $this->_createInvoker(); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $subject = $this->_createHeader(); - $subject->shouldReceive('getFieldBody')->andReturn("Foo\r\nBar"); - - $headers = $this->_createHeaders(array( - 'Subject' => $subject, - )); - $message = $this->_createMessageWithRecipient($headers); - $message->shouldReceive('toString') - ->zeroOrMoreTimes() - ->andReturn( - "From: Foo\r\n\r\n". - "\r\n". - "This\r\n". - 'body' - ); - - if ("\r\n" != PHP_EOL) { - $expectedHeaders = "From: Foo\n\n"; - $expectedSubject = "Foo\nBar"; - $expectedBody = "This\nbody"; - } else { - $expectedHeaders = "From: Foo\r\n\r\n"; - $expectedSubject = "Foo\r\nBar"; - $expectedBody = "This\r\nbody"; - } - - $invoker->shouldReceive('mail') - ->once() - ->with(\Mockery::any(), $expectedSubject, $expectedBody, $expectedHeaders, \Mockery::any()); - - $transport->send($message); - } - - /** - * @expectedException \Swift_TransportException - * @expectedExceptionMessage Cannot send message without a recipient - */ - public function testExceptionWhenNoRecipients() - { - $invoker = $this->_createInvoker(); - $invoker->shouldReceive('mail'); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $headers = $this->_createHeaders(); - $message = $this->_createMessage($headers); - - $transport->send($message); - } - - public function noExceptionWhenRecipientsExistProvider() - { - return array( - array('To'), - array('Cc'), - array('Bcc'), - ); - } - - /** - * @dataProvider noExceptionWhenRecipientsExistProvider - * - * @param string $header - */ - public function testNoExceptionWhenRecipientsExist($header) - { - $invoker = $this->_createInvoker(); - $invoker->shouldReceive('mail'); - $dispatcher = $this->_createEventDispatcher(); - $transport = $this->_createTransport($invoker, $dispatcher); - - $headers = $this->_createHeaders(); - $message = $this->_createMessage($headers); - $message->shouldReceive(sprintf('get%s', $header))->andReturn(array('foo@bar' => 'Foo')); - - $transport->send($message); - } - - private function _createTransport($invoker, $dispatcher) - { - return new Swift_Transport_MailTransport($invoker, $dispatcher); - } - - private function _createEventDispatcher() - { - return $this->getMockery('Swift_Events_EventDispatcher')->shouldIgnoreMissing(); - } - - private function _createInvoker() - { - return $this->getMockery('Swift_Transport_MailInvoker'); - } - - private function _createMessage($headers) - { - $message = $this->getMockery('Swift_Mime_Message')->shouldIgnoreMissing(); - $message->shouldReceive('getHeaders') - ->zeroOrMoreTimes() - ->andReturn($headers); - - return $message; - } - - private function _createMessageWithRecipient($headers, $recipient = array('foo@bar' => 'Foo')) - { - $message = $this->_createMessage($headers); - $message->shouldReceive('getTo')->andReturn($recipient); - - return $message; - } - - private function _createHeaders($headers = array()) - { - $set = $this->getMockery('Swift_Mime_HeaderSet')->shouldIgnoreMissing(); - - if (count($headers) > 0) { - foreach ($headers as $name => $header) { - $set->shouldReceive('get') - ->zeroOrMoreTimes() - ->with($name) - ->andReturn($header); - $set->shouldReceive('has') - ->zeroOrMoreTimes() - ->with($name) - ->andReturn(true); - } - } - - $header = $this->_createHeader(); - $set->shouldReceive('get') - ->zeroOrMoreTimes() - ->andReturn($header); - $set->shouldReceive('has') - ->zeroOrMoreTimes() - ->andReturn(true); - - return $set; - } - - private function _createHeader() - { - return $this->getMockery('Swift_Mime_Header')->shouldIgnoreMissing(); - } -} diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/SendmailTransportTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/SendmailTransportTest.php index 9040f9e..fe40d6c 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/SendmailTransportTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/SendmailTransportTest.php @@ -2,31 +2,30 @@ class Swift_Transport_SendmailTransportTest extends Swift_Transport_AbstractSmtpEventSupportTest { - protected function _getTransport($buf, $dispatcher = null, $command = '/usr/sbin/sendmail -bs') + protected function getTransport($buf, $dispatcher = null, $addressEncoder = null, $command = '/usr/sbin/sendmail -bs') { if (!$dispatcher) { - $dispatcher = $this->_createEventDispatcher(); + $dispatcher = $this->createEventDispatcher(); } - $transport = new Swift_Transport_SendmailTransport($buf, $dispatcher); + $transport = new Swift_Transport_SendmailTransport($buf, $dispatcher, 'example.org', $addressEncoder); $transport->setCommand($command); return $transport; } - protected function _getSendmail($buf, $dispatcher = null) + protected function getSendmail($buf, $dispatcher = null) { if (!$dispatcher) { - $dispatcher = $this->_createEventDispatcher(); + $dispatcher = $this->createEventDispatcher(); } - $sendmail = new Swift_Transport_SendmailTransport($buf, $dispatcher); - return $sendmail; + return new Swift_Transport_SendmailTransport($buf, $dispatcher); } public function testCommandCanBeSetAndFetched() { - $buf = $this->_getBuffer(); - $sendmail = $this->_getSendmail($buf); + $buf = $this->getBuffer(); + $sendmail = $this->getSendmail($buf); $sendmail->setCommand('/usr/sbin/sendmail -bs'); $this->assertEquals('/usr/sbin/sendmail -bs', $sendmail->getCommand()); @@ -36,13 +35,13 @@ public function testCommandCanBeSetAndFetched() public function testSendingMessageIn_t_ModeUsesSimplePipe() { - $buf = $this->_getBuffer(); - $sendmail = $this->_getSendmail($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $sendmail = $this->getSendmail($buf); + $message = $this->createMessage(); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array('foo@bar' => 'Foobar', 'zip@button' => 'Zippy')); + ->andReturn(['foo@bar' => 'Foobar', 'zip@button' => 'Zippy']); $message->shouldReceive('toByteStream') ->once() ->with($buf); @@ -52,10 +51,10 @@ public function testSendingMessageIn_t_ModeUsesSimplePipe() ->once(); $buf->shouldReceive('setWriteTranslations') ->once() - ->with(array("\r\n" => "\n", "\n." => "\n..")); + ->with(["\r\n" => "\n", "\n." => "\n.."]); $buf->shouldReceive('setWriteTranslations') ->once() - ->with(array()); + ->with([]); $sendmail->setCommand('/usr/sbin/sendmail -t'); $this->assertEquals(2, $sendmail->send($message)); @@ -63,13 +62,13 @@ public function testSendingMessageIn_t_ModeUsesSimplePipe() public function testSendingIn_t_ModeWith_i_FlagDoesntEscapeDot() { - $buf = $this->_getBuffer(); - $sendmail = $this->_getSendmail($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $sendmail = $this->getSendmail($buf); + $message = $this->createMessage(); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array('foo@bar' => 'Foobar', 'zip@button' => 'Zippy')); + ->andReturn(['foo@bar' => 'Foobar', 'zip@button' => 'Zippy']); $message->shouldReceive('toByteStream') ->once() ->with($buf); @@ -79,10 +78,10 @@ public function testSendingIn_t_ModeWith_i_FlagDoesntEscapeDot() ->once(); $buf->shouldReceive('setWriteTranslations') ->once() - ->with(array("\r\n" => "\n")); + ->with(["\r\n" => "\n"]); $buf->shouldReceive('setWriteTranslations') ->once() - ->with(array()); + ->with([]); $sendmail->setCommand('/usr/sbin/sendmail -i -t'); $this->assertEquals(2, $sendmail->send($message)); @@ -90,13 +89,13 @@ public function testSendingIn_t_ModeWith_i_FlagDoesntEscapeDot() public function testSendingInTModeWith_oi_FlagDoesntEscapeDot() { - $buf = $this->_getBuffer(); - $sendmail = $this->_getSendmail($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $sendmail = $this->getSendmail($buf); + $message = $this->createMessage(); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array('foo@bar' => 'Foobar', 'zip@button' => 'Zippy')); + ->andReturn(['foo@bar' => 'Foobar', 'zip@button' => 'Zippy']); $message->shouldReceive('toByteStream') ->once() ->with($buf); @@ -106,10 +105,10 @@ public function testSendingInTModeWith_oi_FlagDoesntEscapeDot() ->once(); $buf->shouldReceive('setWriteTranslations') ->once() - ->with(array("\r\n" => "\n")); + ->with(["\r\n" => "\n"]); $buf->shouldReceive('setWriteTranslations') ->once() - ->with(array()); + ->with([]); $sendmail->setCommand('/usr/sbin/sendmail -oi -t'); $this->assertEquals(2, $sendmail->send($message)); @@ -117,13 +116,13 @@ public function testSendingInTModeWith_oi_FlagDoesntEscapeDot() public function testSendingMessageRegeneratesId() { - $buf = $this->_getBuffer(); - $sendmail = $this->_getSendmail($buf); - $message = $this->_createMessage(); + $buf = $this->getBuffer(); + $sendmail = $this->getSendmail($buf); + $message = $this->createMessage(); $message->shouldReceive('getTo') ->zeroOrMoreTimes() - ->andReturn(array('foo@bar' => 'Foobar', 'zip@button' => 'Zippy')); + ->andReturn(['foo@bar' => 'Foobar', 'zip@button' => 'Zippy']); $message->shouldReceive('generateId'); $buf->shouldReceive('initialize') ->once(); @@ -131,10 +130,10 @@ public function testSendingMessageRegeneratesId() ->once(); $buf->shouldReceive('setWriteTranslations') ->once() - ->with(array("\r\n" => "\n", "\n." => "\n..")); + ->with(["\r\n" => "\n", "\n." => "\n.."]); $buf->shouldReceive('setWriteTranslations') ->once() - ->with(array()); + ->with([]); $sendmail->setCommand('/usr/sbin/sendmail -t'); $this->assertEquals(2, $sendmail->send($message)); @@ -142,8 +141,8 @@ public function testSendingMessageRegeneratesId() public function testFluidInterface() { - $buf = $this->_getBuffer(); - $sendmail = $this->_getTransport($buf); + $buf = $this->getBuffer(); + $sendmail = $this->getTransport($buf); $ref = $sendmail->setCommand('/foo'); $this->assertEquals($ref, $sendmail); diff --git a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/StreamBufferTest.php b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/StreamBufferTest.php index 5109b56..540709a 100644 --- a/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/StreamBufferTest.php +++ b/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/StreamBufferTest.php @@ -1,42 +1,42 @@ _createFactory(); + $factory = $this->createFactory(); $factory->expects($this->once()) ->method('createFilter') ->with('a', 'b') - ->will($this->returnCallback(array($this, '_createFilter'))); + ->will($this->returnCallback([$this, 'createFilter'])); - $buffer = $this->_createBuffer($factory); - $buffer->setWriteTranslations(array('a' => 'b')); + $buffer = $this->createBuffer($factory); + $buffer->setWriteTranslations(['a' => 'b']); } public function testOverridingTranslationsOnlyAddsNeededFilters() { - $factory = $this->_createFactory(); + $factory = $this->createFactory(); $factory->expects($this->exactly(2)) ->method('createFilter') - ->will($this->returnCallback(array($this, '_createFilter'))); + ->will($this->returnCallback([$this, 'createFilter'])); - $buffer = $this->_createBuffer($factory); - $buffer->setWriteTranslations(array('a' => 'b')); - $buffer->setWriteTranslations(array('x' => 'y', 'a' => 'b')); + $buffer = $this->createBuffer($factory); + $buffer->setWriteTranslations(['a' => 'b']); + $buffer->setWriteTranslations(['x' => 'y', 'a' => 'b']); } - private function _createBuffer($replacementFactory) + private function createBuffer($replacementFactory) { return new Swift_Transport_StreamBuffer($replacementFactory); } - private function _createFactory() + private function createFactory() { return $this->getMockBuilder('Swift_ReplacementFilterFactory')->getMock(); } - public function _createFilter() + public function createFilter() { return $this->getMockBuilder('Swift_StreamFilter')->getMock(); } diff --git a/vendor/symfony/polyfill-iconv/Iconv.php b/vendor/symfony/polyfill-iconv/Iconv.php new file mode 100644 index 0000000..77e7ca0 --- /dev/null +++ b/vendor/symfony/polyfill-iconv/Iconv.php @@ -0,0 +1,741 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Iconv; + +/** + * iconv implementation in pure PHP, UTF-8 centric. + * + * Implemented: + * - iconv - Convert string to requested character encoding + * - iconv_mime_decode - Decodes a MIME header field + * - iconv_mime_decode_headers - Decodes multiple MIME header fields at once + * - iconv_get_encoding - Retrieve internal configuration variables of iconv extension + * - iconv_set_encoding - Set current setting for character encoding conversion + * - iconv_mime_encode - Composes a MIME header field + * - iconv_strlen - Returns the character count of string + * - iconv_strpos - Finds position of first occurrence of a needle within a haystack + * - iconv_strrpos - Finds the last occurrence of a needle within a haystack + * - iconv_substr - Cut out part of a string + * + * Charsets available for conversion are defined by files + * in the charset/ directory and by Iconv::$alias below. + * You're welcome to send back any addition you make. + * + * @author Nicolas Grekas + * + * @internal + */ +final class Iconv +{ + const ERROR_ILLEGAL_CHARACTER = 'iconv(): Detected an illegal character in input string'; + const ERROR_WRONG_CHARSET = 'iconv(): Wrong charset, conversion from `%s\' to `%s\' is not allowed'; + + public static $inputEncoding = 'utf-8'; + public static $outputEncoding = 'utf-8'; + public static $internalEncoding = 'utf-8'; + + private static $alias = array( + 'utf8' => 'utf-8', + 'ascii' => 'us-ascii', + 'tis-620' => 'iso-8859-11', + 'cp1250' => 'windows-1250', + 'cp1251' => 'windows-1251', + 'cp1252' => 'windows-1252', + 'cp1253' => 'windows-1253', + 'cp1254' => 'windows-1254', + 'cp1255' => 'windows-1255', + 'cp1256' => 'windows-1256', + 'cp1257' => 'windows-1257', + 'cp1258' => 'windows-1258', + 'shift-jis' => 'cp932', + 'shift_jis' => 'cp932', + 'latin1' => 'iso-8859-1', + 'latin2' => 'iso-8859-2', + 'latin3' => 'iso-8859-3', + 'latin4' => 'iso-8859-4', + 'latin5' => 'iso-8859-9', + 'latin6' => 'iso-8859-10', + 'latin7' => 'iso-8859-13', + 'latin8' => 'iso-8859-14', + 'latin9' => 'iso-8859-15', + 'latin10' => 'iso-8859-16', + 'iso8859-1' => 'iso-8859-1', + 'iso8859-2' => 'iso-8859-2', + 'iso8859-3' => 'iso-8859-3', + 'iso8859-4' => 'iso-8859-4', + 'iso8859-5' => 'iso-8859-5', + 'iso8859-6' => 'iso-8859-6', + 'iso8859-7' => 'iso-8859-7', + 'iso8859-8' => 'iso-8859-8', + 'iso8859-9' => 'iso-8859-9', + 'iso8859-10' => 'iso-8859-10', + 'iso8859-11' => 'iso-8859-11', + 'iso8859-12' => 'iso-8859-12', + 'iso8859-13' => 'iso-8859-13', + 'iso8859-14' => 'iso-8859-14', + 'iso8859-15' => 'iso-8859-15', + 'iso8859-16' => 'iso-8859-16', + 'iso_8859-1' => 'iso-8859-1', + 'iso_8859-2' => 'iso-8859-2', + 'iso_8859-3' => 'iso-8859-3', + 'iso_8859-4' => 'iso-8859-4', + 'iso_8859-5' => 'iso-8859-5', + 'iso_8859-6' => 'iso-8859-6', + 'iso_8859-7' => 'iso-8859-7', + 'iso_8859-8' => 'iso-8859-8', + 'iso_8859-9' => 'iso-8859-9', + 'iso_8859-10' => 'iso-8859-10', + 'iso_8859-11' => 'iso-8859-11', + 'iso_8859-12' => 'iso-8859-12', + 'iso_8859-13' => 'iso-8859-13', + 'iso_8859-14' => 'iso-8859-14', + 'iso_8859-15' => 'iso-8859-15', + 'iso_8859-16' => 'iso-8859-16', + 'iso88591' => 'iso-8859-1', + 'iso88592' => 'iso-8859-2', + 'iso88593' => 'iso-8859-3', + 'iso88594' => 'iso-8859-4', + 'iso88595' => 'iso-8859-5', + 'iso88596' => 'iso-8859-6', + 'iso88597' => 'iso-8859-7', + 'iso88598' => 'iso-8859-8', + 'iso88599' => 'iso-8859-9', + 'iso885910' => 'iso-8859-10', + 'iso885911' => 'iso-8859-11', + 'iso885912' => 'iso-8859-12', + 'iso885913' => 'iso-8859-13', + 'iso885914' => 'iso-8859-14', + 'iso885915' => 'iso-8859-15', + 'iso885916' => 'iso-8859-16', + ); + private static $translitMap = array(); + private static $convertMap = array(); + private static $errorHandler; + private static $lastError; + + private static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4); + private static $isValidUtf8; + + public static function iconv($inCharset, $outCharset, $str) + { + $str = (string) $str; + if ('' === $str) { + return ''; + } + + // Prepare for //IGNORE and //TRANSLIT + + $translit = $ignore = ''; + + $outCharset = strtolower($outCharset); + $inCharset = strtolower($inCharset); + + if ('' === $outCharset) { + $outCharset = 'iso-8859-1'; + } + if ('' === $inCharset) { + $inCharset = 'iso-8859-1'; + } + + do { + $loop = false; + + if ('//translit' === substr($outCharset, -10)) { + $loop = $translit = true; + $outCharset = substr($outCharset, 0, -10); + } + + if ('//ignore' === substr($outCharset, -8)) { + $loop = $ignore = true; + $outCharset = substr($outCharset, 0, -8); + } + } while ($loop); + + do { + $loop = false; + + if ('//translit' === substr($inCharset, -10)) { + $loop = true; + $inCharset = substr($inCharset, 0, -10); + } + + if ('//ignore' === substr($inCharset, -8)) { + $loop = true; + $inCharset = substr($inCharset, 0, -8); + } + } while ($loop); + + if (isset(self::$alias[$inCharset])) { + $inCharset = self::$alias[$inCharset]; + } + if (isset(self::$alias[$outCharset])) { + $outCharset = self::$alias[$outCharset]; + } + + // Load charset maps + + if (('utf-8' !== $inCharset && !self::loadMap('from.', $inCharset, $inMap)) + || ('utf-8' !== $outCharset && !self::loadMap('to.', $outCharset, $outMap))) { + trigger_error(sprintf(self::ERROR_WRONG_CHARSET, $inCharset, $outCharset)); + + return false; + } + + if ('utf-8' !== $inCharset) { + // Convert input to UTF-8 + $result = ''; + if (self::mapToUtf8($result, $inMap, $str, $ignore)) { + $str = $result; + } else { + $str = false; + } + self::$isValidUtf8 = true; + } else { + self::$isValidUtf8 = preg_match('//u', $str); + + if (!self::$isValidUtf8 && !$ignore) { + trigger_error(self::ERROR_ILLEGAL_CHARACTER); + + return false; + } + + if ('utf-8' === $outCharset) { + // UTF-8 validation + $str = self::utf8ToUtf8($str, $ignore); + } + } + + if ('utf-8' !== $outCharset && false !== $str) { + // Convert output to UTF-8 + $result = ''; + if (self::mapFromUtf8($result, $outMap, $str, $ignore, $translit)) { + return $result; + } + + return false; + } + + return $str; + } + + public static function iconv_mime_decode_headers($str, $mode = 0, $charset = null) + { + if (null === $charset) { + $charset = self::$internalEncoding; + } + + if (false !== strpos($str, "\r")) { + $str = strtr(str_replace("\r\n", "\n", $str), "\r", "\n"); + } + $str = explode("\n\n", $str, 2); + + $headers = array(); + + $str = preg_split('/\n(?![ \t])/', $str[0]); + foreach ($str as $str) { + $str = self::iconv_mime_decode($str, $mode, $charset); + if (false === $str) { + return false; + } + $str = explode(':', $str, 2); + + if (2 === \count($str)) { + if (isset($headers[$str[0]])) { + if (!\is_array($headers[$str[0]])) { + $headers[$str[0]] = array($headers[$str[0]]); + } + $headers[$str[0]][] = ltrim($str[1]); + } else { + $headers[$str[0]] = ltrim($str[1]); + } + } + } + + return $headers; + } + + public static function iconv_mime_decode($str, $mode = 0, $charset = null) + { + if (null === $charset) { + $charset = self::$internalEncoding; + } + if (ICONV_MIME_DECODE_CONTINUE_ON_ERROR & $mode) { + $charset .= '//IGNORE'; + } + + if (false !== strpos($str, "\r")) { + $str = strtr(str_replace("\r\n", "\n", $str), "\r", "\n"); + } + $str = preg_split('/\n(?![ \t])/', rtrim($str), 2); + $str = preg_replace('/[ \t]*\n[ \t]+/', ' ', rtrim($str[0])); + $str = preg_split('/=\?([^?]+)\?([bqBQ])\?(.*?)\?=/', $str, -1, PREG_SPLIT_DELIM_CAPTURE); + + $result = self::iconv('utf-8', $charset, $str[0]); + if (false === $result) { + return false; + } + + $i = 1; + $len = \count($str); + + while ($i < $len) { + $c = strtolower($str[$i]); + if ((ICONV_MIME_DECODE_CONTINUE_ON_ERROR & $mode) + && 'utf-8' !== $c + && !isset(self::$alias[$c]) + && !self::loadMap('from.', $c, $d)) { + $d = false; + } elseif ('B' === strtoupper($str[$i + 1])) { + $d = base64_decode($str[$i + 2]); + } else { + $d = rawurldecode(strtr(str_replace('%', '%25', $str[$i + 2]), '=_', '% ')); + } + + if (false !== $d) { + if ('' !== $d) { + if ('' === $d = self::iconv($c, $charset, $d)) { + $str[$i + 3] = substr($str[$i + 3], 1); + } else { + $result .= $d; + } + } + $d = self::iconv('utf-8', $charset, $str[$i + 3]); + if ('' !== trim($d)) { + $result .= $d; + } + } elseif (ICONV_MIME_DECODE_CONTINUE_ON_ERROR & $mode) { + $result .= "=?{$str[$i]}?{$str[$i + 1]}?{$str[$i + 2]}?={$str[$i + 3]}"; + } else { + $result = false; + break; + } + + $i += 4; + } + + return $result; + } + + public static function iconv_get_encoding($type = 'all') + { + switch ($type) { + case 'input_encoding': return self::$inputEncoding; + case 'output_encoding': return self::$outputEncoding; + case 'internal_encoding': return self::$internalEncoding; + } + + return array( + 'input_encoding' => self::$inputEncoding, + 'output_encoding' => self::$outputEncoding, + 'internal_encoding' => self::$internalEncoding, + ); + } + + public static function iconv_set_encoding($type, $charset) + { + switch ($type) { + case 'input_encoding': self::$inputEncoding = $charset; break; + case 'output_encoding': self::$outputEncoding = $charset; break; + case 'internal_encoding': self::$internalEncoding = $charset; break; + + default: return false; + } + + return true; + } + + public static function iconv_mime_encode($fieldName, $fieldValue, $pref = null) + { + if (!\is_array($pref)) { + $pref = array(); + } + + $pref += array( + 'scheme' => 'B', + 'input-charset' => self::$internalEncoding, + 'output-charset' => self::$internalEncoding, + 'line-length' => 76, + 'line-break-chars' => "\r\n", + ); + + if (preg_match('/[\x80-\xFF]/', $fieldName)) { + $fieldName = ''; + } + + $scheme = strtoupper(substr($pref['scheme'], 0, 1)); + $in = strtolower($pref['input-charset']); + $out = strtolower($pref['output-charset']); + + if ('utf-8' !== $in && false === $fieldValue = self::iconv($in, 'utf-8', $fieldValue)) { + return false; + } + + preg_match_all('/./us', $fieldValue, $chars); + + $chars = isset($chars[0]) ? $chars[0] : array(); + + $lineBreak = (int) $pref['line-length']; + $lineStart = "=?{$pref['output-charset']}?{$scheme}?"; + $lineLength = \strlen($fieldName) + 2 + \strlen($lineStart) + 2; + $lineOffset = \strlen($lineStart) + 3; + $lineData = ''; + + $fieldValue = array(); + + $Q = 'Q' === $scheme; + + foreach ($chars as $c) { + if ('utf-8' !== $out && false === $c = self::iconv('utf-8', $out, $c)) { + return false; + } + + $o = $Q + ? $c = preg_replace_callback( + '/[=_\?\x00-\x1F\x80-\xFF]/', + array(__CLASS__, 'qpByteCallback'), + $c + ) + : base64_encode($lineData.$c); + + if (isset($o[$lineBreak - $lineLength])) { + if (!$Q) { + $lineData = base64_encode($lineData); + } + $fieldValue[] = $lineStart.$lineData.'?='; + $lineLength = $lineOffset; + $lineData = ''; + } + + $lineData .= $c; + $Q && $lineLength += \strlen($c); + } + + if ('' !== $lineData) { + if (!$Q) { + $lineData = base64_encode($lineData); + } + $fieldValue[] = $lineStart.$lineData.'?='; + } + + return $fieldName.': '.implode($pref['line-break-chars'].' ', $fieldValue); + } + + public static function iconv_strlen($s, $encoding = null) + { + static $hasXml = null; + if (null === $hasXml) { + $hasXml = \extension_loaded('xml'); + } + + if ($hasXml) { + return self::strlen1($s, $encoding); + } + + return self::strlen2($s, $encoding); + } + + public static function strlen1($s, $encoding = null) + { + if (null === $encoding) { + $encoding = self::$internalEncoding; + } + if (0 !== stripos($encoding, 'utf-8') && false === $s = self::iconv($encoding, 'utf-8', $s)) { + return false; + } + + return \strlen(utf8_decode($s)); + } + + public static function strlen2($s, $encoding = null) + { + if (null === $encoding) { + $encoding = self::$internalEncoding; + } + if (0 !== stripos($encoding, 'utf-8') && false === $s = self::iconv($encoding, 'utf-8', $s)) { + return false; + } + + $ulenMask = self::$ulenMask; + + $i = 0; + $j = 0; + $len = \strlen($s); + + while ($i < $len) { + $u = $s[$i] & "\xF0"; + $i += isset($ulenMask[$u]) ? $ulenMask[$u] : 1; + ++$j; + } + + return $j; + } + + public static function iconv_strpos($haystack, $needle, $offset = 0, $encoding = null) + { + if (null === $encoding) { + $encoding = self::$internalEncoding; + } + + if (0 !== stripos($encoding, 'utf-8')) { + if (false === $haystack = self::iconv($encoding, 'utf-8', $haystack)) { + return false; + } + if (false === $needle = self::iconv($encoding, 'utf-8', $needle)) { + return false; + } + } + + if ($offset = (int) $offset) { + $haystack = self::iconv_substr($haystack, $offset, 2147483647, 'utf-8'); + } + $pos = strpos($haystack, $needle); + + return false === $pos ? false : ($offset + ($pos ? self::iconv_strlen(substr($haystack, 0, $pos), 'utf-8') : 0)); + } + + public static function iconv_strrpos($haystack, $needle, $encoding = null) + { + if (null === $encoding) { + $encoding = self::$internalEncoding; + } + + if (0 !== stripos($encoding, 'utf-8')) { + if (false === $haystack = self::iconv($encoding, 'utf-8', $haystack)) { + return false; + } + if (false === $needle = self::iconv($encoding, 'utf-8', $needle)) { + return false; + } + } + + $pos = isset($needle[0]) ? strrpos($haystack, $needle) : false; + + return false === $pos ? false : self::iconv_strlen($pos ? substr($haystack, 0, $pos) : $haystack, 'utf-8'); + } + + public static function iconv_substr($s, $start, $length = 2147483647, $encoding = null) + { + if (null === $encoding) { + $encoding = self::$internalEncoding; + } + if (0 !== stripos($encoding, 'utf-8')) { + $encoding = null; + } elseif (false === $s = self::iconv($encoding, 'utf-8', $s)) { + return false; + } + + $s = (string) $s; + $slen = self::iconv_strlen($s, 'utf-8'); + $start = (int) $start; + + if (0 > $start) { + $start += $slen; + } + if (0 > $start) { + return false; + } + if ($start >= $slen) { + return false; + } + + $rx = $slen - $start; + + if (0 > $length) { + $length += $rx; + } + if (0 === $length) { + return ''; + } + if (0 > $length) { + return false; + } + + if ($length > $rx) { + $length = $rx; + } + + $rx = '/^'.($start ? self::pregOffset($start) : '').'('.self::pregOffset($length).')/u'; + + $s = preg_match($rx, $s, $s) ? $s[1] : ''; + + if (null === $encoding) { + return $s; + } + + return self::iconv('utf-8', $encoding, $s); + } + + private static function loadMap($type, $charset, &$map) + { + if (!isset(self::$convertMap[$type.$charset])) { + if (false === $map = self::getData($type.$charset)) { + if ('to.' === $type && self::loadMap('from.', $charset, $map)) { + $map = array_flip($map); + } else { + return false; + } + } + + self::$convertMap[$type.$charset] = $map; + } else { + $map = self::$convertMap[$type.$charset]; + } + + return true; + } + + private static function utf8ToUtf8($str, $ignore) + { + $ulenMask = self::$ulenMask; + $valid = self::$isValidUtf8; + + $u = $str; + $i = $j = 0; + $len = \strlen($str); + + while ($i < $len) { + if ($str[$i] < "\x80") { + $u[$j++] = $str[$i++]; + } else { + $ulen = $str[$i] & "\xF0"; + $ulen = isset($ulenMask[$ulen]) ? $ulenMask[$ulen] : 1; + $uchr = substr($str, $i, $ulen); + + if (1 === $ulen || !($valid || preg_match('/^.$/us', $uchr))) { + if ($ignore) { + ++$i; + continue; + } + + trigger_error(self::ERROR_ILLEGAL_CHARACTER); + + return false; + } else { + $i += $ulen; + } + + $u[$j++] = $uchr[0]; + + isset($uchr[1]) && 0 !== ($u[$j++] = $uchr[1]) + && isset($uchr[2]) && 0 !== ($u[$j++] = $uchr[2]) + && isset($uchr[3]) && 0 !== ($u[$j++] = $uchr[3]); + } + } + + return substr($u, 0, $j); + } + + private static function mapToUtf8(&$result, array $map, $str, $ignore) + { + $len = \strlen($str); + for ($i = 0; $i < $len; ++$i) { + if (isset($str[$i + 1], $map[$str[$i].$str[$i + 1]])) { + $result .= $map[$str[$i].$str[++$i]]; + } elseif (isset($map[$str[$i]])) { + $result .= $map[$str[$i]]; + } elseif (!$ignore) { + trigger_error(self::ERROR_ILLEGAL_CHARACTER); + + return false; + } + } + + return true; + } + + private static function mapFromUtf8(&$result, array $map, $str, $ignore, $translit) + { + $ulenMask = self::$ulenMask; + $valid = self::$isValidUtf8; + + if ($translit && !self::$translitMap) { + self::$translitMap = self::getData('translit'); + } + + $i = 0; + $len = \strlen($str); + + while ($i < $len) { + if ($str[$i] < "\x80") { + $uchr = $str[$i++]; + } else { + $ulen = $str[$i] & "\xF0"; + $ulen = isset($ulenMask[$ulen]) ? $ulenMask[$ulen] : 1; + $uchr = substr($str, $i, $ulen); + + if ($ignore && (1 === $ulen || !($valid || preg_match('/^.$/us', $uchr)))) { + ++$i; + continue; + } else { + $i += $ulen; + } + } + + if (isset($map[$uchr])) { + $result .= $map[$uchr]; + } elseif ($translit) { + if (isset(self::$translitMap[$uchr])) { + $uchr = self::$translitMap[$uchr]; + } elseif ($uchr >= "\xC3\x80") { + $uchr = \Normalizer::normalize($uchr, \Normalizer::NFD); + + if ($uchr[0] < "\x80") { + $uchr = $uchr[0]; + } elseif ($ignore) { + continue; + } else { + return false; + } + } elseif ($ignore) { + continue; + } else { + return false; + } + + $str = $uchr.substr($str, $i); + $len = \strlen($str); + $i = 0; + } elseif (!$ignore) { + return false; + } + } + + return true; + } + + private static function qpByteCallback(array $m) + { + return '='.strtoupper(dechex(\ord($m[0]))); + } + + private static function pregOffset($offset) + { + $rx = array(); + $offset = (int) $offset; + + while ($offset > 65535) { + $rx[] = '.{65535}'; + $offset -= 65535; + } + + return implode('', $rx).'.{'.$offset.'}'; + } + + private static function getData($file) + { + if (file_exists($file = __DIR__.'/Resources/charset/'.$file.'.php')) { + return require $file; + } + + return false; + } +} diff --git a/vendor/symfony/polyfill-iconv/LICENSE b/vendor/symfony/polyfill-iconv/LICENSE new file mode 100644 index 0000000..24fa32c --- /dev/null +++ b/vendor/symfony/polyfill-iconv/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015-2018 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/symfony/polyfill-iconv/README.md b/vendor/symfony/polyfill-iconv/README.md new file mode 100644 index 0000000..2421831 --- /dev/null +++ b/vendor/symfony/polyfill-iconv/README.md @@ -0,0 +1,14 @@ +Symfony Polyfill / Iconv +======================== + +This component provides a native PHP implementation of the +[php.net/iconv](http://php.net/iconv) functions +(short of [`ob_iconv_handler`](http://php.net/manual/en/function.ob-iconv-handler.php)). + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.big5.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.big5.php new file mode 100644 index 0000000..b119854 --- /dev/null +++ b/vendor/symfony/polyfill-iconv/Resources/charset/from.big5.php @@ -0,0 +1,13719 @@ + ' ', + 'A' => ',', + 'B' => '、', + 'C' => '。', + 'D' => '.', + 'E' => '•', + 'F' => ';', + 'G' => ':', + 'H' => '?', + 'I' => '!', + 'J' => '︰', + 'K' => '…', + 'L' => '‥', + 'M' => '﹐', + 'N' => '、', + 'O' => '﹒', + 'P' => '·', + 'Q' => '﹔', + 'R' => '﹕', + 'S' => '﹖', + 'T' => '﹗', + 'U' => '|', + 'V' => '–', + 'W' => '︱', + 'X' => '—', + 'Y' => '︳', + 'Z' => '�', + '[' => '︴', + '\\' => '﹏', + ']' => '(', + '^' => ')', + '_' => '︵', + '`' => '︶', + 'a' => '{', + 'b' => '}', + 'c' => '︷', + 'd' => '︸', + 'e' => '〔', + 'f' => '〕', + 'g' => '︹', + 'h' => '︺', + 'i' => '【', + 'j' => '】', + 'k' => '︻', + 'l' => '︼', + 'm' => '《', + 'n' => '》', + 'o' => '︽', + 'p' => '︾', + 'q' => '〈', + 'r' => '〉', + 's' => '︿', + 't' => '﹀', + 'u' => '「', + 'v' => '」', + 'w' => '﹁', + 'x' => '﹂', + 'y' => '『', + 'z' => '』', + '{' => '﹃', + '|' => '﹄', + '}' => '﹙', + '~' => '﹚', + '' => '﹛', + '' => '﹜', + '' => '﹝', + '' => '﹞', + '' => '‘', + '' => '’', + '' => '“', + '' => '”', + '' => '〝', + '' => '〞', + '' => '‵', + '' => '′', + '' => '#', + '' => '&', + '' => '*', + '' => '※', + '' => '§', + '' => '〃', + '' => '○', + '' => '●', + '' => '△', + '' => '▲', + '' => '◎', + '' => '☆', + '' => '★', + '' => '◇', + '' => '◆', + '' => '□', + '' => '■', + '' => '▽', + '' => '▼', + '' => '㊣', + '' => '℅', + '' => '‾', + '' => '�', + '' => '_', + '' => '�', + '' => '﹉', + '' => '﹊', + '' => '﹍', + '' => '﹎', + '' => '﹋', + '' => '﹌', + '' => '﹟', + '' => '﹠', + '' => '﹡', + '' => '+', + '' => '-', + '' => '×', + '' => '÷', + '' => '±', + '' => '√', + '' => '<', + '' => '>', + '' => '=', + '' => '≦', + '' => '≧', + '' => '≠', + '' => '∞', + '' => '≒', + '' => '≡', + '' => '﹢', + '' => '﹣', + '' => '﹤', + '' => '﹥', + '' => '﹦', + '' => '∼', + '' => '∩', + '' => '∪', + '' => '⊥', + '' => '∠', + '' => '∟', + '' => '⊿', + '' => '㏒', + '' => '㏑', + '' => '∫', + '' => '∮', + '' => '∵', + '' => '∴', + '' => '♀', + '' => '♂', + '' => '♁', + '' => '☉', + '' => '↑', + '' => '↓', + '' => '←', + '' => '→', + '' => '↖', + '' => '↗', + '' => '↙', + '' => '↘', + '' => '∥', + '' => '∣', + '' => '�', + '@' => '�', + 'A' => '/', + 'B' => '\', + 'C' => '$', + 'D' => '¥', + 'E' => '〒', + 'F' => '¢', + 'G' => '£', + 'H' => '%', + 'I' => '@', + 'J' => '℃', + 'K' => '℉', + 'L' => '﹩', + 'M' => '﹪', + 'N' => '﹫', + 'O' => '㏕', + 'P' => '㎜', + 'Q' => '㎝', + 'R' => '㎞', + 'S' => '㏎', + 'T' => '㎡', + 'U' => '㎎', + 'V' => '㎏', + 'W' => '㏄', + 'X' => '°', + 'Y' => '兙', + 'Z' => '兛', + '[' => '兞', + '\\' => '兝', + ']' => '兡', + '^' => '兣', + '_' => '嗧', + '`' => '瓩', + 'a' => '糎', + 'b' => '▁', + 'c' => '▂', + 'd' => '▃', + 'e' => '▄', + 'f' => '▅', + 'g' => '▆', + 'h' => '▇', + 'i' => '█', + 'j' => '▏', + 'k' => '▎', + 'l' => '▍', + 'm' => '▌', + 'n' => '▋', + 'o' => '▊', + 'p' => '▉', + 'q' => '┼', + 'r' => '┴', + 's' => '┬', + 't' => '┤', + 'u' => '├', + 'v' => '▔', + 'w' => '─', + 'x' => '│', + 'y' => '▕', + 'z' => '┌', + '{' => '┐', + '|' => '└', + '}' => '┘', + '~' => '╭', + '' => '╮', + '' => '╰', + '' => '╯', + '' => '═', + '' => '╞', + '' => '╪', + '' => '╡', + '' => '◢', + '' => '◣', + '' => '◥', + '' => '◤', + '' => '╱', + '' => '╲', + '' => '╳', + '' => '0', + '' => '1', + '' => '2', + '' => '3', + '' => '4', + '' => '5', + '' => '6', + '' => '7', + '' => '8', + '' => '9', + '' => 'Ⅰ', + '' => 'Ⅱ', + '' => 'Ⅲ', + '' => 'Ⅳ', + '' => 'Ⅴ', + '' => 'Ⅵ', + '' => 'Ⅶ', + '' => 'Ⅷ', + '' => 'Ⅸ', + '' => 'Ⅹ', + '' => '〡', + '' => '〢', + '' => '〣', + '' => '〤', + '' => '〥', + '' => '〦', + '' => '〧', + '' => '〨', + '' => '〩', + '' => '�', + '' => '卄', + '' => '�', + '' => 'A', + '' => 'B', + '' => 'C', + '' => 'D', + '' => 'E', + '' => 'F', + '' => 'G', + '' => 'H', + '' => 'I', + '' => 'J', + '' => 'K', + '' => 'L', + '' => 'M', + '' => 'N', + '' => 'O', + '' => 'P', + '' => 'Q', + '' => 'R', + '' => 'S', + '' => 'T', + '' => 'U', + '' => 'V', + '' => 'W', + '' => 'X', + '' => 'Y', + '' => 'Z', + '' => 'a', + '' => 'b', + '' => 'c', + '' => 'd', + '' => 'e', + '' => 'f', + '' => 'g', + '' => 'h', + '' => 'i', + '' => 'j', + '' => 'k', + '' => 'l', + '' => 'm', + '' => 'n', + '' => 'o', + '' => 'p', + '' => 'q', + '' => 'r', + '' => 's', + '' => 't', + '' => 'u', + '' => 'v', + '@' => 'w', + 'A' => 'x', + 'B' => 'y', + 'C' => 'z', + 'D' => 'Α', + 'E' => 'Β', + 'F' => 'Γ', + 'G' => 'Δ', + 'H' => 'Ε', + 'I' => 'Ζ', + 'J' => 'Η', + 'K' => 'Θ', + 'L' => 'Ι', + 'M' => 'Κ', + 'N' => 'Λ', + 'O' => 'Μ', + 'P' => 'Ν', + 'Q' => 'Ξ', + 'R' => 'Ο', + 'S' => 'Π', + 'T' => 'Ρ', + 'U' => 'Σ', + 'V' => 'Τ', + 'W' => 'Υ', + 'X' => 'Φ', + 'Y' => 'Χ', + 'Z' => 'Ψ', + '[' => 'Ω', + '\\' => 'α', + ']' => 'β', + '^' => 'γ', + '_' => 'δ', + '`' => 'ε', + 'a' => 'ζ', + 'b' => 'η', + 'c' => 'θ', + 'd' => 'ι', + 'e' => 'κ', + 'f' => 'λ', + 'g' => 'μ', + 'h' => 'ν', + 'i' => 'ξ', + 'j' => 'ο', + 'k' => 'π', + 'l' => 'ρ', + 'm' => 'σ', + 'n' => 'τ', + 'o' => 'υ', + 'p' => 'φ', + 'q' => 'χ', + 'r' => 'ψ', + 's' => 'ω', + 't' => 'ㄅ', + 'u' => 'ㄆ', + 'v' => 'ㄇ', + 'w' => 'ㄈ', + 'x' => 'ㄉ', + 'y' => 'ㄊ', + 'z' => 'ㄋ', + '{' => 'ㄌ', + '|' => 'ㄍ', + '}' => 'ㄎ', + '~' => 'ㄏ', + '' => 'ㄐ', + '' => 'ㄑ', + '' => 'ㄒ', + '' => 'ㄓ', + '' => 'ㄔ', + '' => 'ㄕ', + '' => 'ㄖ', + '' => 'ㄗ', + '' => 'ㄘ', + '' => 'ㄙ', + '' => 'ㄚ', + '' => 'ㄛ', + '' => 'ㄜ', + '' => 'ㄝ', + '' => 'ㄞ', + '' => 'ㄟ', + '' => 'ㄠ', + '' => 'ㄡ', + '' => 'ㄢ', + '' => 'ㄣ', + '' => 'ㄤ', + '' => 'ㄥ', + '' => 'ㄦ', + '' => 'ㄧ', + '' => 'ㄨ', + '' => 'ㄩ', + '' => '˙', + '' => 'ˉ', + '' => 'ˊ', + '' => 'ˇ', + '' => 'ˋ', + '@' => '一', + 'A' => '乙', + 'B' => '丁', + 'C' => '七', + 'D' => '乃', + 'E' => '九', + 'F' => '了', + 'G' => '二', + 'H' => '人', + 'I' => '儿', + 'J' => '入', + 'K' => '八', + 'L' => '几', + 'M' => '刀', + 'N' => '刁', + 'O' => '力', + 'P' => '匕', + 'Q' => '十', + 'R' => '卜', + 'S' => '又', + 'T' => '三', + 'U' => '下', + 'V' => '丈', + 'W' => '上', + 'X' => '丫', + 'Y' => '丸', + 'Z' => '凡', + '[' => '久', + '\\' => '么', + ']' => '也', + '^' => '乞', + '_' => '于', + '`' => '亡', + 'a' => '兀', + 'b' => '刃', + 'c' => '勺', + 'd' => '千', + 'e' => '叉', + 'f' => '口', + 'g' => '土', + 'h' => '士', + 'i' => '夕', + 'j' => '大', + 'k' => '女', + 'l' => '子', + 'm' => '孑', + 'n' => '孓', + 'o' => '寸', + 'p' => '小', + 'q' => '尢', + 'r' => '尸', + 's' => '山', + 't' => '川', + 'u' => '工', + 'v' => '己', + 'w' => '已', + 'x' => '巳', + 'y' => '巾', + 'z' => '干', + '{' => '廾', + '|' => '弋', + '}' => '弓', + '~' => '才', + '' => '丑', + '' => '丐', + '' => '不', + '' => '中', + '' => '丰', + '' => '丹', + '' => '之', + '' => '尹', + '' => '予', + '' => '云', + '' => '井', + '' => '互', + '' => '五', + '' => '亢', + '' => '仁', + '' => '什', + '' => '仃', + '' => '仆', + '' => '仇', + '' => '仍', + '' => '今', + '' => '介', + '' => '仄', + '' => '元', + '' => '允', + '' => '內', + '' => '六', + '' => '兮', + '' => '公', + '' => '冗', + '' => '凶', + '' => '分', + '' => '切', + '' => '刈', + '' => '勻', + '' => '勾', + '' => '勿', + '' => '化', + '' => '匹', + '' => '午', + '' => '升', + '' => '卅', + '' => '卞', + '' => '厄', + '' => '友', + '' => '及', + '' => '反', + '' => '壬', + '' => '天', + '' => '夫', + '' => '太', + '' => '夭', + '' => '孔', + '' => '少', + '' => '尤', + '' => '尺', + '' => '屯', + '' => '巴', + '' => '幻', + '' => '廿', + '' => '弔', + '' => '引', + '' => '心', + '' => '戈', + '' => '戶', + '' => '手', + '' => '扎', + '' => '支', + '' => '文', + '' => '斗', + '' => '斤', + '' => '方', + '' => '日', + '' => '曰', + '' => '月', + '' => '木', + '' => '欠', + '' => '止', + '' => '歹', + '' => '毋', + '' => '比', + '' => '毛', + '' => '氏', + '' => '水', + '' => '火', + '' => '爪', + '' => '父', + '' => '爻', + '' => '片', + '' => '牙', + '' => '牛', + '' => '犬', + '' => '王', + '' => '丙', + '@' => '世', + 'A' => '丕', + 'B' => '且', + 'C' => '丘', + 'D' => '主', + 'E' => '乍', + 'F' => '乏', + 'G' => '乎', + 'H' => '以', + 'I' => '付', + 'J' => '仔', + 'K' => '仕', + 'L' => '他', + 'M' => '仗', + 'N' => '代', + 'O' => '令', + 'P' => '仙', + 'Q' => '仞', + 'R' => '充', + 'S' => '兄', + 'T' => '冉', + 'U' => '冊', + 'V' => '冬', + 'W' => '凹', + 'X' => '出', + 'Y' => '凸', + 'Z' => '刊', + '[' => '加', + '\\' => '功', + ']' => '包', + '^' => '匆', + '_' => '北', + '`' => '匝', + 'a' => '仟', + 'b' => '半', + 'c' => '卉', + 'd' => '卡', + 'e' => '占', + 'f' => '卯', + 'g' => '卮', + 'h' => '去', + 'i' => '可', + 'j' => '古', + 'k' => '右', + 'l' => '召', + 'm' => '叮', + 'n' => '叩', + 'o' => '叨', + 'p' => '叼', + 'q' => '司', + 'r' => '叵', + 's' => '叫', + 't' => '另', + 'u' => '只', + 'v' => '史', + 'w' => '叱', + 'x' => '台', + 'y' => '句', + 'z' => '叭', + '{' => '叻', + '|' => '四', + '}' => '囚', + '~' => '外', + '' => '央', + '' => '失', + '' => '奴', + '' => '奶', + '' => '孕', + '' => '它', + '' => '尼', + '' => '巨', + '' => '巧', + '' => '左', + '' => '市', + '' => '布', + '' => '平', + '' => '幼', + '' => '弁', + '' => '弘', + '' => '弗', + '' => '必', + '' => '戊', + '' => '打', + '' => '扔', + '' => '扒', + '' => '扑', + '' => '斥', + '' => '旦', + '' => '朮', + '' => '本', + '' => '未', + '' => '末', + '' => '札', + '' => '正', + '' => '母', + '' => '民', + '' => '氐', + '' => '永', + '' => '汁', + '' => '汀', + '' => '氾', + '' => '犯', + '' => '玄', + '' => '玉', + '' => '瓜', + '' => '瓦', + '' => '甘', + '' => '生', + '' => '用', + '' => '甩', + '' => '田', + '' => '由', + '' => '甲', + '' => '申', + '' => '疋', + '' => '白', + '' => '皮', + '' => '皿', + '' => '目', + '' => '矛', + '' => '矢', + '' => '石', + '' => '示', + '' => '禾', + '' => '穴', + '' => '立', + '' => '丞', + '' => '丟', + '' => '乒', + '' => '乓', + '' => '乩', + '' => '亙', + '' => '交', + '' => '亦', + '' => '亥', + '' => '仿', + '' => '伉', + '' => '伙', + '' => '伊', + '' => '伕', + '' => '伍', + '' => '伐', + '' => '休', + '' => '伏', + '' => '仲', + '' => '件', + '' => '任', + '' => '仰', + '' => '仳', + '' => '份', + '' => '企', + '' => '伋', + '' => '光', + '' => '兇', + '' => '兆', + '' => '先', + '' => '全', + '@' => '共', + 'A' => '再', + 'B' => '冰', + 'C' => '列', + 'D' => '刑', + 'E' => '划', + 'F' => '刎', + 'G' => '刖', + 'H' => '劣', + 'I' => '匈', + 'J' => '匡', + 'K' => '匠', + 'L' => '印', + 'M' => '危', + 'N' => '吉', + 'O' => '吏', + 'P' => '同', + 'Q' => '吊', + 'R' => '吐', + 'S' => '吁', + 'T' => '吋', + 'U' => '各', + 'V' => '向', + 'W' => '名', + 'X' => '合', + 'Y' => '吃', + 'Z' => '后', + '[' => '吆', + '\\' => '吒', + ']' => '因', + '^' => '回', + '_' => '囝', + '`' => '圳', + 'a' => '地', + 'b' => '在', + 'c' => '圭', + 'd' => '圬', + 'e' => '圯', + 'f' => '圩', + 'g' => '夙', + 'h' => '多', + 'i' => '夷', + 'j' => '夸', + 'k' => '妄', + 'l' => '奸', + 'm' => '妃', + 'n' => '好', + 'o' => '她', + 'p' => '如', + 'q' => '妁', + 'r' => '字', + 's' => '存', + 't' => '宇', + 'u' => '守', + 'v' => '宅', + 'w' => '安', + 'x' => '寺', + 'y' => '尖', + 'z' => '屹', + '{' => '州', + '|' => '帆', + '}' => '并', + '~' => '年', + '' => '式', + '' => '弛', + '' => '忙', + '' => '忖', + '' => '戎', + '' => '戌', + '' => '戍', + '' => '成', + '' => '扣', + '' => '扛', + '' => '托', + '' => '收', + '' => '早', + '' => '旨', + '' => '旬', + '' => '旭', + '' => '曲', + '' => '曳', + '' => '有', + '' => '朽', + '' => '朴', + '' => '朱', + '' => '朵', + '' => '次', + '' => '此', + '' => '死', + '' => '氖', + '' => '汝', + '' => '汗', + '' => '汙', + '' => '江', + '' => '池', + '' => '汐', + '' => '汕', + '' => '污', + '' => '汛', + '' => '汍', + '' => '汎', + '' => '灰', + '' => '牟', + '' => '牝', + '' => '百', + '' => '竹', + '' => '米', + '' => '糸', + '' => '缶', + '' => '羊', + '' => '羽', + '' => '老', + '' => '考', + '' => '而', + '' => '耒', + '' => '耳', + '' => '聿', + '' => '肉', + '' => '肋', + '' => '肌', + '' => '臣', + '' => '自', + '' => '至', + '' => '臼', + '' => '舌', + '' => '舛', + '' => '舟', + '' => '艮', + '' => '色', + '' => '艾', + '' => '虫', + '' => '血', + '' => '行', + '' => '衣', + '' => '西', + '' => '阡', + '' => '串', + '' => '亨', + '' => '位', + '' => '住', + '' => '佇', + '' => '佗', + '' => '佞', + '' => '伴', + '' => '佛', + '' => '何', + '' => '估', + '' => '佐', + '' => '佑', + '' => '伽', + '' => '伺', + '' => '伸', + '' => '佃', + '' => '佔', + '' => '似', + '' => '但', + '' => '佣', + '@' => '作', + 'A' => '你', + 'B' => '伯', + 'C' => '低', + 'D' => '伶', + 'E' => '余', + 'F' => '佝', + 'G' => '佈', + 'H' => '佚', + 'I' => '兌', + 'J' => '克', + 'K' => '免', + 'L' => '兵', + 'M' => '冶', + 'N' => '冷', + 'O' => '別', + 'P' => '判', + 'Q' => '利', + 'R' => '刪', + 'S' => '刨', + 'T' => '劫', + 'U' => '助', + 'V' => '努', + 'W' => '劬', + 'X' => '匣', + 'Y' => '即', + 'Z' => '卵', + '[' => '吝', + '\\' => '吭', + ']' => '吞', + '^' => '吾', + '_' => '否', + '`' => '呎', + 'a' => '吧', + 'b' => '呆', + 'c' => '呃', + 'd' => '吳', + 'e' => '呈', + 'f' => '呂', + 'g' => '君', + 'h' => '吩', + 'i' => '告', + 'j' => '吹', + 'k' => '吻', + 'l' => '吸', + 'm' => '吮', + 'n' => '吵', + 'o' => '吶', + 'p' => '吠', + 'q' => '吼', + 'r' => '呀', + 's' => '吱', + 't' => '含', + 'u' => '吟', + 'v' => '听', + 'w' => '囪', + 'x' => '困', + 'y' => '囤', + 'z' => '囫', + '{' => '坊', + '|' => '坑', + '}' => '址', + '~' => '坍', + '' => '均', + '' => '坎', + '' => '圾', + '' => '坐', + '' => '坏', + '' => '圻', + '' => '壯', + '' => '夾', + '' => '妝', + '' => '妒', + '' => '妨', + '' => '妞', + '' => '妣', + '' => '妙', + '' => '妖', + '' => '妍', + '' => '妤', + '' => '妓', + '' => '妊', + '' => '妥', + '' => '孝', + '' => '孜', + '' => '孚', + '' => '孛', + '' => '完', + '' => '宋', + '' => '宏', + '' => '尬', + '' => '局', + '' => '屁', + '' => '尿', + '' => '尾', + '' => '岐', + '' => '岑', + '' => '岔', + '' => '岌', + '' => '巫', + '' => '希', + '' => '序', + '' => '庇', + '' => '床', + '' => '廷', + '' => '弄', + '' => '弟', + '' => '彤', + '' => '形', + '' => '彷', + '' => '役', + '' => '忘', + '' => '忌', + '' => '志', + '' => '忍', + '' => '忱', + '' => '快', + '' => '忸', + '' => '忪', + '' => '戒', + '' => '我', + '' => '抄', + '' => '抗', + '' => '抖', + '' => '技', + '' => '扶', + '' => '抉', + '' => '扭', + '' => '把', + '' => '扼', + '' => '找', + '' => '批', + '' => '扳', + '' => '抒', + '' => '扯', + '' => '折', + '' => '扮', + '' => '投', + '' => '抓', + '' => '抑', + '' => '抆', + '' => '改', + '' => '攻', + '' => '攸', + '' => '旱', + '' => '更', + '' => '束', + '' => '李', + '' => '杏', + '' => '材', + '' => '村', + '' => '杜', + '' => '杖', + '' => '杞', + '' => '杉', + '' => '杆', + '' => '杠', + '@' => '杓', + 'A' => '杗', + 'B' => '步', + 'C' => '每', + 'D' => '求', + 'E' => '汞', + 'F' => '沙', + 'G' => '沁', + 'H' => '沈', + 'I' => '沉', + 'J' => '沅', + 'K' => '沛', + 'L' => '汪', + 'M' => '決', + 'N' => '沐', + 'O' => '汰', + 'P' => '沌', + 'Q' => '汨', + 'R' => '沖', + 'S' => '沒', + 'T' => '汽', + 'U' => '沃', + 'V' => '汲', + 'W' => '汾', + 'X' => '汴', + 'Y' => '沆', + 'Z' => '汶', + '[' => '沍', + '\\' => '沔', + ']' => '沘', + '^' => '沂', + '_' => '灶', + '`' => '灼', + 'a' => '災', + 'b' => '灸', + 'c' => '牢', + 'd' => '牡', + 'e' => '牠', + 'f' => '狄', + 'g' => '狂', + 'h' => '玖', + 'i' => '甬', + 'j' => '甫', + 'k' => '男', + 'l' => '甸', + 'm' => '皂', + 'n' => '盯', + 'o' => '矣', + 'p' => '私', + 'q' => '秀', + 'r' => '禿', + 's' => '究', + 't' => '系', + 'u' => '罕', + 'v' => '肖', + 'w' => '肓', + 'x' => '肝', + 'y' => '肘', + 'z' => '肛', + '{' => '肚', + '|' => '育', + '}' => '良', + '~' => '芒', + '' => '芋', + '' => '芍', + '' => '見', + '' => '角', + '' => '言', + '' => '谷', + '' => '豆', + '' => '豕', + '' => '貝', + '' => '赤', + '' => '走', + '' => '足', + '' => '身', + '' => '車', + '' => '辛', + '' => '辰', + '' => '迂', + '' => '迆', + '' => '迅', + '' => '迄', + '' => '巡', + '' => '邑', + '' => '邢', + '' => '邪', + '' => '邦', + '' => '那', + '' => '酉', + '' => '釆', + '' => '里', + '' => '防', + '' => '阮', + '' => '阱', + '' => '阪', + '' => '阬', + '' => '並', + '' => '乖', + '' => '乳', + '' => '事', + '' => '些', + '' => '亞', + '' => '享', + '' => '京', + '' => '佯', + '' => '依', + '' => '侍', + '' => '佳', + '' => '使', + '' => '佬', + '' => '供', + '' => '例', + '' => '來', + '' => '侃', + '' => '佰', + '' => '併', + '' => '侈', + '' => '佩', + '' => '佻', + '' => '侖', + '' => '佾', + '' => '侏', + '' => '侑', + '' => '佺', + '' => '兔', + '' => '兒', + '' => '兕', + '' => '兩', + '' => '具', + '' => '其', + '' => '典', + '' => '冽', + '' => '函', + '' => '刻', + '' => '券', + '' => '刷', + '' => '刺', + '' => '到', + '' => '刮', + '' => '制', + '' => '剁', + '' => '劾', + '' => '劻', + '' => '卒', + '' => '協', + '' => '卓', + '' => '卑', + '' => '卦', + '' => '卷', + '' => '卸', + '' => '卹', + '' => '取', + '' => '叔', + '' => '受', + '' => '味', + '' => '呵', + '@' => '咖', + 'A' => '呸', + 'B' => '咕', + 'C' => '咀', + 'D' => '呻', + 'E' => '呷', + 'F' => '咄', + 'G' => '咒', + 'H' => '咆', + 'I' => '呼', + 'J' => '咐', + 'K' => '呱', + 'L' => '呶', + 'M' => '和', + 'N' => '咚', + 'O' => '呢', + 'P' => '周', + 'Q' => '咋', + 'R' => '命', + 'S' => '咎', + 'T' => '固', + 'U' => '垃', + 'V' => '坷', + 'W' => '坪', + 'X' => '坩', + 'Y' => '坡', + 'Z' => '坦', + '[' => '坤', + '\\' => '坼', + ']' => '夜', + '^' => '奉', + '_' => '奇', + '`' => '奈', + 'a' => '奄', + 'b' => '奔', + 'c' => '妾', + 'd' => '妻', + 'e' => '委', + 'f' => '妹', + 'g' => '妮', + 'h' => '姑', + 'i' => '姆', + 'j' => '姐', + 'k' => '姍', + 'l' => '始', + 'm' => '姓', + 'n' => '姊', + 'o' => '妯', + 'p' => '妳', + 'q' => '姒', + 'r' => '姅', + 's' => '孟', + 't' => '孤', + 'u' => '季', + 'v' => '宗', + 'w' => '定', + 'x' => '官', + 'y' => '宜', + 'z' => '宙', + '{' => '宛', + '|' => '尚', + '}' => '屈', + '~' => '居', + '' => '屆', + '' => '岷', + '' => '岡', + '' => '岸', + '' => '岩', + '' => '岫', + '' => '岱', + '' => '岳', + '' => '帘', + '' => '帚', + '' => '帖', + '' => '帕', + '' => '帛', + '' => '帑', + '' => '幸', + '' => '庚', + '' => '店', + '' => '府', + '' => '底', + '' => '庖', + '' => '延', + '' => '弦', + '' => '弧', + '' => '弩', + '' => '往', + '' => '征', + '' => '彿', + '' => '彼', + '' => '忝', + '' => '忠', + '' => '忽', + '' => '念', + '' => '忿', + '' => '怏', + '' => '怔', + '' => '怯', + '' => '怵', + '' => '怖', + '' => '怪', + '' => '怕', + '' => '怡', + '' => '性', + '' => '怩', + '' => '怫', + '' => '怛', + '' => '或', + '' => '戕', + '' => '房', + '' => '戾', + '' => '所', + '' => '承', + '' => '拉', + '' => '拌', + '' => '拄', + '' => '抿', + '' => '拂', + '' => '抹', + '' => '拒', + '' => '招', + '' => '披', + '' => '拓', + '' => '拔', + '' => '拋', + '' => '拈', + '' => '抨', + '' => '抽', + '' => '押', + '' => '拐', + '' => '拙', + '' => '拇', + '' => '拍', + '' => '抵', + '' => '拚', + '' => '抱', + '' => '拘', + '' => '拖', + '' => '拗', + '' => '拆', + '' => '抬', + '' => '拎', + '' => '放', + '' => '斧', + '' => '於', + '' => '旺', + '' => '昔', + '' => '易', + '' => '昌', + '' => '昆', + '' => '昂', + '' => '明', + '' => '昀', + '' => '昏', + '' => '昕', + '' => '昊', + '@' => '昇', + 'A' => '服', + 'B' => '朋', + 'C' => '杭', + 'D' => '枋', + 'E' => '枕', + 'F' => '東', + 'G' => '果', + 'H' => '杳', + 'I' => '杷', + 'J' => '枇', + 'K' => '枝', + 'L' => '林', + 'M' => '杯', + 'N' => '杰', + 'O' => '板', + 'P' => '枉', + 'Q' => '松', + 'R' => '析', + 'S' => '杵', + 'T' => '枚', + 'U' => '枓', + 'V' => '杼', + 'W' => '杪', + 'X' => '杲', + 'Y' => '欣', + 'Z' => '武', + '[' => '歧', + '\\' => '歿', + ']' => '氓', + '^' => '氛', + '_' => '泣', + '`' => '注', + 'a' => '泳', + 'b' => '沱', + 'c' => '泌', + 'd' => '泥', + 'e' => '河', + 'f' => '沽', + 'g' => '沾', + 'h' => '沼', + 'i' => '波', + 'j' => '沫', + 'k' => '法', + 'l' => '泓', + 'm' => '沸', + 'n' => '泄', + 'o' => '油', + 'p' => '況', + 'q' => '沮', + 'r' => '泗', + 's' => '泅', + 't' => '泱', + 'u' => '沿', + 'v' => '治', + 'w' => '泡', + 'x' => '泛', + 'y' => '泊', + 'z' => '沬', + '{' => '泯', + '|' => '泜', + '}' => '泖', + '~' => '泠', + '' => '炕', + '' => '炎', + '' => '炒', + '' => '炊', + '' => '炙', + '' => '爬', + '' => '爭', + '' => '爸', + '' => '版', + '' => '牧', + '' => '物', + '' => '狀', + '' => '狎', + '' => '狙', + '' => '狗', + '' => '狐', + '' => '玩', + '' => '玨', + '' => '玟', + '' => '玫', + '' => '玥', + '' => '甽', + '' => '疝', + '' => '疙', + '' => '疚', + '' => '的', + '' => '盂', + '' => '盲', + '' => '直', + '' => '知', + '' => '矽', + '' => '社', + '' => '祀', + '' => '祁', + '' => '秉', + '' => '秈', + '' => '空', + '' => '穹', + '' => '竺', + '' => '糾', + '' => '罔', + '' => '羌', + '' => '羋', + '' => '者', + '' => '肺', + '' => '肥', + '' => '肢', + '' => '肱', + '' => '股', + '' => '肫', + '' => '肩', + '' => '肴', + '' => '肪', + '' => '肯', + '' => '臥', + '' => '臾', + '' => '舍', + '' => '芳', + '' => '芝', + '' => '芙', + '' => '芭', + '' => '芽', + '' => '芟', + '' => '芹', + '' => '花', + '' => '芬', + '' => '芥', + '' => '芯', + '' => '芸', + '' => '芣', + '' => '芰', + '' => '芾', + '' => '芷', + '' => '虎', + '' => '虱', + '' => '初', + '' => '表', + '' => '軋', + '' => '迎', + '' => '返', + '' => '近', + '' => '邵', + '' => '邸', + '' => '邱', + '' => '邶', + '' => '采', + '' => '金', + '' => '長', + '' => '門', + '' => '阜', + '' => '陀', + '' => '阿', + '' => '阻', + '' => '附', + '@' => '陂', + 'A' => '隹', + 'B' => '雨', + 'C' => '青', + 'D' => '非', + 'E' => '亟', + 'F' => '亭', + 'G' => '亮', + 'H' => '信', + 'I' => '侵', + 'J' => '侯', + 'K' => '便', + 'L' => '俠', + 'M' => '俑', + 'N' => '俏', + 'O' => '保', + 'P' => '促', + 'Q' => '侶', + 'R' => '俘', + 'S' => '俟', + 'T' => '俊', + 'U' => '俗', + 'V' => '侮', + 'W' => '俐', + 'X' => '俄', + 'Y' => '係', + 'Z' => '俚', + '[' => '俎', + '\\' => '俞', + ']' => '侷', + '^' => '兗', + '_' => '冒', + '`' => '冑', + 'a' => '冠', + 'b' => '剎', + 'c' => '剃', + 'd' => '削', + 'e' => '前', + 'f' => '剌', + 'g' => '剋', + 'h' => '則', + 'i' => '勇', + 'j' => '勉', + 'k' => '勃', + 'l' => '勁', + 'm' => '匍', + 'n' => '南', + 'o' => '卻', + 'p' => '厚', + 'q' => '叛', + 'r' => '咬', + 's' => '哀', + 't' => '咨', + 'u' => '哎', + 'v' => '哉', + 'w' => '咸', + 'x' => '咦', + 'y' => '咳', + 'z' => '哇', + '{' => '哂', + '|' => '咽', + '}' => '咪', + '~' => '品', + '' => '哄', + '' => '哈', + '' => '咯', + '' => '咫', + '' => '咱', + '' => '咻', + '' => '咩', + '' => '咧', + '' => '咿', + '' => '囿', + '' => '垂', + '' => '型', + '' => '垠', + '' => '垣', + '' => '垢', + '' => '城', + '' => '垮', + '' => '垓', + '' => '奕', + '' => '契', + '' => '奏', + '' => '奎', + '' => '奐', + '' => '姜', + '' => '姘', + '' => '姿', + '' => '姣', + '' => '姨', + '' => '娃', + '' => '姥', + '' => '姪', + '' => '姚', + '' => '姦', + '' => '威', + '' => '姻', + '' => '孩', + '' => '宣', + '' => '宦', + '' => '室', + '' => '客', + '' => '宥', + '' => '封', + '' => '屎', + '' => '屏', + '' => '屍', + '' => '屋', + '' => '峙', + '' => '峒', + '' => '巷', + '' => '帝', + '' => '帥', + '' => '帟', + '' => '幽', + '' => '庠', + '' => '度', + '' => '建', + '' => '弈', + '' => '弭', + '' => '彥', + '' => '很', + '' => '待', + '' => '徊', + '' => '律', + '' => '徇', + '' => '後', + '' => '徉', + '' => '怒', + '' => '思', + '' => '怠', + '' => '急', + '' => '怎', + '' => '怨', + '' => '恍', + '' => '恰', + '' => '恨', + '' => '恢', + '' => '恆', + '' => '恃', + '' => '恬', + '' => '恫', + '' => '恪', + '' => '恤', + '' => '扁', + '' => '拜', + '' => '挖', + '' => '按', + '' => '拼', + '' => '拭', + '' => '持', + '' => '拮', + '' => '拽', + '' => '指', + '' => '拱', + '' => '拷', + '@' => '拯', + 'A' => '括', + 'B' => '拾', + 'C' => '拴', + 'D' => '挑', + 'E' => '挂', + 'F' => '政', + 'G' => '故', + 'H' => '斫', + 'I' => '施', + 'J' => '既', + 'K' => '春', + 'L' => '昭', + 'M' => '映', + 'N' => '昧', + 'O' => '是', + 'P' => '星', + 'Q' => '昨', + 'R' => '昱', + 'S' => '昤', + 'T' => '曷', + 'U' => '柿', + 'V' => '染', + 'W' => '柱', + 'X' => '柔', + 'Y' => '某', + 'Z' => '柬', + '[' => '架', + '\\' => '枯', + ']' => '柵', + '^' => '柩', + '_' => '柯', + '`' => '柄', + 'a' => '柑', + 'b' => '枴', + 'c' => '柚', + 'd' => '查', + 'e' => '枸', + 'f' => '柏', + 'g' => '柞', + 'h' => '柳', + 'i' => '枰', + 'j' => '柙', + 'k' => '柢', + 'l' => '柝', + 'm' => '柒', + 'n' => '歪', + 'o' => '殃', + 'p' => '殆', + 'q' => '段', + 'r' => '毒', + 's' => '毗', + 't' => '氟', + 'u' => '泉', + 'v' => '洋', + 'w' => '洲', + 'x' => '洪', + 'y' => '流', + 'z' => '津', + '{' => '洌', + '|' => '洱', + '}' => '洞', + '~' => '洗', + '' => '活', + '' => '洽', + '' => '派', + '' => '洶', + '' => '洛', + '' => '泵', + '' => '洹', + '' => '洧', + '' => '洸', + '' => '洩', + '' => '洮', + '' => '洵', + '' => '洎', + '' => '洫', + '' => '炫', + '' => '為', + '' => '炳', + '' => '炬', + '' => '炯', + '' => '炭', + '' => '炸', + '' => '炮', + '' => '炤', + '' => '爰', + '' => '牲', + '' => '牯', + '' => '牴', + '' => '狩', + '' => '狠', + '' => '狡', + '' => '玷', + '' => '珊', + '' => '玻', + '' => '玲', + '' => '珍', + '' => '珀', + '' => '玳', + '' => '甚', + '' => '甭', + '' => '畏', + '' => '界', + '' => '畎', + '' => '畋', + '' => '疫', + '' => '疤', + '' => '疥', + '' => '疢', + '' => '疣', + '' => '癸', + '' => '皆', + '' => '皇', + '' => '皈', + '' => '盈', + '' => '盆', + '' => '盃', + '' => '盅', + '' => '省', + '' => '盹', + '' => '相', + '' => '眉', + '' => '看', + '' => '盾', + '' => '盼', + '' => '眇', + '' => '矜', + '' => '砂', + '' => '研', + '' => '砌', + '' => '砍', + '' => '祆', + '' => '祉', + '' => '祈', + '' => '祇', + '' => '禹', + '' => '禺', + '' => '科', + '' => '秒', + '' => '秋', + '' => '穿', + '' => '突', + '' => '竿', + '' => '竽', + '' => '籽', + '' => '紂', + '' => '紅', + '' => '紀', + '' => '紉', + '' => '紇', + '' => '約', + '' => '紆', + '' => '缸', + '' => '美', + '' => '羿', + '' => '耄', + '@' => '耐', + 'A' => '耍', + 'B' => '耑', + 'C' => '耶', + 'D' => '胖', + 'E' => '胥', + 'F' => '胚', + 'G' => '胃', + 'H' => '胄', + 'I' => '背', + 'J' => '胡', + 'K' => '胛', + 'L' => '胎', + 'M' => '胞', + 'N' => '胤', + 'O' => '胝', + 'P' => '致', + 'Q' => '舢', + 'R' => '苧', + 'S' => '范', + 'T' => '茅', + 'U' => '苣', + 'V' => '苛', + 'W' => '苦', + 'X' => '茄', + 'Y' => '若', + 'Z' => '茂', + '[' => '茉', + '\\' => '苒', + ']' => '苗', + '^' => '英', + '_' => '茁', + '`' => '苜', + 'a' => '苔', + 'b' => '苑', + 'c' => '苞', + 'd' => '苓', + 'e' => '苟', + 'f' => '苯', + 'g' => '茆', + 'h' => '虐', + 'i' => '虹', + 'j' => '虻', + 'k' => '虺', + 'l' => '衍', + 'm' => '衫', + 'n' => '要', + 'o' => '觔', + 'p' => '計', + 'q' => '訂', + 'r' => '訃', + 's' => '貞', + 't' => '負', + 'u' => '赴', + 'v' => '赳', + 'w' => '趴', + 'x' => '軍', + 'y' => '軌', + 'z' => '述', + '{' => '迦', + '|' => '迢', + '}' => '迪', + '~' => '迥', + '' => '迭', + '' => '迫', + '' => '迤', + '' => '迨', + '' => '郊', + '' => '郎', + '' => '郁', + '' => '郃', + '' => '酋', + '' => '酊', + '' => '重', + '' => '閂', + '' => '限', + '' => '陋', + '' => '陌', + '' => '降', + '' => '面', + '' => '革', + '' => '韋', + '' => '韭', + '' => '音', + '' => '頁', + '' => '風', + '' => '飛', + '' => '食', + '' => '首', + '' => '香', + '' => '乘', + '' => '亳', + '' => '倌', + '' => '倍', + '' => '倣', + '' => '俯', + '' => '倦', + '' => '倥', + '' => '俸', + '' => '倩', + '' => '倖', + '' => '倆', + '' => '值', + '' => '借', + '' => '倚', + '' => '倒', + '' => '們', + '' => '俺', + '' => '倀', + '' => '倔', + '' => '倨', + '' => '俱', + '' => '倡', + '' => '個', + '' => '候', + '' => '倘', + '' => '俳', + '' => '修', + '' => '倭', + '' => '倪', + '' => '俾', + '' => '倫', + '' => '倉', + '' => '兼', + '' => '冤', + '' => '冥', + '' => '冢', + '' => '凍', + '' => '凌', + '' => '准', + '' => '凋', + '' => '剖', + '' => '剜', + '' => '剔', + '' => '剛', + '' => '剝', + '' => '匪', + '' => '卿', + '' => '原', + '' => '厝', + '' => '叟', + '' => '哨', + '' => '唐', + '' => '唁', + '' => '唷', + '' => '哼', + '' => '哥', + '' => '哲', + '' => '唆', + '' => '哺', + '' => '唔', + '' => '哩', + '' => '哭', + '' => '員', + '' => '唉', + '' => '哮', + '' => '哪', + '@' => '哦', + 'A' => '唧', + 'B' => '唇', + 'C' => '哽', + 'D' => '唏', + 'E' => '圃', + 'F' => '圄', + 'G' => '埂', + 'H' => '埔', + 'I' => '埋', + 'J' => '埃', + 'K' => '堉', + 'L' => '夏', + 'M' => '套', + 'N' => '奘', + 'O' => '奚', + 'P' => '娑', + 'Q' => '娘', + 'R' => '娜', + 'S' => '娟', + 'T' => '娛', + 'U' => '娓', + 'V' => '姬', + 'W' => '娠', + 'X' => '娣', + 'Y' => '娩', + 'Z' => '娥', + '[' => '娌', + '\\' => '娉', + ']' => '孫', + '^' => '屘', + '_' => '宰', + '`' => '害', + 'a' => '家', + 'b' => '宴', + 'c' => '宮', + 'd' => '宵', + 'e' => '容', + 'f' => '宸', + 'g' => '射', + 'h' => '屑', + 'i' => '展', + 'j' => '屐', + 'k' => '峭', + 'l' => '峽', + 'm' => '峻', + 'n' => '峪', + 'o' => '峨', + 'p' => '峰', + 'q' => '島', + 'r' => '崁', + 's' => '峴', + 't' => '差', + 'u' => '席', + 'v' => '師', + 'w' => '庫', + 'x' => '庭', + 'y' => '座', + 'z' => '弱', + '{' => '徒', + '|' => '徑', + '}' => '徐', + '~' => '恙', + '' => '恣', + '' => '恥', + '' => '恐', + '' => '恕', + '' => '恭', + '' => '恩', + '' => '息', + '' => '悄', + '' => '悟', + '' => '悚', + '' => '悍', + '' => '悔', + '' => '悌', + '' => '悅', + '' => '悖', + '' => '扇', + '' => '拳', + '' => '挈', + '' => '拿', + '' => '捎', + '' => '挾', + '' => '振', + '' => '捕', + '' => '捂', + '' => '捆', + '' => '捏', + '' => '捉', + '' => '挺', + '' => '捐', + '' => '挽', + '' => '挪', + '' => '挫', + '' => '挨', + '' => '捍', + '' => '捌', + '' => '效', + '' => '敉', + '' => '料', + '' => '旁', + '' => '旅', + '' => '時', + '' => '晉', + '' => '晏', + '' => '晃', + '' => '晒', + '' => '晌', + '' => '晅', + '' => '晁', + '' => '書', + '' => '朔', + '' => '朕', + '' => '朗', + '' => '校', + '' => '核', + '' => '案', + '' => '框', + '' => '桓', + '' => '根', + '' => '桂', + '' => '桔', + '' => '栩', + '' => '梳', + '' => '栗', + '' => '桌', + '' => '桑', + '' => '栽', + '' => '柴', + '' => '桐', + '' => '桀', + '' => '格', + '' => '桃', + '' => '株', + '' => '桅', + '' => '栓', + '' => '栘', + '' => '桁', + '' => '殊', + '' => '殉', + '' => '殷', + '' => '氣', + '' => '氧', + '' => '氨', + '' => '氦', + '' => '氤', + '' => '泰', + '' => '浪', + '' => '涕', + '' => '消', + '' => '涇', + '' => '浦', + '' => '浸', + '' => '海', + '' => '浙', + '' => '涓', + '@' => '浬', + 'A' => '涉', + 'B' => '浮', + 'C' => '浚', + 'D' => '浴', + 'E' => '浩', + 'F' => '涌', + 'G' => '涊', + 'H' => '浹', + 'I' => '涅', + 'J' => '浥', + 'K' => '涔', + 'L' => '烊', + 'M' => '烘', + 'N' => '烤', + 'O' => '烙', + 'P' => '烈', + 'Q' => '烏', + 'R' => '爹', + 'S' => '特', + 'T' => '狼', + 'U' => '狹', + 'V' => '狽', + 'W' => '狸', + 'X' => '狷', + 'Y' => '玆', + 'Z' => '班', + '[' => '琉', + '\\' => '珮', + ']' => '珠', + '^' => '珪', + '_' => '珞', + '`' => '畔', + 'a' => '畝', + 'b' => '畜', + 'c' => '畚', + 'd' => '留', + 'e' => '疾', + 'f' => '病', + 'g' => '症', + 'h' => '疲', + 'i' => '疳', + 'j' => '疽', + 'k' => '疼', + 'l' => '疹', + 'm' => '痂', + 'n' => '疸', + 'o' => '皋', + 'p' => '皰', + 'q' => '益', + 'r' => '盍', + 's' => '盎', + 't' => '眩', + 'u' => '真', + 'v' => '眠', + 'w' => '眨', + 'x' => '矩', + 'y' => '砰', + 'z' => '砧', + '{' => '砸', + '|' => '砝', + '}' => '破', + '~' => '砷', + '' => '砥', + '' => '砭', + '' => '砠', + '' => '砟', + '' => '砲', + '' => '祕', + '' => '祐', + '' => '祠', + '' => '祟', + '' => '祖', + '' => '神', + '' => '祝', + '' => '祗', + '' => '祚', + '' => '秤', + '' => '秣', + '' => '秧', + '' => '租', + '' => '秦', + '' => '秩', + '' => '秘', + '' => '窄', + '' => '窈', + '' => '站', + '' => '笆', + '' => '笑', + '' => '粉', + '' => '紡', + '' => '紗', + '' => '紋', + '' => '紊', + '' => '素', + '' => '索', + '' => '純', + '' => '紐', + '' => '紕', + '' => '級', + '' => '紜', + '' => '納', + '' => '紙', + '' => '紛', + '' => '缺', + '' => '罟', + '' => '羔', + '' => '翅', + '' => '翁', + '' => '耆', + '' => '耘', + '' => '耕', + '' => '耙', + '' => '耗', + '' => '耽', + '' => '耿', + '' => '胱', + '' => '脂', + '' => '胰', + '' => '脅', + '' => '胭', + '' => '胴', + '' => '脆', + '' => '胸', + '' => '胳', + '' => '脈', + '' => '能', + '' => '脊', + '' => '胼', + '' => '胯', + '' => '臭', + '' => '臬', + '' => '舀', + '' => '舐', + '' => '航', + '' => '舫', + '' => '舨', + '' => '般', + '' => '芻', + '' => '茫', + '' => '荒', + '' => '荔', + '' => '荊', + '' => '茸', + '' => '荐', + '' => '草', + '' => '茵', + '' => '茴', + '' => '荏', + '' => '茲', + '' => '茹', + '' => '茶', + '' => '茗', + '' => '荀', + '' => '茱', + '' => '茨', + '' => '荃', + '@' => '虔', + 'A' => '蚊', + 'B' => '蚪', + 'C' => '蚓', + 'D' => '蚤', + 'E' => '蚩', + 'F' => '蚌', + 'G' => '蚣', + 'H' => '蚜', + 'I' => '衰', + 'J' => '衷', + 'K' => '袁', + 'L' => '袂', + 'M' => '衽', + 'N' => '衹', + 'O' => '記', + 'P' => '訐', + 'Q' => '討', + 'R' => '訌', + 'S' => '訕', + 'T' => '訊', + 'U' => '託', + 'V' => '訓', + 'W' => '訖', + 'X' => '訏', + 'Y' => '訑', + 'Z' => '豈', + '[' => '豺', + '\\' => '豹', + ']' => '財', + '^' => '貢', + '_' => '起', + '`' => '躬', + 'a' => '軒', + 'b' => '軔', + 'c' => '軏', + 'd' => '辱', + 'e' => '送', + 'f' => '逆', + 'g' => '迷', + 'h' => '退', + 'i' => '迺', + 'j' => '迴', + 'k' => '逃', + 'l' => '追', + 'm' => '逅', + 'n' => '迸', + 'o' => '邕', + 'p' => '郡', + 'q' => '郝', + 'r' => '郢', + 's' => '酒', + 't' => '配', + 'u' => '酌', + 'v' => '釘', + 'w' => '針', + 'x' => '釗', + 'y' => '釜', + 'z' => '釙', + '{' => '閃', + '|' => '院', + '}' => '陣', + '~' => '陡', + '' => '陛', + '' => '陝', + '' => '除', + '' => '陘', + '' => '陞', + '' => '隻', + '' => '飢', + '' => '馬', + '' => '骨', + '' => '高', + '' => '鬥', + '' => '鬲', + '' => '鬼', + '' => '乾', + '' => '偺', + '' => '偽', + '' => '停', + '' => '假', + '' => '偃', + '' => '偌', + '' => '做', + '' => '偉', + '' => '健', + '' => '偶', + '' => '偎', + '' => '偕', + '' => '偵', + '' => '側', + '' => '偷', + '' => '偏', + '' => '倏', + '' => '偯', + '' => '偭', + '' => '兜', + '' => '冕', + '' => '凰', + '' => '剪', + '' => '副', + '' => '勒', + '' => '務', + '' => '勘', + '' => '動', + '' => '匐', + '' => '匏', + '' => '匙', + '' => '匿', + '' => '區', + '' => '匾', + '' => '參', + '' => '曼', + '' => '商', + '' => '啪', + '' => '啦', + '' => '啄', + '' => '啞', + '' => '啡', + '' => '啃', + '' => '啊', + '' => '唱', + '' => '啖', + '' => '問', + '' => '啕', + '' => '唯', + '' => '啤', + '' => '唸', + '' => '售', + '' => '啜', + '' => '唬', + '' => '啣', + '' => '唳', + '' => '啁', + '' => '啗', + '' => '圈', + '' => '國', + '' => '圉', + '' => '域', + '' => '堅', + '' => '堊', + '' => '堆', + '' => '埠', + '' => '埤', + '' => '基', + '' => '堂', + '' => '堵', + '' => '執', + '' => '培', + '' => '夠', + '' => '奢', + '' => '娶', + '' => '婁', + '' => '婉', + '' => '婦', + '' => '婪', + '' => '婀', + '@' => '娼', + 'A' => '婢', + 'B' => '婚', + 'C' => '婆', + 'D' => '婊', + 'E' => '孰', + 'F' => '寇', + 'G' => '寅', + 'H' => '寄', + 'I' => '寂', + 'J' => '宿', + 'K' => '密', + 'L' => '尉', + 'M' => '專', + 'N' => '將', + 'O' => '屠', + 'P' => '屜', + 'Q' => '屝', + 'R' => '崇', + 'S' => '崆', + 'T' => '崎', + 'U' => '崛', + 'V' => '崖', + 'W' => '崢', + 'X' => '崑', + 'Y' => '崩', + 'Z' => '崔', + '[' => '崙', + '\\' => '崤', + ']' => '崧', + '^' => '崗', + '_' => '巢', + '`' => '常', + 'a' => '帶', + 'b' => '帳', + 'c' => '帷', + 'd' => '康', + 'e' => '庸', + 'f' => '庶', + 'g' => '庵', + 'h' => '庾', + 'i' => '張', + 'j' => '強', + 'k' => '彗', + 'l' => '彬', + 'm' => '彩', + 'n' => '彫', + 'o' => '得', + 'p' => '徙', + 'q' => '從', + 'r' => '徘', + 's' => '御', + 't' => '徠', + 'u' => '徜', + 'v' => '恿', + 'w' => '患', + 'x' => '悉', + 'y' => '悠', + 'z' => '您', + '{' => '惋', + '|' => '悴', + '}' => '惦', + '~' => '悽', + '' => '情', + '' => '悻', + '' => '悵', + '' => '惜', + '' => '悼', + '' => '惘', + '' => '惕', + '' => '惆', + '' => '惟', + '' => '悸', + '' => '惚', + '' => '惇', + '' => '戚', + '' => '戛', + '' => '扈', + '' => '掠', + '' => '控', + '' => '捲', + '' => '掖', + '' => '探', + '' => '接', + '' => '捷', + '' => '捧', + '' => '掘', + '' => '措', + '' => '捱', + '' => '掩', + '' => '掉', + '' => '掃', + '' => '掛', + '' => '捫', + '' => '推', + '' => '掄', + '' => '授', + '' => '掙', + '' => '採', + '' => '掬', + '' => '排', + '' => '掏', + '' => '掀', + '' => '捻', + '' => '捩', + '' => '捨', + '' => '捺', + '' => '敝', + '' => '敖', + '' => '救', + '' => '教', + '' => '敗', + '' => '啟', + '' => '敏', + '' => '敘', + '' => '敕', + '' => '敔', + '' => '斜', + '' => '斛', + '' => '斬', + '' => '族', + '' => '旋', + '' => '旌', + '' => '旎', + '' => '晝', + '' => '晚', + '' => '晤', + '' => '晨', + '' => '晦', + '' => '晞', + '' => '曹', + '' => '勗', + '' => '望', + '' => '梁', + '' => '梯', + '' => '梢', + '' => '梓', + '' => '梵', + '' => '桿', + '' => '桶', + '' => '梱', + '' => '梧', + '' => '梗', + '' => '械', + '' => '梃', + '' => '棄', + '' => '梭', + '' => '梆', + '' => '梅', + '' => '梔', + '' => '條', + '' => '梨', + '' => '梟', + '' => '梡', + '' => '梂', + '' => '欲', + '' => '殺', + '@' => '毫', + 'A' => '毬', + 'B' => '氫', + 'C' => '涎', + 'D' => '涼', + 'E' => '淳', + 'F' => '淙', + 'G' => '液', + 'H' => '淡', + 'I' => '淌', + 'J' => '淤', + 'K' => '添', + 'L' => '淺', + 'M' => '清', + 'N' => '淇', + 'O' => '淋', + 'P' => '涯', + 'Q' => '淑', + 'R' => '涮', + 'S' => '淞', + 'T' => '淹', + 'U' => '涸', + 'V' => '混', + 'W' => '淵', + 'X' => '淅', + 'Y' => '淒', + 'Z' => '渚', + '[' => '涵', + '\\' => '淚', + ']' => '淫', + '^' => '淘', + '_' => '淪', + '`' => '深', + 'a' => '淮', + 'b' => '淨', + 'c' => '淆', + 'd' => '淄', + 'e' => '涪', + 'f' => '淬', + 'g' => '涿', + 'h' => '淦', + 'i' => '烹', + 'j' => '焉', + 'k' => '焊', + 'l' => '烽', + 'm' => '烯', + 'n' => '爽', + 'o' => '牽', + 'p' => '犁', + 'q' => '猜', + 'r' => '猛', + 's' => '猖', + 't' => '猓', + 'u' => '猙', + 'v' => '率', + 'w' => '琅', + 'x' => '琊', + 'y' => '球', + 'z' => '理', + '{' => '現', + '|' => '琍', + '}' => '瓠', + '~' => '瓶', + '' => '瓷', + '' => '甜', + '' => '產', + '' => '略', + '' => '畦', + '' => '畢', + '' => '異', + '' => '疏', + '' => '痔', + '' => '痕', + '' => '疵', + '' => '痊', + '' => '痍', + '' => '皎', + '' => '盔', + '' => '盒', + '' => '盛', + '' => '眷', + '' => '眾', + '' => '眼', + '' => '眶', + '' => '眸', + '' => '眺', + '' => '硫', + '' => '硃', + '' => '硎', + '' => '祥', + '' => '票', + '' => '祭', + '' => '移', + '' => '窒', + '' => '窕', + '' => '笠', + '' => '笨', + '' => '笛', + '' => '第', + '' => '符', + '' => '笙', + '' => '笞', + '' => '笮', + '' => '粒', + '' => '粗', + '' => '粕', + '' => '絆', + '' => '絃', + '' => '統', + '' => '紮', + '' => '紹', + '' => '紼', + '' => '絀', + '' => '細', + '' => '紳', + '' => '組', + '' => '累', + '' => '終', + '' => '紲', + '' => '紱', + '' => '缽', + '' => '羞', + '' => '羚', + '' => '翌', + '' => '翎', + '' => '習', + '' => '耜', + '' => '聊', + '' => '聆', + '' => '脯', + '' => '脖', + '' => '脣', + '' => '脫', + '' => '脩', + '' => '脰', + '' => '脤', + '' => '舂', + '' => '舵', + '' => '舷', + '' => '舶', + '' => '船', + '' => '莎', + '' => '莞', + '' => '莘', + '' => '荸', + '' => '莢', + '' => '莖', + '' => '莽', + '' => '莫', + '' => '莒', + '' => '莊', + '' => '莓', + '' => '莉', + '' => '莠', + '' => '荷', + '' => '荻', + '' => '荼', + '@' => '莆', + 'A' => '莧', + 'B' => '處', + 'C' => '彪', + 'D' => '蛇', + 'E' => '蛀', + 'F' => '蚶', + 'G' => '蛄', + 'H' => '蚵', + 'I' => '蛆', + 'J' => '蛋', + 'K' => '蚱', + 'L' => '蚯', + 'M' => '蛉', + 'N' => '術', + 'O' => '袞', + 'P' => '袈', + 'Q' => '被', + 'R' => '袒', + 'S' => '袖', + 'T' => '袍', + 'U' => '袋', + 'V' => '覓', + 'W' => '規', + 'X' => '訪', + 'Y' => '訝', + 'Z' => '訣', + '[' => '訥', + '\\' => '許', + ']' => '設', + '^' => '訟', + '_' => '訛', + '`' => '訢', + 'a' => '豉', + 'b' => '豚', + 'c' => '販', + 'd' => '責', + 'e' => '貫', + 'f' => '貨', + 'g' => '貪', + 'h' => '貧', + 'i' => '赧', + 'j' => '赦', + 'k' => '趾', + 'l' => '趺', + 'm' => '軛', + 'n' => '軟', + 'o' => '這', + 'p' => '逍', + 'q' => '通', + 'r' => '逗', + 's' => '連', + 't' => '速', + 'u' => '逝', + 'v' => '逐', + 'w' => '逕', + 'x' => '逞', + 'y' => '造', + 'z' => '透', + '{' => '逢', + '|' => '逖', + '}' => '逛', + '~' => '途', + '' => '部', + '' => '郭', + '' => '都', + '' => '酗', + '' => '野', + '' => '釵', + '' => '釦', + '' => '釣', + '' => '釧', + '' => '釭', + '' => '釩', + '' => '閉', + '' => '陪', + '' => '陵', + '' => '陳', + '' => '陸', + '' => '陰', + '' => '陴', + '' => '陶', + '' => '陷', + '' => '陬', + '' => '雀', + '' => '雪', + '' => '雩', + '' => '章', + '' => '竟', + '' => '頂', + '' => '頃', + '' => '魚', + '' => '鳥', + '' => '鹵', + '' => '鹿', + '' => '麥', + '' => '麻', + '' => '傢', + '' => '傍', + '' => '傅', + '' => '備', + '' => '傑', + '' => '傀', + '' => '傖', + '' => '傘', + '' => '傚', + '' => '最', + '' => '凱', + '' => '割', + '' => '剴', + '' => '創', + '' => '剩', + '' => '勞', + '' => '勝', + '' => '勛', + '' => '博', + '' => '厥', + '' => '啻', + '' => '喀', + '' => '喧', + '' => '啼', + '' => '喊', + '' => '喝', + '' => '喘', + '' => '喂', + '' => '喜', + '' => '喪', + '' => '喔', + '' => '喇', + '' => '喋', + '' => '喃', + '' => '喳', + '' => '單', + '' => '喟', + '' => '唾', + '' => '喲', + '' => '喚', + '' => '喻', + '' => '喬', + '' => '喱', + '' => '啾', + '' => '喉', + '' => '喫', + '' => '喙', + '' => '圍', + '' => '堯', + '' => '堪', + '' => '場', + '' => '堤', + '' => '堰', + '' => '報', + '' => '堡', + '' => '堝', + '' => '堠', + '' => '壹', + '' => '壺', + '' => '奠', + '@' => '婷', + 'A' => '媚', + 'B' => '婿', + 'C' => '媒', + 'D' => '媛', + 'E' => '媧', + 'F' => '孳', + 'G' => '孱', + 'H' => '寒', + 'I' => '富', + 'J' => '寓', + 'K' => '寐', + 'L' => '尊', + 'M' => '尋', + 'N' => '就', + 'O' => '嵌', + 'P' => '嵐', + 'Q' => '崴', + 'R' => '嵇', + 'S' => '巽', + 'T' => '幅', + 'U' => '帽', + 'V' => '幀', + 'W' => '幃', + 'X' => '幾', + 'Y' => '廊', + 'Z' => '廁', + '[' => '廂', + '\\' => '廄', + ']' => '弼', + '^' => '彭', + '_' => '復', + '`' => '循', + 'a' => '徨', + 'b' => '惑', + 'c' => '惡', + 'd' => '悲', + 'e' => '悶', + 'f' => '惠', + 'g' => '愜', + 'h' => '愣', + 'i' => '惺', + 'j' => '愕', + 'k' => '惰', + 'l' => '惻', + 'm' => '惴', + 'n' => '慨', + 'o' => '惱', + 'p' => '愎', + 'q' => '惶', + 'r' => '愉', + 's' => '愀', + 't' => '愒', + 'u' => '戟', + 'v' => '扉', + 'w' => '掣', + 'x' => '掌', + 'y' => '描', + 'z' => '揀', + '{' => '揩', + '|' => '揉', + '}' => '揆', + '~' => '揍', + '' => '插', + '' => '揣', + '' => '提', + '' => '握', + '' => '揖', + '' => '揭', + '' => '揮', + '' => '捶', + '' => '援', + '' => '揪', + '' => '換', + '' => '摒', + '' => '揚', + '' => '揹', + '' => '敞', + '' => '敦', + '' => '敢', + '' => '散', + '' => '斑', + '' => '斐', + '' => '斯', + '' => '普', + '' => '晰', + '' => '晴', + '' => '晶', + '' => '景', + '' => '暑', + '' => '智', + '' => '晾', + '' => '晷', + '' => '曾', + '' => '替', + '' => '期', + '' => '朝', + '' => '棺', + '' => '棕', + '' => '棠', + '' => '棘', + '' => '棗', + '' => '椅', + '' => '棟', + '' => '棵', + '' => '森', + '' => '棧', + '' => '棹', + '' => '棒', + '' => '棲', + '' => '棣', + '' => '棋', + '' => '棍', + '' => '植', + '' => '椒', + '' => '椎', + '' => '棉', + '' => '棚', + '' => '楮', + '' => '棻', + '' => '款', + '' => '欺', + '' => '欽', + '' => '殘', + '' => '殖', + '' => '殼', + '' => '毯', + '' => '氮', + '' => '氯', + '' => '氬', + '' => '港', + '' => '游', + '' => '湔', + '' => '渡', + '' => '渲', + '' => '湧', + '' => '湊', + '' => '渠', + '' => '渥', + '' => '渣', + '' => '減', + '' => '湛', + '' => '湘', + '' => '渤', + '' => '湖', + '' => '湮', + '' => '渭', + '' => '渦', + '' => '湯', + '' => '渴', + '' => '湍', + '' => '渺', + '' => '測', + '' => '湃', + '' => '渝', + '' => '渾', + '' => '滋', + '@' => '溉', + 'A' => '渙', + 'B' => '湎', + 'C' => '湣', + 'D' => '湄', + 'E' => '湲', + 'F' => '湩', + 'G' => '湟', + 'H' => '焙', + 'I' => '焚', + 'J' => '焦', + 'K' => '焰', + 'L' => '無', + 'M' => '然', + 'N' => '煮', + 'O' => '焜', + 'P' => '牌', + 'Q' => '犄', + 'R' => '犀', + 'S' => '猶', + 'T' => '猥', + 'U' => '猴', + 'V' => '猩', + 'W' => '琺', + 'X' => '琪', + 'Y' => '琳', + 'Z' => '琢', + '[' => '琥', + '\\' => '琵', + ']' => '琶', + '^' => '琴', + '_' => '琯', + '`' => '琛', + 'a' => '琦', + 'b' => '琨', + 'c' => '甥', + 'd' => '甦', + 'e' => '畫', + 'f' => '番', + 'g' => '痢', + 'h' => '痛', + 'i' => '痣', + 'j' => '痙', + 'k' => '痘', + 'l' => '痞', + 'm' => '痠', + 'n' => '登', + 'o' => '發', + 'p' => '皖', + 'q' => '皓', + 'r' => '皴', + 's' => '盜', + 't' => '睏', + 'u' => '短', + 'v' => '硝', + 'w' => '硬', + 'x' => '硯', + 'y' => '稍', + 'z' => '稈', + '{' => '程', + '|' => '稅', + '}' => '稀', + '~' => '窘', + '' => '窗', + '' => '窖', + '' => '童', + '' => '竣', + '' => '等', + '' => '策', + '' => '筆', + '' => '筐', + '' => '筒', + '' => '答', + '' => '筍', + '' => '筋', + '' => '筏', + '' => '筑', + '' => '粟', + '' => '粥', + '' => '絞', + '' => '結', + '' => '絨', + '' => '絕', + '' => '紫', + '' => '絮', + '' => '絲', + '' => '絡', + '' => '給', + '' => '絢', + '' => '絰', + '' => '絳', + '' => '善', + '' => '翔', + '' => '翕', + '' => '耋', + '' => '聒', + '' => '肅', + '' => '腕', + '' => '腔', + '' => '腋', + '' => '腑', + '' => '腎', + '' => '脹', + '' => '腆', + '' => '脾', + '' => '腌', + '' => '腓', + '' => '腴', + '' => '舒', + '' => '舜', + '' => '菩', + '' => '萃', + '' => '菸', + '' => '萍', + '' => '菠', + '' => '菅', + '' => '萋', + '' => '菁', + '' => '華', + '' => '菱', + '' => '菴', + '' => '著', + '' => '萊', + '' => '菰', + '' => '萌', + '' => '菌', + '' => '菽', + '' => '菲', + '' => '菊', + '' => '萸', + '' => '萎', + '' => '萄', + '' => '菜', + '' => '萇', + '' => '菔', + '' => '菟', + '' => '虛', + '' => '蛟', + '' => '蛙', + '' => '蛭', + '' => '蛔', + '' => '蛛', + '' => '蛤', + '' => '蛐', + '' => '蛞', + '' => '街', + '' => '裁', + '' => '裂', + '' => '袱', + '' => '覃', + '' => '視', + '' => '註', + '' => '詠', + '' => '評', + '' => '詞', + '' => '証', + '' => '詁', + '@' => '詔', + 'A' => '詛', + 'B' => '詐', + 'C' => '詆', + 'D' => '訴', + 'E' => '診', + 'F' => '訶', + 'G' => '詖', + 'H' => '象', + 'I' => '貂', + 'J' => '貯', + 'K' => '貼', + 'L' => '貳', + 'M' => '貽', + 'N' => '賁', + 'O' => '費', + 'P' => '賀', + 'Q' => '貴', + 'R' => '買', + 'S' => '貶', + 'T' => '貿', + 'U' => '貸', + 'V' => '越', + 'W' => '超', + 'X' => '趁', + 'Y' => '跎', + 'Z' => '距', + '[' => '跋', + '\\' => '跚', + ']' => '跑', + '^' => '跌', + '_' => '跛', + '`' => '跆', + 'a' => '軻', + 'b' => '軸', + 'c' => '軼', + 'd' => '辜', + 'e' => '逮', + 'f' => '逵', + 'g' => '週', + 'h' => '逸', + 'i' => '進', + 'j' => '逶', + 'k' => '鄂', + 'l' => '郵', + 'm' => '鄉', + 'n' => '郾', + 'o' => '酣', + 'p' => '酥', + 'q' => '量', + 'r' => '鈔', + 's' => '鈕', + 't' => '鈣', + 'u' => '鈉', + 'v' => '鈞', + 'w' => '鈍', + 'x' => '鈐', + 'y' => '鈇', + 'z' => '鈑', + '{' => '閔', + '|' => '閏', + '}' => '開', + '~' => '閑', + '' => '間', + '' => '閒', + '' => '閎', + '' => '隊', + '' => '階', + '' => '隋', + '' => '陽', + '' => '隅', + '' => '隆', + '' => '隍', + '' => '陲', + '' => '隄', + '' => '雁', + '' => '雅', + '' => '雄', + '' => '集', + '' => '雇', + '' => '雯', + '' => '雲', + '' => '韌', + '' => '項', + '' => '順', + '' => '須', + '' => '飧', + '' => '飪', + '' => '飯', + '' => '飩', + '' => '飲', + '' => '飭', + '' => '馮', + '' => '馭', + '' => '黃', + '' => '黍', + '' => '黑', + '' => '亂', + '' => '傭', + '' => '債', + '' => '傲', + '' => '傳', + '' => '僅', + '' => '傾', + '' => '催', + '' => '傷', + '' => '傻', + '' => '傯', + '' => '僇', + '' => '剿', + '' => '剷', + '' => '剽', + '' => '募', + '' => '勦', + '' => '勤', + '' => '勢', + '' => '勣', + '' => '匯', + '' => '嗟', + '' => '嗨', + '' => '嗓', + '' => '嗦', + '' => '嗎', + '' => '嗜', + '' => '嗇', + '' => '嗑', + '' => '嗣', + '' => '嗤', + '' => '嗯', + '' => '嗚', + '' => '嗡', + '' => '嗅', + '' => '嗆', + '' => '嗥', + '' => '嗉', + '' => '園', + '' => '圓', + '' => '塞', + '' => '塑', + '' => '塘', + '' => '塗', + '' => '塚', + '' => '塔', + '' => '填', + '' => '塌', + '' => '塭', + '' => '塊', + '' => '塢', + '' => '塒', + '' => '塋', + '' => '奧', + '' => '嫁', + '' => '嫉', + '' => '嫌', + '' => '媾', + '' => '媽', + '' => '媼', + '@' => '媳', + 'A' => '嫂', + 'B' => '媲', + 'C' => '嵩', + 'D' => '嵯', + 'E' => '幌', + 'F' => '幹', + 'G' => '廉', + 'H' => '廈', + 'I' => '弒', + 'J' => '彙', + 'K' => '徬', + 'L' => '微', + 'M' => '愚', + 'N' => '意', + 'O' => '慈', + 'P' => '感', + 'Q' => '想', + 'R' => '愛', + 'S' => '惹', + 'T' => '愁', + 'U' => '愈', + 'V' => '慎', + 'W' => '慌', + 'X' => '慄', + 'Y' => '慍', + 'Z' => '愾', + '[' => '愴', + '\\' => '愧', + ']' => '愍', + '^' => '愆', + '_' => '愷', + '`' => '戡', + 'a' => '戢', + 'b' => '搓', + 'c' => '搾', + 'd' => '搞', + 'e' => '搪', + 'f' => '搭', + 'g' => '搽', + 'h' => '搬', + 'i' => '搏', + 'j' => '搜', + 'k' => '搔', + 'l' => '損', + 'm' => '搶', + 'n' => '搖', + 'o' => '搗', + 'p' => '搆', + 'q' => '敬', + 'r' => '斟', + 's' => '新', + 't' => '暗', + 'u' => '暉', + 'v' => '暇', + 'w' => '暈', + 'x' => '暖', + 'y' => '暄', + 'z' => '暘', + '{' => '暍', + '|' => '會', + '}' => '榔', + '~' => '業', + '' => '楚', + '' => '楷', + '' => '楠', + '' => '楔', + '' => '極', + '' => '椰', + '' => '概', + '' => '楊', + '' => '楨', + '' => '楫', + '' => '楞', + '' => '楓', + '' => '楹', + '' => '榆', + '' => '楝', + '' => '楣', + '' => '楛', + '' => '歇', + '' => '歲', + '' => '毀', + '' => '殿', + '' => '毓', + '' => '毽', + '' => '溢', + '' => '溯', + '' => '滓', + '' => '溶', + '' => '滂', + '' => '源', + '' => '溝', + '' => '滇', + '' => '滅', + '' => '溥', + '' => '溘', + '' => '溼', + '' => '溺', + '' => '溫', + '' => '滑', + '' => '準', + '' => '溜', + '' => '滄', + '' => '滔', + '' => '溪', + '' => '溧', + '' => '溴', + '' => '煎', + '' => '煙', + '' => '煩', + '' => '煤', + '' => '煉', + '' => '照', + '' => '煜', + '' => '煬', + '' => '煦', + '' => '煌', + '' => '煥', + '' => '煞', + '' => '煆', + '' => '煨', + '' => '煖', + '' => '爺', + '' => '牒', + '' => '猷', + '' => '獅', + '' => '猿', + '' => '猾', + '' => '瑯', + '' => '瑚', + '' => '瑕', + '' => '瑟', + '' => '瑞', + '' => '瑁', + '' => '琿', + '' => '瑙', + '' => '瑛', + '' => '瑜', + '' => '當', + '' => '畸', + '' => '瘀', + '' => '痰', + '' => '瘁', + '' => '痲', + '' => '痱', + '' => '痺', + '' => '痿', + '' => '痴', + '' => '痳', + '' => '盞', + '' => '盟', + '' => '睛', + '' => '睫', + '' => '睦', + '' => '睞', + '' => '督', + '@' => '睹', + 'A' => '睪', + 'B' => '睬', + 'C' => '睜', + 'D' => '睥', + 'E' => '睨', + 'F' => '睢', + 'G' => '矮', + 'H' => '碎', + 'I' => '碰', + 'J' => '碗', + 'K' => '碘', + 'L' => '碌', + 'M' => '碉', + 'N' => '硼', + 'O' => '碑', + 'P' => '碓', + 'Q' => '硿', + 'R' => '祺', + 'S' => '祿', + 'T' => '禁', + 'U' => '萬', + 'V' => '禽', + 'W' => '稜', + 'X' => '稚', + 'Y' => '稠', + 'Z' => '稔', + '[' => '稟', + '\\' => '稞', + ']' => '窟', + '^' => '窠', + '_' => '筷', + '`' => '節', + 'a' => '筠', + 'b' => '筮', + 'c' => '筧', + 'd' => '粱', + 'e' => '粳', + 'f' => '粵', + 'g' => '經', + 'h' => '絹', + 'i' => '綑', + 'j' => '綁', + 'k' => '綏', + 'l' => '絛', + 'm' => '置', + 'n' => '罩', + 'o' => '罪', + 'p' => '署', + 'q' => '義', + 'r' => '羨', + 's' => '群', + 't' => '聖', + 'u' => '聘', + 'v' => '肆', + 'w' => '肄', + 'x' => '腱', + 'y' => '腰', + 'z' => '腸', + '{' => '腥', + '|' => '腮', + '}' => '腳', + '~' => '腫', + '' => '腹', + '' => '腺', + '' => '腦', + '' => '舅', + '' => '艇', + '' => '蒂', + '' => '葷', + '' => '落', + '' => '萱', + '' => '葵', + '' => '葦', + '' => '葫', + '' => '葉', + '' => '葬', + '' => '葛', + '' => '萼', + '' => '萵', + '' => '葡', + '' => '董', + '' => '葩', + '' => '葭', + '' => '葆', + '' => '虞', + '' => '虜', + '' => '號', + '' => '蛹', + '' => '蜓', + '' => '蜈', + '' => '蜇', + '' => '蜀', + '' => '蛾', + '' => '蛻', + '' => '蜂', + '' => '蜃', + '' => '蜆', + '' => '蜊', + '' => '衙', + '' => '裟', + '' => '裔', + '' => '裙', + '' => '補', + '' => '裘', + '' => '裝', + '' => '裡', + '' => '裊', + '' => '裕', + '' => '裒', + '' => '覜', + '' => '解', + '' => '詫', + '' => '該', + '' => '詳', + '' => '試', + '' => '詩', + '' => '詰', + '' => '誇', + '' => '詼', + '' => '詣', + '' => '誠', + '' => '話', + '' => '誅', + '' => '詭', + '' => '詢', + '' => '詮', + '' => '詬', + '' => '詹', + '' => '詻', + '' => '訾', + '' => '詨', + '' => '豢', + '' => '貊', + '' => '貉', + '' => '賊', + '' => '資', + '' => '賈', + '' => '賄', + '' => '貲', + '' => '賃', + '' => '賂', + '' => '賅', + '' => '跡', + '' => '跟', + '' => '跨', + '' => '路', + '' => '跳', + '' => '跺', + '' => '跪', + '' => '跤', + '' => '跦', + '' => '躲', + '' => '較', + '' => '載', + '' => '軾', + '' => '輊', + '@' => '辟', + 'A' => '農', + 'B' => '運', + 'C' => '遊', + 'D' => '道', + 'E' => '遂', + 'F' => '達', + 'G' => '逼', + 'H' => '違', + 'I' => '遐', + 'J' => '遇', + 'K' => '遏', + 'L' => '過', + 'M' => '遍', + 'N' => '遑', + 'O' => '逾', + 'P' => '遁', + 'Q' => '鄒', + 'R' => '鄗', + 'S' => '酬', + 'T' => '酪', + 'U' => '酩', + 'V' => '釉', + 'W' => '鈷', + 'X' => '鉗', + 'Y' => '鈸', + 'Z' => '鈽', + '[' => '鉀', + '\\' => '鈾', + ']' => '鉛', + '^' => '鉋', + '_' => '鉤', + '`' => '鉑', + 'a' => '鈴', + 'b' => '鉉', + 'c' => '鉍', + 'd' => '鉅', + 'e' => '鈹', + 'f' => '鈿', + 'g' => '鉚', + 'h' => '閘', + 'i' => '隘', + 'j' => '隔', + 'k' => '隕', + 'l' => '雍', + 'm' => '雋', + 'n' => '雉', + 'o' => '雊', + 'p' => '雷', + 'q' => '電', + 'r' => '雹', + 's' => '零', + 't' => '靖', + 'u' => '靴', + 'v' => '靶', + 'w' => '預', + 'x' => '頑', + 'y' => '頓', + 'z' => '頊', + '{' => '頒', + '|' => '頌', + '}' => '飼', + '~' => '飴', + '' => '飽', + '' => '飾', + '' => '馳', + '' => '馱', + '' => '馴', + '' => '髡', + '' => '鳩', + '' => '麂', + '' => '鼎', + '' => '鼓', + '' => '鼠', + '' => '僧', + '' => '僮', + '' => '僥', + '' => '僖', + '' => '僭', + '' => '僚', + '' => '僕', + '' => '像', + '' => '僑', + '' => '僱', + '' => '僎', + '' => '僩', + '' => '兢', + '' => '凳', + '' => '劃', + '' => '劂', + '' => '匱', + '' => '厭', + '' => '嗾', + '' => '嘀', + '' => '嘛', + '' => '嘗', + '' => '嗽', + '' => '嘔', + '' => '嘆', + '' => '嘉', + '' => '嘍', + '' => '嘎', + '' => '嗷', + '' => '嘖', + '' => '嘟', + '' => '嘈', + '' => '嘐', + '' => '嗶', + '' => '團', + '' => '圖', + '' => '塵', + '' => '塾', + '' => '境', + '' => '墓', + '' => '墊', + '' => '塹', + '' => '墅', + '' => '塽', + '' => '壽', + '' => '夥', + '' => '夢', + '' => '夤', + '' => '奪', + '' => '奩', + '' => '嫡', + '' => '嫦', + '' => '嫩', + '' => '嫗', + '' => '嫖', + '' => '嫘', + '' => '嫣', + '' => '孵', + '' => '寞', + '' => '寧', + '' => '寡', + '' => '寥', + '' => '實', + '' => '寨', + '' => '寢', + '' => '寤', + '' => '察', + '' => '對', + '' => '屢', + '' => '嶄', + '' => '嶇', + '' => '幛', + '' => '幣', + '' => '幕', + '' => '幗', + '' => '幔', + '' => '廓', + '' => '廖', + '' => '弊', + '' => '彆', + '' => '彰', + '' => '徹', + '' => '慇', + '@' => '愿', + 'A' => '態', + 'B' => '慷', + 'C' => '慢', + 'D' => '慣', + 'E' => '慟', + 'F' => '慚', + 'G' => '慘', + 'H' => '慵', + 'I' => '截', + 'J' => '撇', + 'K' => '摘', + 'L' => '摔', + 'M' => '撤', + 'N' => '摸', + 'O' => '摟', + 'P' => '摺', + 'Q' => '摑', + 'R' => '摧', + 'S' => '搴', + 'T' => '摭', + 'U' => '摻', + 'V' => '敲', + 'W' => '斡', + 'X' => '旗', + 'Y' => '旖', + 'Z' => '暢', + '[' => '暨', + '\\' => '暝', + ']' => '榜', + '^' => '榨', + '_' => '榕', + '`' => '槁', + 'a' => '榮', + 'b' => '槓', + 'c' => '構', + 'd' => '榛', + 'e' => '榷', + 'f' => '榻', + 'g' => '榫', + 'h' => '榴', + 'i' => '槐', + 'j' => '槍', + 'k' => '榭', + 'l' => '槌', + 'm' => '榦', + 'n' => '槃', + 'o' => '榣', + 'p' => '歉', + 'q' => '歌', + 'r' => '氳', + 's' => '漳', + 't' => '演', + 'u' => '滾', + 'v' => '漓', + 'w' => '滴', + 'x' => '漩', + 'y' => '漾', + 'z' => '漠', + '{' => '漬', + '|' => '漏', + '}' => '漂', + '~' => '漢', + '' => '滿', + '' => '滯', + '' => '漆', + '' => '漱', + '' => '漸', + '' => '漲', + '' => '漣', + '' => '漕', + '' => '漫', + '' => '漯', + '' => '澈', + '' => '漪', + '' => '滬', + '' => '漁', + '' => '滲', + '' => '滌', + '' => '滷', + '' => '熔', + '' => '熙', + '' => '煽', + '' => '熊', + '' => '熄', + '' => '熒', + '' => '爾', + '' => '犒', + '' => '犖', + '' => '獄', + '' => '獐', + '' => '瑤', + '' => '瑣', + '' => '瑪', + '' => '瑰', + '' => '瑭', + '' => '甄', + '' => '疑', + '' => '瘧', + '' => '瘍', + '' => '瘋', + '' => '瘉', + '' => '瘓', + '' => '盡', + '' => '監', + '' => '瞄', + '' => '睽', + '' => '睿', + '' => '睡', + '' => '磁', + '' => '碟', + '' => '碧', + '' => '碳', + '' => '碩', + '' => '碣', + '' => '禎', + '' => '福', + '' => '禍', + '' => '種', + '' => '稱', + '' => '窪', + '' => '窩', + '' => '竭', + '' => '端', + '' => '管', + '' => '箕', + '' => '箋', + '' => '筵', + '' => '算', + '' => '箝', + '' => '箔', + '' => '箏', + '' => '箸', + '' => '箇', + '' => '箄', + '' => '粹', + '' => '粽', + '' => '精', + '' => '綻', + '' => '綰', + '' => '綜', + '' => '綽', + '' => '綾', + '' => '綠', + '' => '緊', + '' => '綴', + '' => '網', + '' => '綱', + '' => '綺', + '' => '綢', + '' => '綿', + '' => '綵', + '' => '綸', + '' => '維', + '' => '緒', + '' => '緇', + '' => '綬', + '@' => '罰', + 'A' => '翠', + 'B' => '翡', + 'C' => '翟', + 'D' => '聞', + 'E' => '聚', + 'F' => '肇', + 'G' => '腐', + 'H' => '膀', + 'I' => '膏', + 'J' => '膈', + 'K' => '膊', + 'L' => '腿', + 'M' => '膂', + 'N' => '臧', + 'O' => '臺', + 'P' => '與', + 'Q' => '舔', + 'R' => '舞', + 'S' => '艋', + 'T' => '蓉', + 'U' => '蒿', + 'V' => '蓆', + 'W' => '蓄', + 'X' => '蒙', + 'Y' => '蒞', + 'Z' => '蒲', + '[' => '蒜', + '\\' => '蓋', + ']' => '蒸', + '^' => '蓀', + '_' => '蓓', + '`' => '蒐', + 'a' => '蒼', + 'b' => '蓑', + 'c' => '蓊', + 'd' => '蜿', + 'e' => '蜜', + 'f' => '蜻', + 'g' => '蜢', + 'h' => '蜥', + 'i' => '蜴', + 'j' => '蜘', + 'k' => '蝕', + 'l' => '蜷', + 'm' => '蜩', + 'n' => '裳', + 'o' => '褂', + 'p' => '裴', + 'q' => '裹', + 'r' => '裸', + 's' => '製', + 't' => '裨', + 'u' => '褚', + 'v' => '裯', + 'w' => '誦', + 'x' => '誌', + 'y' => '語', + 'z' => '誣', + '{' => '認', + '|' => '誡', + '}' => '誓', + '~' => '誤', + '' => '說', + '' => '誥', + '' => '誨', + '' => '誘', + '' => '誑', + '' => '誚', + '' => '誧', + '' => '豪', + '' => '貍', + '' => '貌', + '' => '賓', + '' => '賑', + '' => '賒', + '' => '赫', + '' => '趙', + '' => '趕', + '' => '跼', + '' => '輔', + '' => '輒', + '' => '輕', + '' => '輓', + '' => '辣', + '' => '遠', + '' => '遘', + '' => '遜', + '' => '遣', + '' => '遙', + '' => '遞', + '' => '遢', + '' => '遝', + '' => '遛', + '' => '鄙', + '' => '鄘', + '' => '鄞', + '' => '酵', + '' => '酸', + '' => '酷', + '' => '酴', + '' => '鉸', + '' => '銀', + '' => '銅', + '' => '銘', + '' => '銖', + '' => '鉻', + '' => '銓', + '' => '銜', + '' => '銨', + '' => '鉼', + '' => '銑', + '' => '閡', + '' => '閨', + '' => '閩', + '' => '閣', + '' => '閥', + '' => '閤', + '' => '隙', + '' => '障', + '' => '際', + '' => '雌', + '' => '雒', + '' => '需', + '' => '靼', + '' => '鞅', + '' => '韶', + '' => '頗', + '' => '領', + '' => '颯', + '' => '颱', + '' => '餃', + '' => '餅', + '' => '餌', + '' => '餉', + '' => '駁', + '' => '骯', + '' => '骰', + '' => '髦', + '' => '魁', + '' => '魂', + '' => '鳴', + '' => '鳶', + '' => '鳳', + '' => '麼', + '' => '鼻', + '' => '齊', + '' => '億', + '' => '儀', + '' => '僻', + '' => '僵', + '' => '價', + '' => '儂', + '' => '儈', + '' => '儉', + '' => '儅', + '' => '凜', + '@' => '劇', + 'A' => '劈', + 'B' => '劉', + 'C' => '劍', + 'D' => '劊', + 'E' => '勰', + 'F' => '厲', + 'G' => '嘮', + 'H' => '嘻', + 'I' => '嘹', + 'J' => '嘲', + 'K' => '嘿', + 'L' => '嘴', + 'M' => '嘩', + 'N' => '噓', + 'O' => '噎', + 'P' => '噗', + 'Q' => '噴', + 'R' => '嘶', + 'S' => '嘯', + 'T' => '嘰', + 'U' => '墀', + 'V' => '墟', + 'W' => '增', + 'X' => '墳', + 'Y' => '墜', + 'Z' => '墮', + '[' => '墩', + '\\' => '墦', + ']' => '奭', + '^' => '嬉', + '_' => '嫻', + '`' => '嬋', + 'a' => '嫵', + 'b' => '嬌', + 'c' => '嬈', + 'd' => '寮', + 'e' => '寬', + 'f' => '審', + 'g' => '寫', + 'h' => '層', + 'i' => '履', + 'j' => '嶝', + 'k' => '嶔', + 'l' => '幢', + 'm' => '幟', + 'n' => '幡', + 'o' => '廢', + 'p' => '廚', + 'q' => '廟', + 'r' => '廝', + 's' => '廣', + 't' => '廠', + 'u' => '彈', + 'v' => '影', + 'w' => '德', + 'x' => '徵', + 'y' => '慶', + 'z' => '慧', + '{' => '慮', + '|' => '慝', + '}' => '慕', + '~' => '憂', + '' => '慼', + '' => '慰', + '' => '慫', + '' => '慾', + '' => '憧', + '' => '憐', + '' => '憫', + '' => '憎', + '' => '憬', + '' => '憚', + '' => '憤', + '' => '憔', + '' => '憮', + '' => '戮', + '' => '摩', + '' => '摯', + '' => '摹', + '' => '撞', + '' => '撲', + '' => '撈', + '' => '撐', + '' => '撰', + '' => '撥', + '' => '撓', + '' => '撕', + '' => '撩', + '' => '撒', + '' => '撮', + '' => '播', + '' => '撫', + '' => '撚', + '' => '撬', + '' => '撙', + '' => '撢', + '' => '撳', + '' => '敵', + '' => '敷', + '' => '數', + '' => '暮', + '' => '暫', + '' => '暴', + '' => '暱', + '' => '樣', + '' => '樟', + '' => '槨', + '' => '樁', + '' => '樞', + '' => '標', + '' => '槽', + '' => '模', + '' => '樓', + '' => '樊', + '' => '槳', + '' => '樂', + '' => '樅', + '' => '槭', + '' => '樑', + '' => '歐', + '' => '歎', + '' => '殤', + '' => '毅', + '' => '毆', + '' => '漿', + '' => '潼', + '' => '澄', + '' => '潑', + '' => '潦', + '' => '潔', + '' => '澆', + '' => '潭', + '' => '潛', + '' => '潸', + '' => '潮', + '' => '澎', + '' => '潺', + '' => '潰', + '' => '潤', + '' => '澗', + '' => '潘', + '' => '滕', + '' => '潯', + '' => '潠', + '' => '潟', + '' => '熟', + '' => '熬', + '' => '熱', + '' => '熨', + '' => '牖', + '' => '犛', + '' => '獎', + '' => '獗', + '' => '瑩', + '' => '璋', + '' => '璃', + '@' => '瑾', + 'A' => '璀', + 'B' => '畿', + 'C' => '瘠', + 'D' => '瘩', + 'E' => '瘟', + 'F' => '瘤', + 'G' => '瘦', + 'H' => '瘡', + 'I' => '瘢', + 'J' => '皚', + 'K' => '皺', + 'L' => '盤', + 'M' => '瞎', + 'N' => '瞇', + 'O' => '瞌', + 'P' => '瞑', + 'Q' => '瞋', + 'R' => '磋', + 'S' => '磅', + 'T' => '確', + 'U' => '磊', + 'V' => '碾', + 'W' => '磕', + 'X' => '碼', + 'Y' => '磐', + 'Z' => '稿', + '[' => '稼', + '\\' => '穀', + ']' => '稽', + '^' => '稷', + '_' => '稻', + '`' => '窯', + 'a' => '窮', + 'b' => '箭', + 'c' => '箱', + 'd' => '範', + 'e' => '箴', + 'f' => '篆', + 'g' => '篇', + 'h' => '篁', + 'i' => '箠', + 'j' => '篌', + 'k' => '糊', + 'l' => '締', + 'm' => '練', + 'n' => '緯', + 'o' => '緻', + 'p' => '緘', + 'q' => '緬', + 'r' => '緝', + 's' => '編', + 't' => '緣', + 'u' => '線', + 'v' => '緞', + 'w' => '緩', + 'x' => '綞', + 'y' => '緙', + 'z' => '緲', + '{' => '緹', + '|' => '罵', + '}' => '罷', + '~' => '羯', + '' => '翩', + '' => '耦', + '' => '膛', + '' => '膜', + '' => '膝', + '' => '膠', + '' => '膚', + '' => '膘', + '' => '蔗', + '' => '蔽', + '' => '蔚', + '' => '蓮', + '' => '蔬', + '' => '蔭', + '' => '蔓', + '' => '蔑', + '' => '蔣', + '' => '蔡', + '' => '蔔', + '' => '蓬', + '' => '蔥', + '' => '蓿', + '' => '蔆', + '' => '螂', + '' => '蝴', + '' => '蝶', + '' => '蝠', + '' => '蝦', + '' => '蝸', + '' => '蝨', + '' => '蝙', + '' => '蝗', + '' => '蝌', + '' => '蝓', + '' => '衛', + '' => '衝', + '' => '褐', + '' => '複', + '' => '褒', + '' => '褓', + '' => '褕', + '' => '褊', + '' => '誼', + '' => '諒', + '' => '談', + '' => '諄', + '' => '誕', + '' => '請', + '' => '諸', + '' => '課', + '' => '諉', + '' => '諂', + '' => '調', + '' => '誰', + '' => '論', + '' => '諍', + '' => '誶', + '' => '誹', + '' => '諛', + '' => '豌', + '' => '豎', + '' => '豬', + '' => '賠', + '' => '賞', + '' => '賦', + '' => '賤', + '' => '賬', + '' => '賭', + '' => '賢', + '' => '賣', + '' => '賜', + '' => '質', + '' => '賡', + '' => '赭', + '' => '趟', + '' => '趣', + '' => '踫', + '' => '踐', + '' => '踝', + '' => '踢', + '' => '踏', + '' => '踩', + '' => '踟', + '' => '踡', + '' => '踞', + '' => '躺', + '' => '輝', + '' => '輛', + '' => '輟', + '' => '輩', + '' => '輦', + '' => '輪', + '' => '輜', + '' => '輞', + '@' => '輥', + 'A' => '適', + 'B' => '遮', + 'C' => '遨', + 'D' => '遭', + 'E' => '遷', + 'F' => '鄰', + 'G' => '鄭', + 'H' => '鄧', + 'I' => '鄱', + 'J' => '醇', + 'K' => '醉', + 'L' => '醋', + 'M' => '醃', + 'N' => '鋅', + 'O' => '銻', + 'P' => '銷', + 'Q' => '鋪', + 'R' => '銬', + 'S' => '鋤', + 'T' => '鋁', + 'U' => '銳', + 'V' => '銼', + 'W' => '鋒', + 'X' => '鋇', + 'Y' => '鋰', + 'Z' => '銲', + '[' => '閭', + '\\' => '閱', + ']' => '霄', + '^' => '霆', + '_' => '震', + '`' => '霉', + 'a' => '靠', + 'b' => '鞍', + 'c' => '鞋', + 'd' => '鞏', + 'e' => '頡', + 'f' => '頫', + 'g' => '頜', + 'h' => '颳', + 'i' => '養', + 'j' => '餓', + 'k' => '餒', + 'l' => '餘', + 'm' => '駝', + 'n' => '駐', + 'o' => '駟', + 'p' => '駛', + 'q' => '駑', + 'r' => '駕', + 's' => '駒', + 't' => '駙', + 'u' => '骷', + 'v' => '髮', + 'w' => '髯', + 'x' => '鬧', + 'y' => '魅', + 'z' => '魄', + '{' => '魷', + '|' => '魯', + '}' => '鴆', + '~' => '鴉', + '' => '鴃', + '' => '麩', + '' => '麾', + '' => '黎', + '' => '墨', + '' => '齒', + '' => '儒', + '' => '儘', + '' => '儔', + '' => '儐', + '' => '儕', + '' => '冀', + '' => '冪', + '' => '凝', + '' => '劑', + '' => '劓', + '' => '勳', + '' => '噙', + '' => '噫', + '' => '噹', + '' => '噩', + '' => '噤', + '' => '噸', + '' => '噪', + '' => '器', + '' => '噥', + '' => '噱', + '' => '噯', + '' => '噬', + '' => '噢', + '' => '噶', + '' => '壁', + '' => '墾', + '' => '壇', + '' => '壅', + '' => '奮', + '' => '嬝', + '' => '嬴', + '' => '學', + '' => '寰', + '' => '導', + '' => '彊', + '' => '憲', + '' => '憑', + '' => '憩', + '' => '憊', + '' => '懍', + '' => '憶', + '' => '憾', + '' => '懊', + '' => '懈', + '' => '戰', + '' => '擅', + '' => '擁', + '' => '擋', + '' => '撻', + '' => '撼', + '' => '據', + '' => '擄', + '' => '擇', + '' => '擂', + '' => '操', + '' => '撿', + '' => '擒', + '' => '擔', + '' => '撾', + '' => '整', + '' => '曆', + '' => '曉', + '' => '暹', + '' => '曄', + '' => '曇', + '' => '暸', + '' => '樽', + '' => '樸', + '' => '樺', + '' => '橙', + '' => '橫', + '' => '橘', + '' => '樹', + '' => '橄', + '' => '橢', + '' => '橡', + '' => '橋', + '' => '橇', + '' => '樵', + '' => '機', + '' => '橈', + '' => '歙', + '' => '歷', + '' => '氅', + '' => '濂', + '' => '澱', + '' => '澡', + '@' => '濃', + 'A' => '澤', + 'B' => '濁', + 'C' => '澧', + 'D' => '澳', + 'E' => '激', + 'F' => '澹', + 'G' => '澶', + 'H' => '澦', + 'I' => '澠', + 'J' => '澴', + 'K' => '熾', + 'L' => '燉', + 'M' => '燐', + 'N' => '燒', + 'O' => '燈', + 'P' => '燕', + 'Q' => '熹', + 'R' => '燎', + 'S' => '燙', + 'T' => '燜', + 'U' => '燃', + 'V' => '燄', + 'W' => '獨', + 'X' => '璜', + 'Y' => '璣', + 'Z' => '璘', + '[' => '璟', + '\\' => '璞', + ']' => '瓢', + '^' => '甌', + '_' => '甍', + '`' => '瘴', + 'a' => '瘸', + 'b' => '瘺', + 'c' => '盧', + 'd' => '盥', + 'e' => '瞠', + 'f' => '瞞', + 'g' => '瞟', + 'h' => '瞥', + 'i' => '磨', + 'j' => '磚', + 'k' => '磬', + 'l' => '磧', + 'm' => '禦', + 'n' => '積', + 'o' => '穎', + 'p' => '穆', + 'q' => '穌', + 'r' => '穋', + 's' => '窺', + 't' => '篙', + 'u' => '簑', + 'v' => '築', + 'w' => '篤', + 'x' => '篛', + 'y' => '篡', + 'z' => '篩', + '{' => '篦', + '|' => '糕', + '}' => '糖', + '~' => '縊', + '' => '縑', + '' => '縈', + '' => '縛', + '' => '縣', + '' => '縞', + '' => '縝', + '' => '縉', + '' => '縐', + '' => '罹', + '' => '羲', + '' => '翰', + '' => '翱', + '' => '翮', + '' => '耨', + '' => '膳', + '' => '膩', + '' => '膨', + '' => '臻', + '' => '興', + '' => '艘', + '' => '艙', + '' => '蕊', + '' => '蕙', + '' => '蕈', + '' => '蕨', + '' => '蕩', + '' => '蕃', + '' => '蕉', + '' => '蕭', + '' => '蕪', + '' => '蕞', + '' => '螃', + '' => '螟', + '' => '螞', + '' => '螢', + '' => '融', + '' => '衡', + '' => '褪', + '' => '褲', + '' => '褥', + '' => '褫', + '' => '褡', + '' => '親', + '' => '覦', + '' => '諦', + '' => '諺', + '' => '諫', + '' => '諱', + '' => '謀', + '' => '諜', + '' => '諧', + '' => '諮', + '' => '諾', + '' => '謁', + '' => '謂', + '' => '諷', + '' => '諭', + '' => '諳', + '' => '諶', + '' => '諼', + '' => '豫', + '' => '豭', + '' => '貓', + '' => '賴', + '' => '蹄', + '' => '踱', + '' => '踴', + '' => '蹂', + '' => '踹', + '' => '踵', + '' => '輻', + '' => '輯', + '' => '輸', + '' => '輳', + '' => '辨', + '' => '辦', + '' => '遵', + '' => '遴', + '' => '選', + '' => '遲', + '' => '遼', + '' => '遺', + '' => '鄴', + '' => '醒', + '' => '錠', + '' => '錶', + '' => '鋸', + '' => '錳', + '' => '錯', + '' => '錢', + '' => '鋼', + '' => '錫', + '' => '錄', + '' => '錚', + '@' => '錐', + 'A' => '錦', + 'B' => '錡', + 'C' => '錕', + 'D' => '錮', + 'E' => '錙', + 'F' => '閻', + 'G' => '隧', + 'H' => '隨', + 'I' => '險', + 'J' => '雕', + 'K' => '霎', + 'L' => '霑', + 'M' => '霖', + 'N' => '霍', + 'O' => '霓', + 'P' => '霏', + 'Q' => '靛', + 'R' => '靜', + 'S' => '靦', + 'T' => '鞘', + 'U' => '頰', + 'V' => '頸', + 'W' => '頻', + 'X' => '頷', + 'Y' => '頭', + 'Z' => '頹', + '[' => '頤', + '\\' => '餐', + ']' => '館', + '^' => '餞', + '_' => '餛', + '`' => '餡', + 'a' => '餚', + 'b' => '駭', + 'c' => '駢', + 'd' => '駱', + 'e' => '骸', + 'f' => '骼', + 'g' => '髻', + 'h' => '髭', + 'i' => '鬨', + 'j' => '鮑', + 'k' => '鴕', + 'l' => '鴣', + 'm' => '鴦', + 'n' => '鴨', + 'o' => '鴒', + 'p' => '鴛', + 'q' => '默', + 'r' => '黔', + 's' => '龍', + 't' => '龜', + 'u' => '優', + 'v' => '償', + 'w' => '儡', + 'x' => '儲', + 'y' => '勵', + 'z' => '嚎', + '{' => '嚀', + '|' => '嚐', + '}' => '嚅', + '~' => '嚇', + '' => '嚏', + '' => '壕', + '' => '壓', + '' => '壑', + '' => '壎', + '' => '嬰', + '' => '嬪', + '' => '嬤', + '' => '孺', + '' => '尷', + '' => '屨', + '' => '嶼', + '' => '嶺', + '' => '嶽', + '' => '嶸', + '' => '幫', + '' => '彌', + '' => '徽', + '' => '應', + '' => '懂', + '' => '懇', + '' => '懦', + '' => '懋', + '' => '戲', + '' => '戴', + '' => '擎', + '' => '擊', + '' => '擘', + '' => '擠', + '' => '擰', + '' => '擦', + '' => '擬', + '' => '擱', + '' => '擢', + '' => '擭', + '' => '斂', + '' => '斃', + '' => '曙', + '' => '曖', + '' => '檀', + '' => '檔', + '' => '檄', + '' => '檢', + '' => '檜', + '' => '櫛', + '' => '檣', + '' => '橾', + '' => '檗', + '' => '檐', + '' => '檠', + '' => '歜', + '' => '殮', + '' => '毚', + '' => '氈', + '' => '濘', + '' => '濱', + '' => '濟', + '' => '濠', + '' => '濛', + '' => '濤', + '' => '濫', + '' => '濯', + '' => '澀', + '' => '濬', + '' => '濡', + '' => '濩', + '' => '濕', + '' => '濮', + '' => '濰', + '' => '燧', + '' => '營', + '' => '燮', + '' => '燦', + '' => '燥', + '' => '燭', + '' => '燬', + '' => '燴', + '' => '燠', + '' => '爵', + '' => '牆', + '' => '獰', + '' => '獲', + '' => '璩', + '' => '環', + '' => '璦', + '' => '璨', + '' => '癆', + '' => '療', + '' => '癌', + '' => '盪', + '' => '瞳', + '' => '瞪', + '' => '瞰', + '' => '瞬', + '@' => '瞧', + 'A' => '瞭', + 'B' => '矯', + 'C' => '磷', + 'D' => '磺', + 'E' => '磴', + 'F' => '磯', + 'G' => '礁', + 'H' => '禧', + 'I' => '禪', + 'J' => '穗', + 'K' => '窿', + 'L' => '簇', + 'M' => '簍', + 'N' => '篾', + 'O' => '篷', + 'P' => '簌', + 'Q' => '篠', + 'R' => '糠', + 'S' => '糜', + 'T' => '糞', + 'U' => '糢', + 'V' => '糟', + 'W' => '糙', + 'X' => '糝', + 'Y' => '縮', + 'Z' => '績', + '[' => '繆', + '\\' => '縷', + ']' => '縲', + '^' => '繃', + '_' => '縫', + '`' => '總', + 'a' => '縱', + 'b' => '繅', + 'c' => '繁', + 'd' => '縴', + 'e' => '縹', + 'f' => '繈', + 'g' => '縵', + 'h' => '縿', + 'i' => '縯', + 'j' => '罄', + 'k' => '翳', + 'l' => '翼', + 'm' => '聱', + 'n' => '聲', + 'o' => '聰', + 'p' => '聯', + 'q' => '聳', + 'r' => '臆', + 's' => '臃', + 't' => '膺', + 'u' => '臂', + 'v' => '臀', + 'w' => '膿', + 'x' => '膽', + 'y' => '臉', + 'z' => '膾', + '{' => '臨', + '|' => '舉', + '}' => '艱', + '~' => '薪', + '' => '薄', + '' => '蕾', + '' => '薜', + '' => '薑', + '' => '薔', + '' => '薯', + '' => '薛', + '' => '薇', + '' => '薨', + '' => '薊', + '' => '虧', + '' => '蟀', + '' => '蟑', + '' => '螳', + '' => '蟒', + '' => '蟆', + '' => '螫', + '' => '螻', + '' => '螺', + '' => '蟈', + '' => '蟋', + '' => '褻', + '' => '褶', + '' => '襄', + '' => '褸', + '' => '褽', + '' => '覬', + '' => '謎', + '' => '謗', + '' => '謙', + '' => '講', + '' => '謊', + '' => '謠', + '' => '謝', + '' => '謄', + '' => '謐', + '' => '豁', + '' => '谿', + '' => '豳', + '' => '賺', + '' => '賽', + '' => '購', + '' => '賸', + '' => '賻', + '' => '趨', + '' => '蹉', + '' => '蹋', + '' => '蹈', + '' => '蹊', + '' => '轄', + '' => '輾', + '' => '轂', + '' => '轅', + '' => '輿', + '' => '避', + '' => '遽', + '' => '還', + '' => '邁', + '' => '邂', + '' => '邀', + '' => '鄹', + '' => '醣', + '' => '醞', + '' => '醜', + '' => '鍍', + '' => '鎂', + '' => '錨', + '' => '鍵', + '' => '鍊', + '' => '鍥', + '' => '鍋', + '' => '錘', + '' => '鍾', + '' => '鍬', + '' => '鍛', + '' => '鍰', + '' => '鍚', + '' => '鍔', + '' => '闊', + '' => '闋', + '' => '闌', + '' => '闈', + '' => '闆', + '' => '隱', + '' => '隸', + '' => '雖', + '' => '霜', + '' => '霞', + '' => '鞠', + '' => '韓', + '' => '顆', + '' => '颶', + '' => '餵', + '' => '騁', + '@' => '駿', + 'A' => '鮮', + 'B' => '鮫', + 'C' => '鮪', + 'D' => '鮭', + 'E' => '鴻', + 'F' => '鴿', + 'G' => '麋', + 'H' => '黏', + 'I' => '點', + 'J' => '黜', + 'K' => '黝', + 'L' => '黛', + 'M' => '鼾', + 'N' => '齋', + 'O' => '叢', + 'P' => '嚕', + 'Q' => '嚮', + 'R' => '壙', + 'S' => '壘', + 'T' => '嬸', + 'U' => '彝', + 'V' => '懣', + 'W' => '戳', + 'X' => '擴', + 'Y' => '擲', + 'Z' => '擾', + '[' => '攆', + '\\' => '擺', + ']' => '擻', + '^' => '擷', + '_' => '斷', + '`' => '曜', + 'a' => '朦', + 'b' => '檳', + 'c' => '檬', + 'd' => '櫃', + 'e' => '檻', + 'f' => '檸', + 'g' => '櫂', + 'h' => '檮', + 'i' => '檯', + 'j' => '歟', + 'k' => '歸', + 'l' => '殯', + 'm' => '瀉', + 'n' => '瀋', + 'o' => '濾', + 'p' => '瀆', + 'q' => '濺', + 'r' => '瀑', + 's' => '瀏', + 't' => '燻', + 'u' => '燼', + 'v' => '燾', + 'w' => '燸', + 'x' => '獷', + 'y' => '獵', + 'z' => '璧', + '{' => '璿', + '|' => '甕', + '}' => '癖', + '~' => '癘', + '¡' => '癒', + '¢' => '瞽', + '£' => '瞿', + '¤' => '瞻', + '¥' => '瞼', + '¦' => '礎', + '§' => '禮', + '¨' => '穡', + '©' => '穢', + 'ª' => '穠', + '«' => '竄', + '¬' => '竅', + '­' => '簫', + '®' => '簧', + '¯' => '簪', + '°' => '簞', + '±' => '簣', + '²' => '簡', + '³' => '糧', + '´' => '織', + 'µ' => '繕', + '¶' => '繞', + '·' => '繚', + '¸' => '繡', + '¹' => '繒', + 'º' => '繙', + '»' => '罈', + '¼' => '翹', + '½' => '翻', + '¾' => '職', + '¿' => '聶', + '' => '臍', + '' => '臏', + '' => '舊', + '' => '藏', + '' => '薩', + '' => '藍', + '' => '藐', + '' => '藉', + '' => '薰', + '' => '薺', + '' => '薹', + '' => '薦', + '' => '蟯', + '' => '蟬', + '' => '蟲', + '' => '蟠', + '' => '覆', + '' => '覲', + '' => '觴', + '' => '謨', + '' => '謹', + '' => '謬', + '' => '謫', + '' => '豐', + '' => '贅', + '' => '蹙', + '' => '蹣', + '' => '蹦', + '' => '蹤', + '' => '蹟', + '' => '蹕', + '' => '軀', + '' => '轉', + '' => '轍', + '' => '邇', + '' => '邃', + '' => '邈', + '' => '醫', + '' => '醬', + '' => '釐', + '' => '鎔', + '' => '鎊', + '' => '鎖', + '' => '鎢', + '' => '鎳', + '' => '鎮', + '' => '鎬', + '' => '鎰', + '' => '鎘', + '' => '鎚', + '' => '鎗', + '' => '闔', + '' => '闖', + '' => '闐', + '' => '闕', + '' => '離', + '' => '雜', + '' => '雙', + '' => '雛', + '' => '雞', + '' => '霤', + '' => '鞣', + '' => '鞦', + '@' => '鞭', + 'A' => '韹', + 'B' => '額', + 'C' => '顏', + 'D' => '題', + 'E' => '顎', + 'F' => '顓', + 'G' => '颺', + 'H' => '餾', + 'I' => '餿', + 'J' => '餽', + 'K' => '餮', + 'L' => '馥', + 'M' => '騎', + 'N' => '髁', + 'O' => '鬃', + 'P' => '鬆', + 'Q' => '魏', + 'R' => '魎', + 'S' => '魍', + 'T' => '鯊', + 'U' => '鯉', + 'V' => '鯽', + 'W' => '鯈', + 'X' => '鯀', + 'Y' => '鵑', + 'Z' => '鵝', + '[' => '鵠', + '\\' => '黠', + ']' => '鼕', + '^' => '鼬', + '_' => '儳', + '`' => '嚥', + 'a' => '壞', + 'b' => '壟', + 'c' => '壢', + 'd' => '寵', + 'e' => '龐', + 'f' => '廬', + 'g' => '懲', + 'h' => '懷', + 'i' => '懶', + 'j' => '懵', + 'k' => '攀', + 'l' => '攏', + 'm' => '曠', + 'n' => '曝', + 'o' => '櫥', + 'p' => '櫝', + 'q' => '櫚', + 'r' => '櫓', + 's' => '瀛', + 't' => '瀟', + 'u' => '瀨', + 'v' => '瀚', + 'w' => '瀝', + 'x' => '瀕', + 'y' => '瀘', + 'z' => '爆', + '{' => '爍', + '|' => '牘', + '}' => '犢', + '~' => '獸', + 'á' => '獺', + 'â' => '璽', + 'ã' => '瓊', + 'ä' => '瓣', + 'å' => '疇', + 'æ' => '疆', + 'ç' => '癟', + 'è' => '癡', + 'é' => '矇', + 'ê' => '礙', + 'ë' => '禱', + 'ì' => '穫', + 'í' => '穩', + 'î' => '簾', + 'ï' => '簿', + 'ð' => '簸', + 'ñ' => '簽', + 'ò' => '簷', + 'ó' => '籀', + 'ô' => '繫', + 'õ' => '繭', + 'ö' => '繹', + '÷' => '繩', + 'ø' => '繪', + 'ù' => '羅', + 'ú' => '繳', + 'û' => '羶', + 'ü' => '羹', + 'ý' => '羸', + 'þ' => '臘', + 'ÿ' => '藩', + '' => '藝', + '' => '藪', + '' => '藕', + '' => '藤', + '' => '藥', + '' => '藷', + '' => '蟻', + '' => '蠅', + '' => '蠍', + '' => '蟹', + '' => '蟾', + '' => '襠', + '' => '襟', + '' => '襖', + '' => '襞', + '' => '譁', + '' => '譜', + '' => '識', + '' => '證', + '' => '譚', + '' => '譎', + '' => '譏', + '' => '譆', + '' => '譙', + '' => '贈', + '' => '贊', + '' => '蹼', + '' => '蹲', + '' => '躇', + '' => '蹶', + '' => '蹬', + '' => '蹺', + '' => '蹴', + '' => '轔', + '' => '轎', + '' => '辭', + '' => '邊', + '' => '邋', + '' => '醱', + '' => '醮', + '' => '鏡', + '' => '鏑', + '' => '鏟', + '' => '鏃', + '' => '鏈', + '' => '鏜', + '' => '鏝', + '' => '鏖', + '' => '鏢', + '' => '鏍', + '' => '鏘', + '' => '鏤', + '' => '鏗', + '' => '鏨', + '' => '關', + '' => '隴', + '' => '難', + '' => '霪', + '' => '霧', + '' => '靡', + '' => '韜', + '' => '韻', + '' => '類', + '@' => '願', + 'A' => '顛', + 'B' => '颼', + 'C' => '饅', + 'D' => '饉', + 'E' => '騖', + 'F' => '騙', + 'G' => '鬍', + 'H' => '鯨', + 'I' => '鯧', + 'J' => '鯖', + 'K' => '鯛', + 'L' => '鶉', + 'M' => '鵡', + 'N' => '鵲', + 'O' => '鵪', + 'P' => '鵬', + 'Q' => '麒', + 'R' => '麗', + 'S' => '麓', + 'T' => '麴', + 'U' => '勸', + 'V' => '嚨', + 'W' => '嚷', + 'X' => '嚶', + 'Y' => '嚴', + 'Z' => '嚼', + '[' => '壤', + '\\' => '孀', + ']' => '孃', + '^' => '孽', + '_' => '寶', + '`' => '巉', + 'a' => '懸', + 'b' => '懺', + 'c' => '攘', + 'd' => '攔', + 'e' => '攙', + 'f' => '曦', + 'g' => '朧', + 'h' => '櫬', + 'i' => '瀾', + 'j' => '瀰', + 'k' => '瀲', + 'l' => '爐', + 'm' => '獻', + 'n' => '瓏', + 'o' => '癢', + 'p' => '癥', + 'q' => '礦', + 'r' => '礪', + 's' => '礬', + 't' => '礫', + 'u' => '竇', + 'v' => '競', + 'w' => '籌', + 'x' => '籃', + 'y' => '籍', + 'z' => '糯', + '{' => '糰', + '|' => '辮', + '}' => '繽', + '~' => '繼', + 'ġ' => '纂', + 'Ģ' => '罌', + 'ģ' => '耀', + 'Ĥ' => '臚', + 'ĥ' => '艦', + 'Ħ' => '藻', + 'ħ' => '藹', + 'Ĩ' => '蘑', + 'ĩ' => '藺', + 'Ī' => '蘆', + 'ī' => '蘋', + 'Ĭ' => '蘇', + 'ĭ' => '蘊', + 'Į' => '蠔', + 'į' => '蠕', + 'İ' => '襤', + 'ı' => '覺', + 'IJ' => '觸', + 'ij' => '議', + 'Ĵ' => '譬', + 'ĵ' => '警', + 'Ķ' => '譯', + 'ķ' => '譟', + 'ĸ' => '譫', + 'Ĺ' => '贏', + 'ĺ' => '贍', + 'Ļ' => '躉', + 'ļ' => '躁', + 'Ľ' => '躅', + 'ľ' => '躂', + 'Ŀ' => '醴', + '' => '釋', + '' => '鐘', + '' => '鐃', + '' => '鏽', + '' => '闡', + '' => '霰', + '' => '飄', + '' => '饒', + '' => '饑', + '' => '馨', + '' => '騫', + '' => '騰', + '' => '騷', + '' => '騵', + '' => '鰓', + '' => '鰍', + '' => '鹹', + '' => '麵', + '' => '黨', + '' => '鼯', + '' => '齟', + '' => '齣', + '' => '齡', + '' => '儷', + '' => '儸', + '' => '囁', + '' => '囀', + '' => '囂', + '' => '夔', + '' => '屬', + '' => '巍', + '' => '懼', + '' => '懾', + '' => '攝', + '' => '攜', + '' => '斕', + '' => '曩', + '' => '櫻', + '' => '欄', + '' => '櫺', + '' => '殲', + '' => '灌', + '' => '爛', + '' => '犧', + '' => '瓖', + '' => '瓔', + '' => '癩', + '' => '矓', + '' => '籐', + '' => '纏', + '' => '續', + '' => '羼', + '' => '蘗', + '' => '蘭', + '' => '蘚', + '' => '蠣', + '' => '蠢', + '' => '蠡', + '' => '蠟', + '' => '襪', + '' => '襬', + '' => '覽', + '' => '譴', + '@' => '護', + 'A' => '譽', + 'B' => '贓', + 'C' => '躊', + 'D' => '躍', + 'E' => '躋', + 'F' => '轟', + 'G' => '辯', + 'H' => '醺', + 'I' => '鐮', + 'J' => '鐳', + 'K' => '鐵', + 'L' => '鐺', + 'M' => '鐸', + 'N' => '鐲', + 'O' => '鐫', + 'P' => '闢', + 'Q' => '霸', + 'R' => '霹', + 'S' => '露', + 'T' => '響', + 'U' => '顧', + 'V' => '顥', + 'W' => '饗', + 'X' => '驅', + 'Y' => '驃', + 'Z' => '驀', + '[' => '騾', + '\\' => '髏', + ']' => '魔', + '^' => '魑', + '_' => '鰭', + '`' => '鰥', + 'a' => '鶯', + 'b' => '鶴', + 'c' => '鷂', + 'd' => '鶸', + 'e' => '麝', + 'f' => '黯', + 'g' => '鼙', + 'h' => '齜', + 'i' => '齦', + 'j' => '齧', + 'k' => '儼', + 'l' => '儻', + 'm' => '囈', + 'n' => '囊', + 'o' => '囉', + 'p' => '孿', + 'q' => '巔', + 'r' => '巒', + 's' => '彎', + 't' => '懿', + 'u' => '攤', + 'v' => '權', + 'w' => '歡', + 'x' => '灑', + 'y' => '灘', + 'z' => '玀', + '{' => '瓤', + '|' => '疊', + '}' => '癮', + '~' => '癬', + 'š' => '禳', + 'Ţ' => '籠', + 'ţ' => '籟', + 'Ť' => '聾', + 'ť' => '聽', + 'Ŧ' => '臟', + 'ŧ' => '襲', + 'Ũ' => '襯', + 'ũ' => '觼', + 'Ū' => '讀', + 'ū' => '贖', + 'Ŭ' => '贗', + 'ŭ' => '躑', + 'Ů' => '躓', + 'ů' => '轡', + 'Ű' => '酈', + 'ű' => '鑄', + 'Ų' => '鑑', + 'ų' => '鑒', + 'Ŵ' => '霽', + 'ŵ' => '霾', + 'Ŷ' => '韃', + 'ŷ' => '韁', + 'Ÿ' => '顫', + 'Ź' => '饕', + 'ź' => '驕', + 'Ż' => '驍', + 'ż' => '髒', + 'Ž' => '鬚', + 'ž' => '鱉', + 'ſ' => '鰱', + '' => '鰾', + '' => '鰻', + '' => '鷓', + '' => '鷗', + '' => '鼴', + '' => '齬', + '' => '齪', + '' => '龔', + '' => '囌', + '' => '巖', + '' => '戀', + '' => '攣', + '' => '攫', + '' => '攪', + '' => '曬', + '' => '欐', + '' => '瓚', + '' => '竊', + '' => '籤', + '' => '籣', + '' => '籥', + '' => '纓', + '' => '纖', + '' => '纔', + '' => '臢', + '' => '蘸', + '' => '蘿', + '' => '蠱', + '' => '變', + '' => '邐', + '' => '邏', + '' => '鑣', + '' => '鑠', + '' => '鑤', + '' => '靨', + '' => '顯', + '' => '饜', + '' => '驚', + '' => '驛', + '' => '驗', + '' => '髓', + '' => '體', + '' => '髑', + '' => '鱔', + '' => '鱗', + '' => '鱖', + '' => '鷥', + '' => '麟', + '' => '黴', + '' => '囑', + '' => '壩', + '' => '攬', + '' => '灞', + '' => '癱', + '' => '癲', + '' => '矗', + '' => '罐', + '' => '羈', + '' => '蠶', + '' => '蠹', + '' => '衢', + '' => '讓', + '' => '讒', + '@' => '讖', + 'A' => '艷', + 'B' => '贛', + 'C' => '釀', + 'D' => '鑪', + 'E' => '靂', + 'F' => '靈', + 'G' => '靄', + 'H' => '韆', + 'I' => '顰', + 'J' => '驟', + 'K' => '鬢', + 'L' => '魘', + 'M' => '鱟', + 'N' => '鷹', + 'O' => '鷺', + 'P' => '鹼', + 'Q' => '鹽', + 'R' => '鼇', + 'S' => '齷', + 'T' => '齲', + 'U' => '廳', + 'V' => '欖', + 'W' => '灣', + 'X' => '籬', + 'Y' => '籮', + 'Z' => '蠻', + '[' => '觀', + '\\' => '躡', + ']' => '釁', + '^' => '鑲', + '_' => '鑰', + '`' => '顱', + 'a' => '饞', + 'b' => '髖', + 'c' => '鬣', + 'd' => '黌', + 'e' => '灤', + 'f' => '矚', + 'g' => '讚', + 'h' => '鑷', + 'i' => '韉', + 'j' => '驢', + 'k' => '驥', + 'l' => '纜', + 'm' => '讜', + 'n' => '躪', + 'o' => '釅', + 'p' => '鑽', + 'q' => '鑾', + 'r' => '鑼', + 's' => '鱷', + 't' => '鱸', + 'u' => '黷', + 'v' => '豔', + 'w' => '鑿', + 'x' => '鸚', + 'y' => '爨', + 'z' => '驪', + '{' => '鬱', + '|' => '鸛', + '}' => '鸞', + '~' => '籲', + 'ơ' => 'ヾ', + 'Ƣ' => 'ゝ', + 'ƣ' => 'ゞ', + 'Ƥ' => '々', + 'ƥ' => 'ぁ', + 'Ʀ' => 'あ', + 'Ƨ' => 'ぃ', + 'ƨ' => 'い', + 'Ʃ' => 'ぅ', + 'ƪ' => 'う', + 'ƫ' => 'ぇ', + 'Ƭ' => 'え', + 'ƭ' => 'ぉ', + 'Ʈ' => 'お', + 'Ư' => 'か', + 'ư' => 'が', + 'Ʊ' => 'き', + 'Ʋ' => 'ぎ', + 'Ƴ' => 'く', + 'ƴ' => 'ぐ', + 'Ƶ' => 'け', + 'ƶ' => 'げ', + 'Ʒ' => 'こ', + 'Ƹ' => 'ご', + 'ƹ' => 'さ', + 'ƺ' => 'ざ', + 'ƻ' => 'し', + 'Ƽ' => 'じ', + 'ƽ' => 'す', + 'ƾ' => 'ず', + 'ƿ' => 'せ', + '' => 'ぜ', + '' => 'そ', + '' => 'ぞ', + '' => 'た', + '' => 'だ', + '' => 'ち', + '' => 'ぢ', + '' => 'っ', + '' => 'つ', + '' => 'づ', + '' => 'て', + '' => 'で', + '' => 'と', + '' => 'ど', + '' => 'な', + '' => 'に', + '' => 'ぬ', + '' => 'ね', + '' => 'の', + '' => 'は', + '' => 'ば', + '' => 'ぱ', + '' => 'ひ', + '' => 'び', + '' => 'ぴ', + '' => 'ふ', + '' => 'ぶ', + '' => 'ぷ', + '' => 'へ', + '' => 'べ', + '' => 'ぺ', + '' => 'ほ', + '' => 'ぼ', + '' => 'ぽ', + '' => 'ま', + '' => 'み', + '' => 'む', + '' => 'め', + '' => 'も', + '' => 'ゃ', + '' => 'や', + '' => 'ゅ', + '' => 'ゆ', + '' => 'ょ', + '' => 'よ', + '' => 'ら', + '' => 'り', + '' => 'る', + '' => 'れ', + '' => 'ろ', + '' => 'ゎ', + '' => 'わ', + '' => 'ゐ', + '' => 'ゑ', + '' => 'を', + '' => 'ん', + '' => 'ァ', + '' => 'ア', + '' => 'ィ', + '' => 'イ', + '' => 'ゥ', + '' => 'ウ', + '' => 'ェ', + '@' => 'エ', + 'A' => 'ォ', + 'B' => 'オ', + 'C' => 'カ', + 'D' => 'ガ', + 'E' => 'キ', + 'F' => 'ギ', + 'G' => 'ク', + 'H' => 'グ', + 'I' => 'ケ', + 'J' => 'ゲ', + 'K' => 'コ', + 'L' => 'ゴ', + 'M' => 'サ', + 'N' => 'ザ', + 'O' => 'シ', + 'P' => 'ジ', + 'Q' => 'ス', + 'R' => 'ズ', + 'S' => 'セ', + 'T' => 'ゼ', + 'U' => 'ソ', + 'V' => 'ゾ', + 'W' => 'タ', + 'X' => 'ダ', + 'Y' => 'チ', + 'Z' => 'ヂ', + '[' => 'ッ', + '\\' => 'ツ', + ']' => 'ヅ', + '^' => 'テ', + '_' => 'デ', + '`' => 'ト', + 'a' => 'ド', + 'b' => 'ナ', + 'c' => 'ニ', + 'd' => 'ヌ', + 'e' => 'ネ', + 'f' => 'ノ', + 'g' => 'ハ', + 'h' => 'バ', + 'i' => 'パ', + 'j' => 'ヒ', + 'k' => 'ビ', + 'l' => 'ピ', + 'm' => 'フ', + 'n' => 'ブ', + 'o' => 'プ', + 'p' => 'ヘ', + 'q' => 'ベ', + 'r' => 'ペ', + 's' => 'ホ', + 't' => 'ボ', + 'u' => 'ポ', + 'v' => 'マ', + 'w' => 'ミ', + 'x' => 'ム', + 'y' => 'メ', + 'z' => 'モ', + '{' => 'ャ', + '|' => 'ヤ', + '}' => 'ュ', + '~' => 'ユ', + 'ǡ' => 'ョ', + 'Ǣ' => 'ヨ', + 'ǣ' => 'ラ', + 'Ǥ' => 'リ', + 'ǥ' => 'ル', + 'Ǧ' => 'レ', + 'ǧ' => 'ロ', + 'Ǩ' => 'ヮ', + 'ǩ' => 'ワ', + 'Ǫ' => 'ヰ', + 'ǫ' => 'ヱ', + 'Ǭ' => 'ヲ', + 'ǭ' => 'ン', + 'Ǯ' => 'ヴ', + 'ǯ' => 'ヵ', + 'ǰ' => 'ヶ', + 'DZ' => 'Д', + 'Dz' => 'Е', + 'dz' => 'Ё', + 'Ǵ' => 'Ж', + 'ǵ' => 'З', + 'Ƕ' => 'И', + 'Ƿ' => 'Й', + 'Ǹ' => 'К', + 'ǹ' => 'Л', + 'Ǻ' => 'М', + 'ǻ' => 'У', + 'Ǽ' => 'Ф', + 'ǽ' => 'Х', + 'Ǿ' => 'Ц', + 'ǿ' => 'Ч', + '' => 'Ш', + '' => 'Щ', + '' => 'Ъ', + '' => 'Ы', + '' => 'Ь', + '' => 'Э', + '' => 'Ю', + '' => 'Я', + '' => 'а', + '' => 'б', + '' => 'в', + '' => 'г', + '' => 'д', + '' => 'е', + '' => 'ё', + '' => 'ж', + '' => 'з', + '' => 'и', + '' => 'й', + '' => 'к', + '' => 'л', + '' => 'м', + '' => 'н', + '' => 'о', + '' => 'п', + '' => 'р', + '' => 'с', + '' => 'т', + '' => 'у', + '' => 'ф', + '' => 'х', + '' => 'ц', + '' => 'ч', + '' => 'ш', + '' => 'щ', + '' => 'ъ', + '' => 'ы', + '' => 'ь', + '' => 'э', + '' => 'ю', + '' => 'я', + '' => '①', + '' => '②', + '' => '③', + '' => '④', + '' => '⑤', + '' => '⑥', + '' => '⑦', + '' => '⑧', + '' => '⑨', + '' => '⑩', + '' => '⑴', + '' => '⑵', + '' => '⑶', + '' => '⑷', + '' => '⑸', + '' => '⑹', + '' => '⑺', + '' => '⑻', + '' => '⑼', + '' => '⑽', + '@' => '乂', + 'A' => '乜', + 'B' => '凵', + 'C' => '匚', + 'D' => '厂', + 'E' => '万', + 'F' => '丌', + 'G' => '乇', + 'H' => '亍', + 'I' => '囗', + 'J' => '兀', + 'K' => '屮', + 'L' => '彳', + 'M' => '丏', + 'N' => '冇', + 'O' => '与', + 'P' => '丮', + 'Q' => '亓', + 'R' => '仂', + 'S' => '仉', + 'T' => '仈', + 'U' => '冘', + 'V' => '勼', + 'W' => '卬', + 'X' => '厹', + 'Y' => '圠', + 'Z' => '夃', + '[' => '夬', + '\\' => '尐', + ']' => '巿', + '^' => '旡', + '_' => '殳', + '`' => '毌', + 'a' => '气', + 'b' => '爿', + 'c' => '丱', + 'd' => '丼', + 'e' => '仨', + 'f' => '仜', + 'g' => '仩', + 'h' => '仡', + 'i' => '仝', + 'j' => '仚', + 'k' => '刌', + 'l' => '匜', + 'm' => '卌', + 'n' => '圢', + 'o' => '圣', + 'p' => '夗', + 'q' => '夯', + 'r' => '宁', + 's' => '宄', + 't' => '尒', + 'u' => '尻', + 'v' => '屴', + 'w' => '屳', + 'x' => '帄', + 'y' => '庀', + 'z' => '庂', + '{' => '忉', + '|' => '戉', + '}' => '扐', + '~' => '氕', + 'ɡ' => '氶', + 'ɢ' => '汃', + 'ɣ' => '氿', + 'ɤ' => '氻', + 'ɥ' => '犮', + 'ɦ' => '犰', + 'ɧ' => '玊', + 'ɨ' => '禸', + 'ɩ' => '肊', + 'ɪ' => '阞', + 'ɫ' => '伎', + 'ɬ' => '优', + 'ɭ' => '伬', + 'ɮ' => '仵', + 'ɯ' => '伔', + 'ɰ' => '仱', + 'ɱ' => '伀', + 'ɲ' => '价', + 'ɳ' => '伈', + 'ɴ' => '伝', + 'ɵ' => '伂', + 'ɶ' => '伅', + 'ɷ' => '伢', + 'ɸ' => '伓', + 'ɹ' => '伄', + 'ɺ' => '仴', + 'ɻ' => '伒', + 'ɼ' => '冱', + 'ɽ' => '刓', + 'ɾ' => '刉', + 'ɿ' => '刐', + '' => '劦', + '' => '匢', + '' => '匟', + '' => '卍', + '' => '厊', + '' => '吇', + '' => '囡', + '' => '囟', + '' => '圮', + '' => '圪', + '' => '圴', + '' => '夼', + '' => '妀', + '' => '奼', + '' => '妅', + '' => '奻', + '' => '奾', + '' => '奷', + '' => '奿', + '' => '孖', + '' => '尕', + '' => '尥', + '' => '屼', + '' => '屺', + '' => '屻', + '' => '屾', + '' => '巟', + '' => '幵', + '' => '庄', + '' => '异', + '' => '弚', + '' => '彴', + '' => '忕', + '' => '忔', + '' => '忏', + '' => '扜', + '' => '扞', + '' => '扤', + '' => '扡', + '' => '扦', + '' => '扢', + '' => '扙', + '' => '扠', + '' => '扚', + '' => '扥', + '' => '旯', + '' => '旮', + '' => '朾', + '' => '朹', + '' => '朸', + '' => '朻', + '' => '机', + '' => '朿', + '' => '朼', + '' => '朳', + '' => '氘', + '' => '汆', + '' => '汒', + '' => '汜', + '' => '汏', + '' => '汊', + '' => '汔', + '' => '汋', + '@' => '汌', + 'A' => '灱', + 'B' => '牞', + 'C' => '犴', + 'D' => '犵', + 'E' => '玎', + 'F' => '甪', + 'G' => '癿', + 'H' => '穵', + 'I' => '网', + 'J' => '艸', + 'K' => '艼', + 'L' => '芀', + 'M' => '艽', + 'N' => '艿', + 'O' => '虍', + 'P' => '襾', + 'Q' => '邙', + 'R' => '邗', + 'S' => '邘', + 'T' => '邛', + 'U' => '邔', + 'V' => '阢', + 'W' => '阤', + 'X' => '阠', + 'Y' => '阣', + 'Z' => '佖', + '[' => '伻', + '\\' => '佢', + ']' => '佉', + '^' => '体', + '_' => '佤', + '`' => '伾', + 'a' => '佧', + 'b' => '佒', + 'c' => '佟', + 'd' => '佁', + 'e' => '佘', + 'f' => '伭', + 'g' => '伳', + 'h' => '伿', + 'i' => '佡', + 'j' => '冏', + 'k' => '冹', + 'l' => '刜', + 'm' => '刞', + 'n' => '刡', + 'o' => '劭', + 'p' => '劮', + 'q' => '匉', + 'r' => '卣', + 's' => '卲', + 't' => '厎', + 'u' => '厏', + 'v' => '吰', + 'w' => '吷', + 'x' => '吪', + 'y' => '呔', + 'z' => '呅', + '{' => '吙', + '|' => '吜', + '}' => '吥', + '~' => '吘', + 'ʡ' => '吽', + 'ʢ' => '呏', + 'ʣ' => '呁', + 'ʤ' => '吨', + 'ʥ' => '吤', + 'ʦ' => '呇', + 'ʧ' => '囮', + 'ʨ' => '囧', + 'ʩ' => '囥', + 'ʪ' => '坁', + 'ʫ' => '坅', + 'ʬ' => '坌', + 'ʭ' => '坉', + 'ʮ' => '坋', + 'ʯ' => '坒', + 'ʰ' => '夆', + 'ʱ' => '奀', + 'ʲ' => '妦', + 'ʳ' => '妘', + 'ʴ' => '妠', + 'ʵ' => '妗', + 'ʶ' => '妎', + 'ʷ' => '妢', + 'ʸ' => '妐', + 'ʹ' => '妏', + 'ʺ' => '妧', + 'ʻ' => '妡', + 'ʼ' => '宎', + 'ʽ' => '宒', + 'ʾ' => '尨', + 'ʿ' => '尪', + '' => '岍', + '' => '岏', + '' => '岈', + '' => '岋', + '' => '岉', + '' => '岒', + '' => '岊', + '' => '岆', + '' => '岓', + '' => '岕', + '' => '巠', + '' => '帊', + '' => '帎', + '' => '庋', + '' => '庉', + '' => '庌', + '' => '庈', + '' => '庍', + '' => '弅', + '' => '弝', + '' => '彸', + '' => '彶', + '' => '忒', + '' => '忑', + '' => '忐', + '' => '忭', + '' => '忨', + '' => '忮', + '' => '忳', + '' => '忡', + '' => '忤', + '' => '忣', + '' => '忺', + '' => '忯', + '' => '忷', + '' => '忻', + '' => '怀', + '' => '忴', + '' => '戺', + '' => '抃', + '' => '抌', + '' => '抎', + '' => '抏', + '' => '抔', + '' => '抇', + '' => '扱', + '' => '扻', + '' => '扺', + '' => '扰', + '' => '抁', + '' => '抈', + '' => '扷', + '' => '扽', + '' => '扲', + '' => '扴', + '' => '攷', + '' => '旰', + '' => '旴', + '' => '旳', + '' => '旲', + '' => '旵', + '' => '杅', + '' => '杇', + '@' => '杙', + 'A' => '杕', + 'B' => '杌', + 'C' => '杈', + 'D' => '杝', + 'E' => '杍', + 'F' => '杚', + 'G' => '杋', + 'H' => '毐', + 'I' => '氙', + 'J' => '氚', + 'K' => '汸', + 'L' => '汧', + 'M' => '汫', + 'N' => '沄', + 'O' => '沋', + 'P' => '沏', + 'Q' => '汱', + 'R' => '汯', + 'S' => '汩', + 'T' => '沚', + 'U' => '汭', + 'V' => '沇', + 'W' => '沕', + 'X' => '沜', + 'Y' => '汦', + 'Z' => '汳', + '[' => '汥', + '\\' => '汻', + ']' => '沎', + '^' => '灴', + '_' => '灺', + '`' => '牣', + 'a' => '犿', + 'b' => '犽', + 'c' => '狃', + 'd' => '狆', + 'e' => '狁', + 'f' => '犺', + 'g' => '狅', + 'h' => '玕', + 'i' => '玗', + 'j' => '玓', + 'k' => '玔', + 'l' => '玒', + 'm' => '町', + 'n' => '甹', + 'o' => '疔', + 'p' => '疕', + 'q' => '皁', + 'r' => '礽', + 's' => '耴', + 't' => '肕', + 'u' => '肙', + 'v' => '肐', + 'w' => '肒', + 'x' => '肜', + 'y' => '芐', + 'z' => '芏', + '{' => '芅', + '|' => '芎', + '}' => '芑', + '~' => '芓', + 'ˡ' => '芊', + 'ˢ' => '芃', + 'ˣ' => '芄', + 'ˤ' => '豸', + '˥' => '迉', + '˦' => '辿', + '˧' => '邟', + '˨' => '邡', + '˩' => '邥', + '˪' => '邞', + '˫' => '邧', + 'ˬ' => '邠', + '˭' => '阰', + 'ˮ' => '阨', + '˯' => '阯', + '˰' => '阭', + '˱' => '丳', + '˲' => '侘', + '˳' => '佼', + '˴' => '侅', + '˵' => '佽', + '˶' => '侀', + '˷' => '侇', + '˸' => '佶', + '˹' => '佴', + '˺' => '侉', + '˻' => '侄', + '˼' => '佷', + '˽' => '佌', + '˾' => '侗', + '˿' => '佪', + '' => '侚', + '' => '佹', + '' => '侁', + '' => '佸', + '' => '侐', + '' => '侜', + '' => '侔', + '' => '侞', + '' => '侒', + '' => '侂', + '' => '侕', + '' => '佫', + '' => '佮', + '' => '冞', + '' => '冼', + '' => '冾', + '' => '刵', + '' => '刲', + '' => '刳', + '' => '剆', + '' => '刱', + '' => '劼', + '' => '匊', + '' => '匋', + '' => '匼', + '' => '厒', + '' => '厔', + '' => '咇', + '' => '呿', + '' => '咁', + '' => '咑', + '' => '咂', + '' => '咈', + '' => '呫', + '' => '呺', + '' => '呾', + '' => '呥', + '' => '呬', + '' => '呴', + '' => '呦', + '' => '咍', + '' => '呯', + '' => '呡', + '' => '呠', + '' => '咘', + '' => '呣', + '' => '呧', + '' => '呤', + '' => '囷', + '' => '囹', + '' => '坯', + '' => '坲', + '' => '坭', + '' => '坫', + '' => '坱', + '' => '坰', + '' => '坶', + '' => '垀', + '' => '坵', + '' => '坻', + '' => '坳', + '' => '坴', + '' => '坢', + '@' => '坨', + 'A' => '坽', + 'B' => '夌', + 'C' => '奅', + 'D' => '妵', + 'E' => '妺', + 'F' => '姏', + 'G' => '姎', + 'H' => '妲', + 'I' => '姌', + 'J' => '姁', + 'K' => '妶', + 'L' => '妼', + 'M' => '姃', + 'N' => '姖', + 'O' => '妱', + 'P' => '妽', + 'Q' => '姀', + 'R' => '姈', + 'S' => '妴', + 'T' => '姇', + 'U' => '孢', + 'V' => '孥', + 'W' => '宓', + 'X' => '宕', + 'Y' => '屄', + 'Z' => '屇', + '[' => '岮', + '\\' => '岤', + ']' => '岠', + '^' => '岵', + '_' => '岯', + '`' => '岨', + 'a' => '岬', + 'b' => '岟', + 'c' => '岣', + 'd' => '岭', + 'e' => '岢', + 'f' => '岪', + 'g' => '岧', + 'h' => '岝', + 'i' => '岥', + 'j' => '岶', + 'k' => '岰', + 'l' => '岦', + 'm' => '帗', + 'n' => '帔', + 'o' => '帙', + 'p' => '弨', + 'q' => '弢', + 'r' => '弣', + 's' => '弤', + 't' => '彔', + 'u' => '徂', + 'v' => '彾', + 'w' => '彽', + 'x' => '忞', + 'y' => '忥', + 'z' => '怭', + '{' => '怦', + '|' => '怙', + '}' => '怲', + '~' => '怋', + '̡' => '怴', + '̢' => '怊', + '̣' => '怗', + '̤' => '怳', + '̥' => '怚', + '̦' => '怞', + '̧' => '怬', + '̨' => '怢', + '̩' => '怍', + '̪' => '怐', + '̫' => '怮', + '̬' => '怓', + '̭' => '怑', + '̮' => '怌', + '̯' => '怉', + '̰' => '怜', + '̱' => '戔', + '̲' => '戽', + '̳' => '抭', + '̴' => '抴', + '̵' => '拑', + '̶' => '抾', + '̷' => '抪', + '̸' => '抶', + '̹' => '拊', + '̺' => '抮', + '̻' => '抳', + '̼' => '抯', + '̽' => '抻', + '̾' => '抩', + '̿' => '抰', + '' => '抸', + '' => '攽', + '' => '斨', + '' => '斻', + '' => '昉', + '' => '旼', + '' => '昄', + '' => '昒', + '' => '昈', + '' => '旻', + '' => '昃', + '' => '昋', + '' => '昍', + '' => '昅', + '' => '旽', + '' => '昑', + '' => '昐', + '' => '曶', + '' => '朊', + '' => '枅', + '' => '杬', + '' => '枎', + '' => '枒', + '' => '杶', + '' => '杻', + '' => '枘', + '' => '枆', + '' => '构', + '' => '杴', + '' => '枍', + '' => '枌', + '' => '杺', + '' => '枟', + '' => '枑', + '' => '枙', + '' => '枃', + '' => '杽', + '' => '极', + '' => '杸', + '' => '杹', + '' => '枔', + '' => '欥', + '' => '殀', + '' => '歾', + '' => '毞', + '' => '氝', + '' => '沓', + '' => '泬', + '' => '泫', + '' => '泮', + '' => '泙', + '' => '沶', + '' => '泔', + '' => '沭', + '' => '泧', + '' => '沷', + '' => '泐', + '' => '泂', + '' => '沺', + '' => '泃', + '' => '泆', + '' => '泭', + '' => '泲', + '@' => '泒', + 'A' => '泝', + 'B' => '沴', + 'C' => '沊', + 'D' => '沝', + 'E' => '沀', + 'F' => '泞', + 'G' => '泀', + 'H' => '洰', + 'I' => '泍', + 'J' => '泇', + 'K' => '沰', + 'L' => '泹', + 'M' => '泏', + 'N' => '泩', + 'O' => '泑', + 'P' => '炔', + 'Q' => '炘', + 'R' => '炅', + 'S' => '炓', + 'T' => '炆', + 'U' => '炄', + 'V' => '炑', + 'W' => '炖', + 'X' => '炂', + 'Y' => '炚', + 'Z' => '炃', + '[' => '牪', + '\\' => '狖', + ']' => '狋', + '^' => '狘', + '_' => '狉', + '`' => '狜', + 'a' => '狒', + 'b' => '狔', + 'c' => '狚', + 'd' => '狌', + 'e' => '狑', + 'f' => '玤', + 'g' => '玡', + 'h' => '玭', + 'i' => '玦', + 'j' => '玢', + 'k' => '玠', + 'l' => '玬', + 'm' => '玝', + 'n' => '瓝', + 'o' => '瓨', + 'p' => '甿', + 'q' => '畀', + 'r' => '甾', + 's' => '疌', + 't' => '疘', + 'u' => '皯', + 'v' => '盳', + 'w' => '盱', + 'x' => '盰', + 'y' => '盵', + 'z' => '矸', + '{' => '矼', + '|' => '矹', + '}' => '矻', + '~' => '矺', + '͡' => '矷', + '͢' => '祂', + 'ͣ' => '礿', + 'ͤ' => '秅', + 'ͥ' => '穸', + 'ͦ' => '穻', + 'ͧ' => '竻', + 'ͨ' => '籵', + 'ͩ' => '糽', + 'ͪ' => '耵', + 'ͫ' => '肏', + 'ͬ' => '肮', + 'ͭ' => '肣', + 'ͮ' => '肸', + 'ͯ' => '肵', + 'Ͱ' => '肭', + 'ͱ' => '舠', + 'Ͳ' => '芠', + 'ͳ' => '苀', + 'ʹ' => '芫', + '͵' => '芚', + 'Ͷ' => '芘', + 'ͷ' => '芛', + '͸' => '芵', + '͹' => '芧', + 'ͺ' => '芮', + 'ͻ' => '芼', + 'ͼ' => '芞', + 'ͽ' => '芺', + ';' => '芴', + 'Ϳ' => '芨', + '' => '芡', + '' => '芩', + '' => '苂', + '' => '芤', + '' => '苃', + '' => '芶', + '' => '芢', + '' => '虰', + '' => '虯', + '' => '虭', + '' => '虮', + '' => '豖', + '' => '迒', + '' => '迋', + '' => '迓', + '' => '迍', + '' => '迖', + '' => '迕', + '' => '迗', + '' => '邲', + '' => '邴', + '' => '邯', + '' => '邳', + '' => '邰', + '' => '阹', + '' => '阽', + '' => '阼', + '' => '阺', + '' => '陃', + '' => '俍', + '' => '俅', + '' => '俓', + '' => '侲', + '' => '俉', + '' => '俋', + '' => '俁', + '' => '俔', + '' => '俜', + '' => '俙', + '' => '侻', + '' => '侳', + '' => '俛', + '' => '俇', + '' => '俖', + '' => '侺', + '' => '俀', + '' => '侹', + '' => '俬', + '' => '剄', + '' => '剉', + '' => '勀', + '' => '勂', + '' => '匽', + '' => '卼', + '' => '厗', + '' => '厖', + '' => '厙', + '' => '厘', + '' => '咺', + '' => '咡', + '' => '咭', + '' => '咥', + '' => '哏', + '@' => '哃', + 'A' => '茍', + 'B' => '咷', + 'C' => '咮', + 'D' => '哖', + 'E' => '咶', + 'F' => '哅', + 'G' => '哆', + 'H' => '咠', + 'I' => '呰', + 'J' => '咼', + 'K' => '咢', + 'L' => '咾', + 'M' => '呲', + 'N' => '哞', + 'O' => '咰', + 'P' => '垵', + 'Q' => '垞', + 'R' => '垟', + 'S' => '垤', + 'T' => '垌', + 'U' => '垗', + 'V' => '垝', + 'W' => '垛', + 'X' => '垔', + 'Y' => '垘', + 'Z' => '垏', + '[' => '垙', + '\\' => '垥', + ']' => '垚', + '^' => '垕', + '_' => '壴', + '`' => '复', + 'a' => '奓', + 'b' => '姡', + 'c' => '姞', + 'd' => '姮', + 'e' => '娀', + 'f' => '姱', + 'g' => '姝', + 'h' => '姺', + 'i' => '姽', + 'j' => '姼', + 'k' => '姶', + 'l' => '姤', + 'm' => '姲', + 'n' => '姷', + 'o' => '姛', + 'p' => '姩', + 'q' => '姳', + 'r' => '姵', + 's' => '姠', + 't' => '姾', + 'u' => '姴', + 'v' => '姭', + 'w' => '宨', + 'x' => '屌', + 'y' => '峐', + 'z' => '峘', + '{' => '峌', + '|' => '峗', + '}' => '峋', + '~' => '峛', + 'Ρ' => '峞', + '΢' => '峚', + 'Σ' => '峉', + 'Τ' => '峇', + 'Υ' => '峊', + 'Φ' => '峖', + 'Χ' => '峓', + 'Ψ' => '峔', + 'Ω' => '峏', + 'Ϊ' => '峈', + 'Ϋ' => '峆', + 'ά' => '峎', + 'έ' => '峟', + 'ή' => '峸', + 'ί' => '巹', + 'ΰ' => '帡', + 'α' => '帢', + 'β' => '帣', + 'γ' => '帠', + 'δ' => '帤', + 'ε' => '庰', + 'ζ' => '庤', + 'η' => '庢', + 'θ' => '庛', + 'ι' => '庣', + 'κ' => '庥', + 'λ' => '弇', + 'μ' => '弮', + 'ν' => '彖', + 'ξ' => '徆', + 'ο' => '怷', + '' => '怹', + '' => '恔', + '' => '恲', + '' => '恞', + '' => '恅', + '' => '恓', + '' => '恇', + '' => '恉', + '' => '恛', + '' => '恌', + '' => '恀', + '' => '恂', + '' => '恟', + '' => '怤', + '' => '恄', + '' => '恘', + '' => '恦', + '' => '恮', + '' => '扂', + '' => '扃', + '' => '拏', + '' => '挍', + '' => '挋', + '' => '拵', + '' => '挎', + '' => '挃', + '' => '拫', + '' => '拹', + '' => '挏', + '' => '挌', + '' => '拸', + '' => '拶', + '' => '挀', + '' => '挓', + '' => '挔', + '' => '拺', + '' => '挕', + '' => '拻', + '' => '拰', + '' => '敁', + '' => '敃', + '' => '斪', + '' => '斿', + '' => '昶', + '' => '昡', + '' => '昲', + '' => '昵', + '' => '昜', + '' => '昦', + '' => '昢', + '' => '昳', + '' => '昫', + '' => '昺', + '' => '昝', + '' => '昴', + '' => '昹', + '' => '昮', + '' => '朏', + '' => '朐', + '' => '柁', + '' => '柲', + '' => '柈', + '' => '枺', + '@' => '柜', + 'A' => '枻', + 'B' => '柸', + 'C' => '柘', + 'D' => '柀', + 'E' => '枷', + 'F' => '柅', + 'G' => '柫', + 'H' => '柤', + 'I' => '柟', + 'J' => '枵', + 'K' => '柍', + 'L' => '枳', + 'M' => '柷', + 'N' => '柶', + 'O' => '柮', + 'P' => '柣', + 'Q' => '柂', + 'R' => '枹', + 'S' => '柎', + 'T' => '柧', + 'U' => '柰', + 'V' => '枲', + 'W' => '柼', + 'X' => '柆', + 'Y' => '柭', + 'Z' => '柌', + '[' => '枮', + '\\' => '柦', + ']' => '柛', + '^' => '柺', + '_' => '柉', + '`' => '柊', + 'a' => '柃', + 'b' => '柪', + 'c' => '柋', + 'd' => '欨', + 'e' => '殂', + 'f' => '殄', + 'g' => '殶', + 'h' => '毖', + 'i' => '毘', + 'j' => '毠', + 'k' => '氠', + 'l' => '氡', + 'm' => '洨', + 'n' => '洴', + 'o' => '洭', + 'p' => '洟', + 'q' => '洼', + 'r' => '洿', + 's' => '洒', + 't' => '洊', + 'u' => '泚', + 'v' => '洳', + 'w' => '洄', + 'x' => '洙', + 'y' => '洺', + 'z' => '洚', + '{' => '洑', + '|' => '洀', + '}' => '洝', + '~' => '浂', + 'ϡ' => '洁', + 'Ϣ' => '洘', + 'ϣ' => '洷', + 'Ϥ' => '洃', + 'ϥ' => '洏', + 'Ϧ' => '浀', + 'ϧ' => '洇', + 'Ϩ' => '洠', + 'ϩ' => '洬', + 'Ϫ' => '洈', + 'ϫ' => '洢', + 'Ϭ' => '洉', + 'ϭ' => '洐', + 'Ϯ' => '炷', + 'ϯ' => '炟', + 'ϰ' => '炾', + 'ϱ' => '炱', + 'ϲ' => '炰', + 'ϳ' => '炡', + 'ϴ' => '炴', + 'ϵ' => '炵', + '϶' => '炩', + 'Ϸ' => '牁', + 'ϸ' => '牉', + 'Ϲ' => '牊', + 'Ϻ' => '牬', + 'ϻ' => '牰', + 'ϼ' => '牳', + 'Ͻ' => '牮', + 'Ͼ' => '狊', + 'Ͽ' => '狤', + '' => '狨', + '' => '狫', + '' => '狟', + '' => '狪', + '' => '狦', + '' => '狣', + '' => '玅', + '' => '珌', + '' => '珂', + '' => '珈', + '' => '珅', + '' => '玹', + '' => '玶', + '' => '玵', + '' => '玴', + '' => '珫', + '' => '玿', + '' => '珇', + '' => '玾', + '' => '珃', + '' => '珆', + '' => '玸', + '' => '珋', + '' => '瓬', + '' => '瓮', + '' => '甮', + '' => '畇', + '' => '畈', + '' => '疧', + '' => '疪', + '' => '癹', + '' => '盄', + '' => '眈', + '' => '眃', + '' => '眄', + '' => '眅', + '' => '眊', + '' => '盷', + '' => '盻', + '' => '盺', + '' => '矧', + '' => '矨', + '' => '砆', + '' => '砑', + '' => '砒', + '' => '砅', + '' => '砐', + '' => '砏', + '' => '砎', + '' => '砉', + '' => '砃', + '' => '砓', + '' => '祊', + '' => '祌', + '' => '祋', + '' => '祅', + '' => '祄', + '' => '秕', + '' => '种', + '' => '秏', + '' => '秖', + '' => '秎', + '' => '窀', + '@' => '穾', + 'A' => '竑', + 'B' => '笀', + 'C' => '笁', + 'D' => '籺', + 'E' => '籸', + 'F' => '籹', + 'G' => '籿', + 'H' => '粀', + 'I' => '粁', + 'J' => '紃', + 'K' => '紈', + 'L' => '紁', + 'M' => '罘', + 'N' => '羑', + 'O' => '羍', + 'P' => '羾', + 'Q' => '耇', + 'R' => '耎', + 'S' => '耏', + 'T' => '耔', + 'U' => '耷', + 'V' => '胘', + 'W' => '胇', + 'X' => '胠', + 'Y' => '胑', + 'Z' => '胈', + '[' => '胂', + '\\' => '胐', + ']' => '胅', + '^' => '胣', + '_' => '胙', + '`' => '胜', + 'a' => '胊', + 'b' => '胕', + 'c' => '胉', + 'd' => '胏', + 'e' => '胗', + 'f' => '胦', + 'g' => '胍', + 'h' => '臿', + 'i' => '舡', + 'j' => '芔', + 'k' => '苙', + 'l' => '苾', + 'm' => '苹', + 'n' => '茇', + 'o' => '苨', + 'p' => '茀', + 'q' => '苕', + 'r' => '茺', + 's' => '苫', + 't' => '苖', + 'u' => '苴', + 'v' => '苬', + 'w' => '苡', + 'x' => '苲', + 'y' => '苵', + 'z' => '茌', + '{' => '苻', + '|' => '苶', + '}' => '苰', + '~' => '苪', + 'С' => '苤', + 'Т' => '苠', + 'У' => '苺', + 'Ф' => '苳', + 'Х' => '苭', + 'Ц' => '虷', + 'Ч' => '虴', + 'Ш' => '虼', + 'Щ' => '虳', + 'Ъ' => '衁', + 'Ы' => '衎', + 'Ь' => '衧', + 'Э' => '衪', + 'Ю' => '衩', + 'Я' => '觓', + 'а' => '訄', + 'б' => '訇', + 'в' => '赲', + 'г' => '迣', + 'д' => '迡', + 'е' => '迮', + 'ж' => '迠', + 'з' => '郱', + 'и' => '邽', + 'й' => '邿', + 'к' => '郕', + 'л' => '郅', + 'м' => '邾', + 'н' => '郇', + 'о' => '郋', + 'п' => '郈', + '' => '釔', + '' => '釓', + '' => '陔', + '' => '陏', + '' => '陑', + '' => '陓', + '' => '陊', + '' => '陎', + '' => '倞', + '' => '倅', + '' => '倇', + '' => '倓', + '' => '倢', + '' => '倰', + '' => '倛', + '' => '俵', + '' => '俴', + '' => '倳', + '' => '倷', + '' => '倬', + '' => '俶', + '' => '俷', + '' => '倗', + '' => '倜', + '' => '倠', + '' => '倧', + '' => '倵', + '' => '倯', + '' => '倱', + '' => '倎', + '' => '党', + '' => '冔', + '' => '冓', + '' => '凊', + '' => '凄', + '' => '凅', + '' => '凈', + '' => '凎', + '' => '剡', + '' => '剚', + '' => '剒', + '' => '剞', + '' => '剟', + '' => '剕', + '' => '剢', + '' => '勍', + '' => '匎', + '' => '厞', + '' => '唦', + '' => '哢', + '' => '唗', + '' => '唒', + '' => '哧', + '' => '哳', + '' => '哤', + '' => '唚', + '' => '哿', + '' => '唄', + '' => '唈', + '' => '哫', + '' => '唑', + '' => '唅', + '' => '哱', + '@' => '唊', + 'A' => '哻', + 'B' => '哷', + 'C' => '哸', + 'D' => '哠', + 'E' => '唎', + 'F' => '唃', + 'G' => '唋', + 'H' => '圁', + 'I' => '圂', + 'J' => '埌', + 'K' => '堲', + 'L' => '埕', + 'M' => '埒', + 'N' => '垺', + 'O' => '埆', + 'P' => '垽', + 'Q' => '垼', + 'R' => '垸', + 'S' => '垶', + 'T' => '垿', + 'U' => '埇', + 'V' => '埐', + 'W' => '垹', + 'X' => '埁', + 'Y' => '夎', + 'Z' => '奊', + '[' => '娙', + '\\' => '娖', + ']' => '娭', + '^' => '娮', + '_' => '娕', + '`' => '娏', + 'a' => '娗', + 'b' => '娊', + 'c' => '娞', + 'd' => '娳', + 'e' => '孬', + 'f' => '宧', + 'g' => '宭', + 'h' => '宬', + 'i' => '尃', + 'j' => '屖', + 'k' => '屔', + 'l' => '峬', + 'm' => '峿', + 'n' => '峮', + 'o' => '峱', + 'p' => '峷', + 'q' => '崀', + 'r' => '峹', + 's' => '帩', + 't' => '帨', + 'u' => '庨', + 'v' => '庮', + 'w' => '庪', + 'x' => '庬', + 'y' => '弳', + 'z' => '弰', + '{' => '彧', + '|' => '恝', + '}' => '恚', + '~' => '恧', + 'ѡ' => '恁', + 'Ѣ' => '悢', + 'ѣ' => '悈', + 'Ѥ' => '悀', + 'ѥ' => '悒', + 'Ѧ' => '悁', + 'ѧ' => '悝', + 'Ѩ' => '悃', + 'ѩ' => '悕', + 'Ѫ' => '悛', + 'ѫ' => '悗', + 'Ѭ' => '悇', + 'ѭ' => '悜', + 'Ѯ' => '悎', + 'ѯ' => '戙', + 'Ѱ' => '扆', + 'ѱ' => '拲', + 'Ѳ' => '挐', + 'ѳ' => '捖', + 'Ѵ' => '挬', + 'ѵ' => '捄', + 'Ѷ' => '捅', + 'ѷ' => '挶', + 'Ѹ' => '捃', + 'ѹ' => '揤', + 'Ѻ' => '挹', + 'ѻ' => '捋', + 'Ѽ' => '捊', + 'ѽ' => '挼', + 'Ѿ' => '挩', + 'ѿ' => '捁', + '' => '挴', + '' => '捘', + '' => '捔', + '' => '捙', + '' => '挭', + '' => '捇', + '' => '挳', + '' => '捚', + '' => '捑', + '' => '挸', + '' => '捗', + '' => '捀', + '' => '捈', + '' => '敊', + '' => '敆', + '' => '旆', + '' => '旃', + '' => '旄', + '' => '旂', + '' => '晊', + '' => '晟', + '' => '晇', + '' => '晑', + '' => '朒', + '' => '朓', + '' => '栟', + '' => '栚', + '' => '桉', + '' => '栲', + '' => '栳', + '' => '栻', + '' => '桋', + '' => '桏', + '' => '栖', + '' => '栱', + '' => '栜', + '' => '栵', + '' => '栫', + '' => '栭', + '' => '栯', + '' => '桎', + '' => '桄', + '' => '栴', + '' => '栝', + '' => '栒', + '' => '栔', + '' => '栦', + '' => '栨', + '' => '栮', + '' => '桍', + '' => '栺', + '' => '栥', + '' => '栠', + '' => '欬', + '' => '欯', + '' => '欭', + '' => '欱', + '' => '欴', + '' => '歭', + '' => '肂', + '' => '殈', + '' => '毦', + '' => '毤', + '@' => '毨', + 'A' => '毣', + 'B' => '毢', + 'C' => '毧', + 'D' => '氥', + 'E' => '浺', + 'F' => '浣', + 'G' => '浤', + 'H' => '浶', + 'I' => '洍', + 'J' => '浡', + 'K' => '涒', + 'L' => '浘', + 'M' => '浢', + 'N' => '浭', + 'O' => '浯', + 'P' => '涑', + 'Q' => '涍', + 'R' => '淯', + 'S' => '浿', + 'T' => '涆', + 'U' => '浞', + 'V' => '浧', + 'W' => '浠', + 'X' => '涗', + 'Y' => '浰', + 'Z' => '浼', + '[' => '浟', + '\\' => '涂', + ']' => '涘', + '^' => '洯', + '_' => '浨', + '`' => '涋', + 'a' => '浾', + 'b' => '涀', + 'c' => '涄', + 'd' => '洖', + 'e' => '涃', + 'f' => '浻', + 'g' => '浽', + 'h' => '浵', + 'i' => '涐', + 'j' => '烜', + 'k' => '烓', + 'l' => '烑', + 'm' => '烝', + 'n' => '烋', + 'o' => '缹', + 'p' => '烢', + 'q' => '烗', + 'r' => '烒', + 's' => '烞', + 't' => '烠', + 'u' => '烔', + 'v' => '烍', + 'w' => '烅', + 'x' => '烆', + 'y' => '烇', + 'z' => '烚', + '{' => '烎', + '|' => '烡', + '}' => '牂', + '~' => '牸', + 'ҡ' => '牷', + 'Ң' => '牶', + 'ң' => '猀', + 'Ҥ' => '狺', + 'ҥ' => '狴', + 'Ҧ' => '狾', + 'ҧ' => '狶', + 'Ҩ' => '狳', + 'ҩ' => '狻', + 'Ҫ' => '猁', + 'ҫ' => '珓', + 'Ҭ' => '珙', + 'ҭ' => '珥', + 'Ү' => '珖', + 'ү' => '玼', + 'Ұ' => '珧', + 'ұ' => '珣', + 'Ҳ' => '珩', + 'ҳ' => '珜', + 'Ҵ' => '珒', + 'ҵ' => '珛', + 'Ҷ' => '珔', + 'ҷ' => '珝', + 'Ҹ' => '珚', + 'ҹ' => '珗', + 'Һ' => '珘', + 'һ' => '珨', + 'Ҽ' => '瓞', + 'ҽ' => '瓟', + 'Ҿ' => '瓴', + 'ҿ' => '瓵', + '' => '甡', + '' => '畛', + '' => '畟', + '' => '疰', + '' => '痁', + '' => '疻', + '' => '痄', + '' => '痀', + '' => '疿', + '' => '疶', + '' => '疺', + '' => '皊', + '' => '盉', + '' => '眝', + '' => '眛', + '' => '眐', + '' => '眓', + '' => '眒', + '' => '眣', + '' => '眑', + '' => '眕', + '' => '眙', + '' => '眚', + '' => '眢', + '' => '眧', + '' => '砣', + '' => '砬', + '' => '砢', + '' => '砵', + '' => '砯', + '' => '砨', + '' => '砮', + '' => '砫', + '' => '砡', + '' => '砩', + '' => '砳', + '' => '砪', + '' => '砱', + '' => '祔', + '' => '祛', + '' => '祏', + '' => '祜', + '' => '祓', + '' => '祒', + '' => '祑', + '' => '秫', + '' => '秬', + '' => '秠', + '' => '秮', + '' => '秭', + '' => '秪', + '' => '秜', + '' => '秞', + '' => '秝', + '' => '窆', + '' => '窉', + '' => '窅', + '' => '窋', + '' => '窌', + '' => '窊', + '' => '窇', + '' => '竘', + '' => '笐', + '@' => '笄', + 'A' => '笓', + 'B' => '笅', + 'C' => '笏', + 'D' => '笈', + 'E' => '笊', + 'F' => '笎', + 'G' => '笉', + 'H' => '笒', + 'I' => '粄', + 'J' => '粑', + 'K' => '粊', + 'L' => '粌', + 'M' => '粈', + 'N' => '粍', + 'O' => '粅', + 'P' => '紞', + 'Q' => '紝', + 'R' => '紑', + 'S' => '紎', + 'T' => '紘', + 'U' => '紖', + 'V' => '紓', + 'W' => '紟', + 'X' => '紒', + 'Y' => '紏', + 'Z' => '紌', + '[' => '罜', + '\\' => '罡', + ']' => '罞', + '^' => '罠', + '_' => '罝', + '`' => '罛', + 'a' => '羖', + 'b' => '羒', + 'c' => '翃', + 'd' => '翂', + 'e' => '翀', + 'f' => '耖', + 'g' => '耾', + 'h' => '耹', + 'i' => '胺', + 'j' => '胲', + 'k' => '胹', + 'l' => '胵', + 'm' => '脁', + 'n' => '胻', + 'o' => '脀', + 'p' => '舁', + 'q' => '舯', + 'r' => '舥', + 's' => '茳', + 't' => '茭', + 'u' => '荄', + 'v' => '茙', + 'w' => '荑', + 'x' => '茥', + 'y' => '荖', + 'z' => '茿', + '{' => '荁', + '|' => '茦', + '}' => '茜', + '~' => '茢', + 'ӡ' => '荂', + 'Ӣ' => '荎', + 'ӣ' => '茛', + 'Ӥ' => '茪', + 'ӥ' => '茈', + 'Ӧ' => '茼', + 'ӧ' => '荍', + 'Ө' => '茖', + 'ө' => '茤', + 'Ӫ' => '茠', + 'ӫ' => '茷', + 'Ӭ' => '茯', + 'ӭ' => '茩', + 'Ӯ' => '荇', + 'ӯ' => '荅', + 'Ӱ' => '荌', + 'ӱ' => '荓', + 'Ӳ' => '茞', + 'ӳ' => '茬', + 'Ӵ' => '荋', + 'ӵ' => '茧', + 'Ӷ' => '荈', + 'ӷ' => '虓', + 'Ӹ' => '虒', + 'ӹ' => '蚢', + 'Ӻ' => '蚨', + 'ӻ' => '蚖', + 'Ӽ' => '蚍', + 'ӽ' => '蚑', + 'Ӿ' => '蚞', + 'ӿ' => '蚇', + '' => '蚗', + '' => '蚆', + '' => '蚋', + '' => '蚚', + '' => '蚅', + '' => '蚥', + '' => '蚙', + '' => '蚡', + '' => '蚧', + '' => '蚕', + '' => '蚘', + '' => '蚎', + '' => '蚝', + '' => '蚐', + '' => '蚔', + '' => '衃', + '' => '衄', + '' => '衭', + '' => '衵', + '' => '衶', + '' => '衲', + '' => '袀', + '' => '衱', + '' => '衿', + '' => '衯', + '' => '袃', + '' => '衾', + '' => '衴', + '' => '衼', + '' => '訒', + '' => '豇', + '' => '豗', + '' => '豻', + '' => '貤', + '' => '貣', + '' => '赶', + '' => '赸', + '' => '趵', + '' => '趷', + '' => '趶', + '' => '軑', + '' => '軓', + '' => '迾', + '' => '迵', + '' => '适', + '' => '迿', + '' => '迻', + '' => '逄', + '' => '迼', + '' => '迶', + '' => '郖', + '' => '郠', + '' => '郙', + '' => '郚', + '' => '郣', + '' => '郟', + '' => '郥', + '' => '郘', + '' => '郛', + '' => '郗', + '' => '郜', + '' => '郤', + '' => '酐', + '@' => '酎', + 'A' => '酏', + 'B' => '釕', + 'C' => '釢', + 'D' => '釚', + 'E' => '陜', + 'F' => '陟', + 'G' => '隼', + 'H' => '飣', + 'I' => '髟', + 'J' => '鬯', + 'K' => '乿', + 'L' => '偰', + 'M' => '偪', + 'N' => '偡', + 'O' => '偞', + 'P' => '偠', + 'Q' => '偓', + 'R' => '偋', + 'S' => '偝', + 'T' => '偲', + 'U' => '偈', + 'V' => '偍', + 'W' => '偁', + 'X' => '偛', + 'Y' => '偊', + 'Z' => '偢', + '[' => '倕', + '\\' => '偅', + ']' => '偟', + '^' => '偩', + '_' => '偫', + '`' => '偣', + 'a' => '偤', + 'b' => '偆', + 'c' => '偀', + 'd' => '偮', + 'e' => '偳', + 'f' => '偗', + 'g' => '偑', + 'h' => '凐', + 'i' => '剫', + 'j' => '剭', + 'k' => '剬', + 'l' => '剮', + 'm' => '勖', + 'n' => '勓', + 'o' => '匭', + 'p' => '厜', + 'q' => '啵', + 'r' => '啶', + 's' => '唼', + 't' => '啍', + 'u' => '啐', + 'v' => '唴', + 'w' => '唪', + 'x' => '啑', + 'y' => '啢', + 'z' => '唶', + '{' => '唵', + '|' => '唰', + '}' => '啒', + '~' => '啅', + 'ԡ' => '唌', + 'Ԣ' => '唲', + 'ԣ' => '啥', + 'Ԥ' => '啎', + 'ԥ' => '唹', + 'Ԧ' => '啈', + 'ԧ' => '唭', + 'Ԩ' => '唻', + 'ԩ' => '啀', + 'Ԫ' => '啋', + 'ԫ' => '圊', + 'Ԭ' => '圇', + 'ԭ' => '埻', + 'Ԯ' => '堔', + 'ԯ' => '埢', + '԰' => '埶', + 'Ա' => '埜', + 'Բ' => '埴', + 'Գ' => '堀', + 'Դ' => '埭', + 'Ե' => '埽', + 'Զ' => '堈', + 'Է' => '埸', + 'Ը' => '堋', + 'Թ' => '埳', + 'Ժ' => '埏', + 'Ի' => '堇', + 'Լ' => '埮', + 'Խ' => '埣', + 'Ծ' => '埲', + 'Կ' => '埥', + '' => '埬', + '' => '埡', + '' => '堎', + '' => '埼', + '' => '堐', + '' => '埧', + '' => '堁', + '' => '堌', + '' => '埱', + '' => '埩', + '' => '埰', + '' => '堍', + '' => '堄', + '' => '奜', + '' => '婠', + '' => '婘', + '' => '婕', + '' => '婧', + '' => '婞', + '' => '娸', + '' => '娵', + '' => '婭', + '' => '婐', + '' => '婟', + '' => '婥', + '' => '婬', + '' => '婓', + '' => '婤', + '' => '婗', + '' => '婃', + '' => '婝', + '' => '婒', + '' => '婄', + '' => '婛', + '' => '婈', + '' => '媎', + '' => '娾', + '' => '婍', + '' => '娹', + '' => '婌', + '' => '婰', + '' => '婩', + '' => '婇', + '' => '婑', + '' => '婖', + '' => '婂', + '' => '婜', + '' => '孲', + '' => '孮', + '' => '寁', + '' => '寀', + '' => '屙', + '' => '崞', + '' => '崋', + '' => '崝', + '' => '崚', + '' => '崠', + '' => '崌', + '' => '崨', + '' => '崍', + '' => '崦', + '' => '崥', + '' => '崏', + '@' => '崰', + 'A' => '崒', + 'B' => '崣', + 'C' => '崟', + 'D' => '崮', + 'E' => '帾', + 'F' => '帴', + 'G' => '庱', + 'H' => '庴', + 'I' => '庹', + 'J' => '庲', + 'K' => '庳', + 'L' => '弶', + 'M' => '弸', + 'N' => '徛', + 'O' => '徖', + 'P' => '徟', + 'Q' => '悊', + 'R' => '悐', + 'S' => '悆', + 'T' => '悾', + 'U' => '悰', + 'V' => '悺', + 'W' => '惓', + 'X' => '惔', + 'Y' => '惏', + 'Z' => '惤', + '[' => '惙', + '\\' => '惝', + ']' => '惈', + '^' => '悱', + '_' => '惛', + '`' => '悷', + 'a' => '惊', + 'b' => '悿', + 'c' => '惃', + 'd' => '惍', + 'e' => '惀', + 'f' => '挲', + 'g' => '捥', + 'h' => '掊', + 'i' => '掂', + 'j' => '捽', + 'k' => '掽', + 'l' => '掞', + 'm' => '掭', + 'n' => '掝', + 'o' => '掗', + 'p' => '掫', + 'q' => '掎', + 'r' => '捯', + 's' => '掇', + 't' => '掐', + 'u' => '据', + 'v' => '掯', + 'w' => '捵', + 'x' => '掜', + 'y' => '捭', + 'z' => '掮', + '{' => '捼', + '|' => '掤', + '}' => '挻', + '~' => '掟', + 'ա' => '捸', + 'բ' => '掅', + 'գ' => '掁', + 'դ' => '掑', + 'ե' => '掍', + 'զ' => '捰', + 'է' => '敓', + 'ը' => '旍', + 'թ' => '晥', + 'ժ' => '晡', + 'ի' => '晛', + 'լ' => '晙', + 'խ' => '晜', + 'ծ' => '晢', + 'կ' => '朘', + 'հ' => '桹', + 'ձ' => '梇', + 'ղ' => '梐', + 'ճ' => '梜', + 'մ' => '桭', + 'յ' => '桮', + 'ն' => '梮', + 'շ' => '梫', + 'ո' => '楖', + 'չ' => '桯', + 'պ' => '梣', + 'ջ' => '梬', + 'ռ' => '梩', + 'ս' => '桵', + 'վ' => '桴', + 'տ' => '梲', + '' => '梏', + '' => '桷', + '' => '梒', + '' => '桼', + '' => '桫', + '' => '桲', + '' => '梪', + '' => '梀', + '' => '桱', + '' => '桾', + '' => '梛', + '' => '梖', + '' => '梋', + '' => '梠', + '' => '梉', + '' => '梤', + '' => '桸', + '' => '桻', + '' => '梑', + '' => '梌', + '' => '梊', + '' => '桽', + '' => '欶', + '' => '欳', + '' => '欷', + '' => '欸', + '' => '殑', + '' => '殏', + '' => '殍', + '' => '殎', + '' => '殌', + '' => '氪', + '' => '淀', + '' => '涫', + '' => '涴', + '' => '涳', + '' => '湴', + '' => '涬', + '' => '淩', + '' => '淢', + '' => '涷', + '' => '淶', + '' => '淔', + '' => '渀', + '' => '淈', + '' => '淠', + '' => '淟', + '' => '淖', + '' => '涾', + '' => '淥', + '' => '淜', + '' => '淝', + '' => '淛', + '' => '淴', + '' => '淊', + '' => '涽', + '' => '淭', + '' => '淰', + '' => '涺', + '' => '淕', + '' => '淂', + '' => '淏', + '' => '淉', + '@' => '淐', + 'A' => '淲', + 'B' => '淓', + 'C' => '淽', + 'D' => '淗', + 'E' => '淍', + 'F' => '淣', + 'G' => '涻', + 'H' => '烺', + 'I' => '焍', + 'J' => '烷', + 'K' => '焗', + 'L' => '烴', + 'M' => '焌', + 'N' => '烰', + 'O' => '焄', + 'P' => '烳', + 'Q' => '焐', + 'R' => '烼', + 'S' => '烿', + 'T' => '焆', + 'U' => '焓', + 'V' => '焀', + 'W' => '烸', + 'X' => '烶', + 'Y' => '焋', + 'Z' => '焂', + '[' => '焎', + '\\' => '牾', + ']' => '牻', + '^' => '牼', + '_' => '牿', + '`' => '猝', + 'a' => '猗', + 'b' => '猇', + 'c' => '猑', + 'd' => '猘', + 'e' => '猊', + 'f' => '猈', + 'g' => '狿', + 'h' => '猏', + 'i' => '猞', + 'j' => '玈', + 'k' => '珶', + 'l' => '珸', + 'm' => '珵', + 'n' => '琄', + 'o' => '琁', + 'p' => '珽', + 'q' => '琇', + 'r' => '琀', + 's' => '珺', + 't' => '珼', + 'u' => '珿', + 'v' => '琌', + 'w' => '琋', + 'x' => '珴', + 'y' => '琈', + 'z' => '畤', + '{' => '畣', + '|' => '痎', + '}' => '痒', + '~' => '痏', + '֡' => '痋', + '֢' => '痌', + '֣' => '痑', + '֤' => '痐', + '֥' => '皏', + '֦' => '皉', + '֧' => '盓', + '֨' => '眹', + '֩' => '眯', + '֪' => '眭', + '֫' => '眱', + '֬' => '眲', + '֭' => '眴', + '֮' => '眳', + '֯' => '眽', + 'ְ' => '眥', + 'ֱ' => '眻', + 'ֲ' => '眵', + 'ֳ' => '硈', + 'ִ' => '硒', + 'ֵ' => '硉', + 'ֶ' => '硍', + 'ַ' => '硊', + 'ָ' => '硌', + 'ֹ' => '砦', + 'ֺ' => '硅', + 'ֻ' => '硐', + 'ּ' => '祤', + 'ֽ' => '祧', + '־' => '祩', + 'ֿ' => '祪', + '' => '祣', + '' => '祫', + '' => '祡', + '' => '离', + '' => '秺', + '' => '秸', + '' => '秶', + '' => '秷', + '' => '窏', + '' => '窔', + '' => '窐', + '' => '笵', + '' => '筇', + '' => '笴', + '' => '笥', + '' => '笰', + '' => '笢', + '' => '笤', + '' => '笳', + '' => '笘', + '' => '笪', + '' => '笝', + '' => '笱', + '' => '笫', + '' => '笭', + '' => '笯', + '' => '笲', + '' => '笸', + '' => '笚', + '' => '笣', + '' => '粔', + '' => '粘', + '' => '粖', + '' => '粣', + '' => '紵', + '' => '紽', + '' => '紸', + '' => '紶', + '' => '紺', + '' => '絅', + '' => '紬', + '' => '紩', + '' => '絁', + '' => '絇', + '' => '紾', + '' => '紿', + '' => '絊', + '' => '紻', + '' => '紨', + '' => '罣', + '' => '羕', + '' => '羜', + '' => '羝', + '' => '羛', + '' => '翊', + '' => '翋', + '' => '翍', + '' => '翐', + '' => '翑', + '' => '翇', + '' => '翏', + '' => '翉', + '' => '耟', + '@' => '耞', + 'A' => '耛', + 'B' => '聇', + 'C' => '聃', + 'D' => '聈', + 'E' => '脘', + 'F' => '脥', + 'G' => '脙', + 'H' => '脛', + 'I' => '脭', + 'J' => '脟', + 'K' => '脬', + 'L' => '脞', + 'M' => '脡', + 'N' => '脕', + 'O' => '脧', + 'P' => '脝', + 'Q' => '脢', + 'R' => '舑', + 'S' => '舸', + 'T' => '舳', + 'U' => '舺', + 'V' => '舴', + 'W' => '舲', + 'X' => '艴', + 'Y' => '莐', + 'Z' => '莣', + '[' => '莨', + '\\' => '莍', + ']' => '荺', + '^' => '荳', + '_' => '莤', + '`' => '荴', + 'a' => '莏', + 'b' => '莁', + 'c' => '莕', + 'd' => '莙', + 'e' => '荵', + 'f' => '莔', + 'g' => '莩', + 'h' => '荽', + 'i' => '莃', + 'j' => '莌', + 'k' => '莝', + 'l' => '莛', + 'm' => '莪', + 'n' => '莋', + 'o' => '荾', + 'p' => '莥', + 'q' => '莯', + 'r' => '莈', + 's' => '莗', + 't' => '莰', + 'u' => '荿', + 'v' => '莦', + 'w' => '莇', + 'x' => '莮', + 'y' => '荶', + 'z' => '莚', + '{' => '虙', + '|' => '虖', + '}' => '蚿', + '~' => '蚷', + 'ס' => '蛂', + 'ע' => '蛁', + 'ף' => '蛅', + 'פ' => '蚺', + 'ץ' => '蚰', + 'צ' => '蛈', + 'ק' => '蚹', + 'ר' => '蚳', + 'ש' => '蚸', + 'ת' => '蛌', + '׫' => '蚴', + '׬' => '蚻', + '׭' => '蚼', + '׮' => '蛃', + 'ׯ' => '蚽', + 'װ' => '蚾', + 'ױ' => '衒', + 'ײ' => '袉', + '׳' => '袕', + '״' => '袨', + '׵' => '袢', + '׶' => '袪', + '׷' => '袚', + '׸' => '袑', + '׹' => '袡', + '׺' => '袟', + '׻' => '袘', + '׼' => '袧', + '׽' => '袙', + '׾' => '袛', + '׿' => '袗', + '' => '袤', + '' => '袬', + '' => '袌', + '' => '袓', + '' => '袎', + '' => '覂', + '' => '觖', + '' => '觙', + '' => '觕', + '' => '訰', + '' => '訧', + '' => '訬', + '' => '訞', + '' => '谹', + '' => '谻', + '' => '豜', + '' => '豝', + '' => '豽', + '' => '貥', + '' => '赽', + '' => '赻', + '' => '赹', + '' => '趼', + '' => '跂', + '' => '趹', + '' => '趿', + '' => '跁', + '' => '軘', + '' => '軞', + '' => '軝', + '' => '軜', + '' => '軗', + '' => '軠', + '' => '軡', + '' => '逤', + '' => '逋', + '' => '逑', + '' => '逜', + '' => '逌', + '' => '逡', + '' => '郯', + '' => '郪', + '' => '郰', + '' => '郴', + '' => '郲', + '' => '郳', + '' => '郔', + '' => '郫', + '' => '郬', + '' => '郩', + '' => '酖', + '' => '酘', + '' => '酚', + '' => '酓', + '' => '酕', + '' => '釬', + '' => '釴', + '' => '釱', + '' => '釳', + '' => '釸', + '' => '釤', + '' => '釹', + '' => '釪', + '@' => '釫', + 'A' => '釷', + 'B' => '釨', + 'C' => '釮', + 'D' => '镺', + 'E' => '閆', + 'F' => '閈', + 'G' => '陼', + 'H' => '陭', + 'I' => '陫', + 'J' => '陱', + 'K' => '陯', + 'L' => '隿', + 'M' => '靪', + 'N' => '頄', + 'O' => '飥', + 'P' => '馗', + 'Q' => '傛', + 'R' => '傕', + 'S' => '傔', + 'T' => '傞', + 'U' => '傋', + 'V' => '傣', + 'W' => '傃', + 'X' => '傌', + 'Y' => '傎', + 'Z' => '傝', + '[' => '偨', + '\\' => '傜', + ']' => '傒', + '^' => '傂', + '_' => '傇', + '`' => '兟', + 'a' => '凔', + 'b' => '匒', + 'c' => '匑', + 'd' => '厤', + 'e' => '厧', + 'f' => '喑', + 'g' => '喨', + 'h' => '喥', + 'i' => '喭', + 'j' => '啷', + 'k' => '噅', + 'l' => '喢', + 'm' => '喓', + 'n' => '喈', + 'o' => '喏', + 'p' => '喵', + 'q' => '喁', + 'r' => '喣', + 's' => '喒', + 't' => '喤', + 'u' => '啽', + 'v' => '喌', + 'w' => '喦', + 'x' => '啿', + 'y' => '喕', + 'z' => '喡', + '{' => '喎', + '|' => '圌', + '}' => '堩', + '~' => '堷', + 'ء' => '堙', + 'آ' => '堞', + 'أ' => '堧', + 'ؤ' => '堣', + 'إ' => '堨', + 'ئ' => '埵', + 'ا' => '塈', + 'ب' => '堥', + 'ة' => '堜', + 'ت' => '堛', + 'ث' => '堳', + 'ج' => '堿', + 'ح' => '堶', + 'خ' => '堮', + 'د' => '堹', + 'ذ' => '堸', + 'ر' => '堭', + 'ز' => '堬', + 'س' => '堻', + 'ش' => '奡', + 'ص' => '媯', + 'ض' => '媔', + 'ط' => '媟', + 'ظ' => '婺', + 'ع' => '媢', + 'غ' => '媞', + 'ػ' => '婸', + 'ؼ' => '媦', + 'ؽ' => '婼', + 'ؾ' => '媥', + 'ؿ' => '媬', + '' => '媕', + '' => '媮', + '' => '娷', + '' => '媄', + '' => '媊', + '' => '媗', + '' => '媃', + '' => '媋', + '' => '媩', + '' => '婻', + '' => '婽', + '' => '媌', + '' => '媜', + '' => '媏', + '' => '媓', + '' => '媝', + '' => '寪', + '' => '寍', + '' => '寋', + '' => '寔', + '' => '寑', + '' => '寊', + '' => '寎', + '' => '尌', + '' => '尰', + '' => '崷', + '' => '嵃', + '' => '嵫', + '' => '嵁', + '' => '嵋', + '' => '崿', + '' => '崵', + '' => '嵑', + '' => '嵎', + '' => '嵕', + '' => '崳', + '' => '崺', + '' => '嵒', + '' => '崽', + '' => '崱', + '' => '嵙', + '' => '嵂', + '' => '崹', + '' => '嵉', + '' => '崸', + '' => '崼', + '' => '崲', + '' => '崶', + '' => '嵀', + '' => '嵅', + '' => '幄', + '' => '幁', + '' => '彘', + '' => '徦', + '' => '徥', + '' => '徫', + '' => '惉', + '' => '悹', + '' => '惌', + '' => '惢', + '' => '惎', + '' => '惄', + '' => '愔', + '@' => '惲', + 'A' => '愊', + 'B' => '愖', + 'C' => '愅', + 'D' => '惵', + 'E' => '愓', + 'F' => '惸', + 'G' => '惼', + 'H' => '惾', + 'I' => '惁', + 'J' => '愃', + 'K' => '愘', + 'L' => '愝', + 'M' => '愐', + 'N' => '惿', + 'O' => '愄', + 'P' => '愋', + 'Q' => '扊', + 'R' => '掔', + 'S' => '掱', + 'T' => '掰', + 'U' => '揎', + 'V' => '揥', + 'W' => '揨', + 'X' => '揯', + 'Y' => '揃', + 'Z' => '撝', + '[' => '揳', + '\\' => '揊', + ']' => '揠', + '^' => '揶', + '_' => '揕', + '`' => '揲', + 'a' => '揵', + 'b' => '摡', + 'c' => '揟', + 'd' => '掾', + 'e' => '揝', + 'f' => '揜', + 'g' => '揄', + 'h' => '揘', + 'i' => '揓', + 'j' => '揂', + 'k' => '揇', + 'l' => '揌', + 'm' => '揋', + 'n' => '揈', + 'o' => '揰', + 'p' => '揗', + 'q' => '揙', + 'r' => '攲', + 's' => '敧', + 't' => '敪', + 'u' => '敤', + 'v' => '敜', + 'w' => '敨', + 'x' => '敥', + 'y' => '斌', + 'z' => '斝', + '{' => '斞', + '|' => '斮', + '}' => '旐', + '~' => '旒', + '١' => '晼', + '٢' => '晬', + '٣' => '晻', + '٤' => '暀', + '٥' => '晱', + '٦' => '晹', + '٧' => '晪', + '٨' => '晲', + '٩' => '朁', + '٪' => '椌', + '٫' => '棓', + '٬' => '椄', + '٭' => '棜', + 'ٮ' => '椪', + 'ٯ' => '棬', + 'ٰ' => '棪', + 'ٱ' => '棱', + 'ٲ' => '椏', + 'ٳ' => '棖', + 'ٴ' => '棷', + 'ٵ' => '棫', + 'ٶ' => '棤', + 'ٷ' => '棶', + 'ٸ' => '椓', + 'ٹ' => '椐', + 'ٺ' => '棳', + 'ٻ' => '棡', + 'ټ' => '椇', + 'ٽ' => '棌', + 'پ' => '椈', + 'ٿ' => '楰', + '' => '梴', + '' => '椑', + '' => '棯', + '' => '棆', + '' => '椔', + '' => '棸', + '' => '棐', + '' => '棽', + '' => '棼', + '' => '棨', + '' => '椋', + '' => '椊', + '' => '椗', + '' => '棎', + '' => '棈', + '' => '棝', + '' => '棞', + '' => '棦', + '' => '棴', + '' => '棑', + '' => '椆', + '' => '棔', + '' => '棩', + '' => '椕', + '' => '椥', + '' => '棇', + '' => '欹', + '' => '欻', + '' => '欿', + '' => '欼', + '' => '殔', + '' => '殗', + '' => '殙', + '' => '殕', + '' => '殽', + '' => '毰', + '' => '毲', + '' => '毳', + '' => '氰', + '' => '淼', + '' => '湆', + '' => '湇', + '' => '渟', + '' => '湉', + '' => '溈', + '' => '渼', + '' => '渽', + '' => '湅', + '' => '湢', + '' => '渫', + '' => '渿', + '' => '湁', + '' => '湝', + '' => '湳', + '' => '渜', + '' => '渳', + '' => '湋', + '' => '湀', + '' => '湑', + '' => '渻', + '' => '渃', + '' => '渮', + '' => '湞', + '@' => '湨', + 'A' => '湜', + 'B' => '湡', + 'C' => '渱', + 'D' => '渨', + 'E' => '湠', + 'F' => '湱', + 'G' => '湫', + 'H' => '渹', + 'I' => '渢', + 'J' => '渰', + 'K' => '湓', + 'L' => '湥', + 'M' => '渧', + 'N' => '湸', + 'O' => '湤', + 'P' => '湷', + 'Q' => '湕', + 'R' => '湹', + 'S' => '湒', + 'T' => '湦', + 'U' => '渵', + 'V' => '渶', + 'W' => '湚', + 'X' => '焠', + 'Y' => '焞', + 'Z' => '焯', + '[' => '烻', + '\\' => '焮', + ']' => '焱', + '^' => '焣', + '_' => '焥', + '`' => '焢', + 'a' => '焲', + 'b' => '焟', + 'c' => '焨', + 'd' => '焺', + 'e' => '焛', + 'f' => '牋', + 'g' => '牚', + 'h' => '犈', + 'i' => '犉', + 'j' => '犆', + 'k' => '犅', + 'l' => '犋', + 'm' => '猒', + 'n' => '猋', + 'o' => '猰', + 'p' => '猢', + 'q' => '猱', + 'r' => '猳', + 's' => '猧', + 't' => '猲', + 'u' => '猭', + 'v' => '猦', + 'w' => '猣', + 'x' => '猵', + 'y' => '猌', + 'z' => '琮', + '{' => '琬', + '|' => '琰', + '}' => '琫', + '~' => '琖', + 'ڡ' => '琚', + 'ڢ' => '琡', + 'ڣ' => '琭', + 'ڤ' => '琱', + 'ڥ' => '琤', + 'ڦ' => '琣', + 'ڧ' => '琝', + 'ڨ' => '琩', + 'ک' => '琠', + 'ڪ' => '琲', + 'ګ' => '瓻', + 'ڬ' => '甯', + 'ڭ' => '畯', + 'ڮ' => '畬', + 'گ' => '痧', + 'ڰ' => '痚', + 'ڱ' => '痡', + 'ڲ' => '痦', + 'ڳ' => '痝', + 'ڴ' => '痟', + 'ڵ' => '痤', + 'ڶ' => '痗', + 'ڷ' => '皕', + 'ڸ' => '皒', + 'ڹ' => '盚', + 'ں' => '睆', + 'ڻ' => '睇', + 'ڼ' => '睄', + 'ڽ' => '睍', + 'ھ' => '睅', + 'ڿ' => '睊', + '' => '睎', + '' => '睋', + '' => '睌', + '' => '矞', + '' => '矬', + '' => '硠', + '' => '硤', + '' => '硥', + '' => '硜', + '' => '硭', + '' => '硱', + '' => '硪', + '' => '确', + '' => '硰', + '' => '硩', + '' => '硨', + '' => '硞', + '' => '硢', + '' => '祴', + '' => '祳', + '' => '祲', + '' => '祰', + '' => '稂', + '' => '稊', + '' => '稃', + '' => '稌', + '' => '稄', + '' => '窙', + '' => '竦', + '' => '竤', + '' => '筊', + '' => '笻', + '' => '筄', + '' => '筈', + '' => '筌', + '' => '筎', + '' => '筀', + '' => '筘', + '' => '筅', + '' => '粢', + '' => '粞', + '' => '粨', + '' => '粡', + '' => '絘', + '' => '絯', + '' => '絣', + '' => '絓', + '' => '絖', + '' => '絧', + '' => '絪', + '' => '絏', + '' => '絭', + '' => '絜', + '' => '絫', + '' => '絒', + '' => '絔', + '' => '絩', + '' => '絑', + '' => '絟', + '' => '絎', + '' => '缾', + '' => '缿', + '' => '罥', + '@' => '罦', + 'A' => '羢', + 'B' => '羠', + 'C' => '羡', + 'D' => '翗', + 'E' => '聑', + 'F' => '聏', + 'G' => '聐', + 'H' => '胾', + 'I' => '胔', + 'J' => '腃', + 'K' => '腊', + 'L' => '腒', + 'M' => '腏', + 'N' => '腇', + 'O' => '脽', + 'P' => '腍', + 'Q' => '脺', + 'R' => '臦', + 'S' => '臮', + 'T' => '臷', + 'U' => '臸', + 'V' => '臹', + 'W' => '舄', + 'X' => '舼', + 'Y' => '舽', + 'Z' => '舿', + '[' => '艵', + '\\' => '茻', + ']' => '菏', + '^' => '菹', + '_' => '萣', + '`' => '菀', + 'a' => '菨', + 'b' => '萒', + 'c' => '菧', + 'd' => '菤', + 'e' => '菼', + 'f' => '菶', + 'g' => '萐', + 'h' => '菆', + 'i' => '菈', + 'j' => '菫', + 'k' => '菣', + 'l' => '莿', + 'm' => '萁', + 'n' => '菝', + 'o' => '菥', + 'p' => '菘', + 'q' => '菿', + 'r' => '菡', + 's' => '菋', + 't' => '菎', + 'u' => '菖', + 'v' => '菵', + 'w' => '菉', + 'x' => '萉', + 'y' => '萏', + 'z' => '菞', + '{' => '萑', + '|' => '萆', + '}' => '菂', + '~' => '菳', + 'ۡ' => '菕', + 'ۢ' => '菺', + 'ۣ' => '菇', + 'ۤ' => '菑', + 'ۥ' => '菪', + 'ۦ' => '萓', + 'ۧ' => '菃', + 'ۨ' => '菬', + '۩' => '菮', + '۪' => '菄', + '۫' => '菻', + '۬' => '菗', + 'ۭ' => '菢', + 'ۮ' => '萛', + 'ۯ' => '菛', + '۰' => '菾', + '۱' => '蛘', + '۲' => '蛢', + '۳' => '蛦', + '۴' => '蛓', + '۵' => '蛣', + '۶' => '蛚', + '۷' => '蛪', + '۸' => '蛝', + '۹' => '蛫', + 'ۺ' => '蛜', + 'ۻ' => '蛬', + 'ۼ' => '蛩', + '۽' => '蛗', + '۾' => '蛨', + 'ۿ' => '蛑', + '' => '衈', + '' => '衖', + '' => '衕', + '' => '袺', + '' => '裗', + '' => '袹', + '' => '袸', + '' => '裀', + '' => '袾', + '' => '袶', + '' => '袼', + '' => '袷', + '' => '袽', + '' => '袲', + '' => '褁', + '' => '裉', + '' => '覕', + '' => '覘', + '' => '覗', + '' => '觝', + '' => '觚', + '' => '觛', + '' => '詎', + '' => '詍', + '' => '訹', + '' => '詙', + '' => '詀', + '' => '詗', + '' => '詘', + '' => '詄', + '' => '詅', + '' => '詒', + '' => '詈', + '' => '詑', + '' => '詊', + '' => '詌', + '' => '詏', + '' => '豟', + '' => '貁', + '' => '貀', + '' => '貺', + '' => '貾', + '' => '貰', + '' => '貹', + '' => '貵', + '' => '趄', + '' => '趀', + '' => '趉', + '' => '跘', + '' => '跓', + '' => '跍', + '' => '跇', + '' => '跖', + '' => '跜', + '' => '跏', + '' => '跕', + '' => '跙', + '' => '跈', + '' => '跗', + '' => '跅', + '' => '軯', + '' => '軷', + '' => '軺', + '@' => '軹', + 'A' => '軦', + 'B' => '軮', + 'C' => '軥', + 'D' => '軵', + 'E' => '軧', + 'F' => '軨', + 'G' => '軶', + 'H' => '軫', + 'I' => '軱', + 'J' => '軬', + 'K' => '軴', + 'L' => '軩', + 'M' => '逭', + 'N' => '逴', + 'O' => '逯', + 'P' => '鄆', + 'Q' => '鄬', + 'R' => '鄄', + 'S' => '郿', + 'T' => '郼', + 'U' => '鄈', + 'V' => '郹', + 'W' => '郻', + 'X' => '鄁', + 'Y' => '鄀', + 'Z' => '鄇', + '[' => '鄅', + '\\' => '鄃', + ']' => '酡', + '^' => '酤', + '_' => '酟', + '`' => '酢', + 'a' => '酠', + 'b' => '鈁', + 'c' => '鈊', + 'd' => '鈥', + 'e' => '鈃', + 'f' => '鈚', + 'g' => '鈦', + 'h' => '鈏', + 'i' => '鈌', + 'j' => '鈀', + 'k' => '鈒', + 'l' => '釿', + 'm' => '釽', + 'n' => '鈆', + 'o' => '鈄', + 'p' => '鈧', + 'q' => '鈂', + 'r' => '鈜', + 's' => '鈤', + 't' => '鈙', + 'u' => '鈗', + 'v' => '鈅', + 'w' => '鈖', + 'x' => '镻', + 'y' => '閍', + 'z' => '閌', + '{' => '閐', + '|' => '隇', + '}' => '陾', + '~' => '隈', + 'ܡ' => '隉', + 'ܢ' => '隃', + 'ܣ' => '隀', + 'ܤ' => '雂', + 'ܥ' => '雈', + 'ܦ' => '雃', + 'ܧ' => '雱', + 'ܨ' => '雰', + 'ܩ' => '靬', + 'ܪ' => '靰', + 'ܫ' => '靮', + 'ܬ' => '頇', + 'ܭ' => '颩', + 'ܮ' => '飫', + 'ܯ' => '鳦', + 'ܰ' => '黹', + 'ܱ' => '亃', + 'ܲ' => '亄', + 'ܳ' => '亶', + 'ܴ' => '傽', + 'ܵ' => '傿', + 'ܶ' => '僆', + 'ܷ' => '傮', + 'ܸ' => '僄', + 'ܹ' => '僊', + 'ܺ' => '傴', + 'ܻ' => '僈', + 'ܼ' => '僂', + 'ܽ' => '傰', + 'ܾ' => '僁', + 'ܿ' => '傺', + '' => '傱', + '' => '僋', + '' => '僉', + '' => '傶', + '' => '傸', + '' => '凗', + '' => '剺', + '' => '剸', + '' => '剻', + '' => '剼', + '' => '嗃', + '' => '嗛', + '' => '嗌', + '' => '嗐', + '' => '嗋', + '' => '嗊', + '' => '嗝', + '' => '嗀', + '' => '嗔', + '' => '嗄', + '' => '嗩', + '' => '喿', + '' => '嗒', + '' => '喍', + '' => '嗏', + '' => '嗕', + '' => '嗢', + '' => '嗖', + '' => '嗈', + '' => '嗲', + '' => '嗍', + '' => '嗙', + '' => '嗂', + '' => '圔', + '' => '塓', + '' => '塨', + '' => '塤', + '' => '塏', + '' => '塍', + '' => '塉', + '' => '塯', + '' => '塕', + '' => '塎', + '' => '塝', + '' => '塙', + '' => '塥', + '' => '塛', + '' => '堽', + '' => '塣', + '' => '塱', + '' => '壼', + '' => '嫇', + '' => '嫄', + '' => '嫋', + '' => '媺', + '' => '媸', + '' => '媱', + '' => '媵', + '' => '媰', + '' => '媿', + '' => '嫈', + '' => '媻', + '' => '嫆', + '@' => '媷', + 'A' => '嫀', + 'B' => '嫊', + 'C' => '媴', + 'D' => '媶', + 'E' => '嫍', + 'F' => '媹', + 'G' => '媐', + 'H' => '寖', + 'I' => '寘', + 'J' => '寙', + 'K' => '尟', + 'L' => '尳', + 'M' => '嵱', + 'N' => '嵣', + 'O' => '嵊', + 'P' => '嵥', + 'Q' => '嵲', + 'R' => '嵬', + 'S' => '嵞', + 'T' => '嵨', + 'U' => '嵧', + 'V' => '嵢', + 'W' => '巰', + 'X' => '幏', + 'Y' => '幎', + 'Z' => '幊', + '[' => '幍', + '\\' => '幋', + ']' => '廅', + '^' => '廌', + '_' => '廆', + '`' => '廋', + 'a' => '廇', + 'b' => '彀', + 'c' => '徯', + 'd' => '徭', + 'e' => '惷', + 'f' => '慉', + 'g' => '慊', + 'h' => '愫', + 'i' => '慅', + 'j' => '愶', + 'k' => '愲', + 'l' => '愮', + 'm' => '慆', + 'n' => '愯', + 'o' => '慏', + 'p' => '愩', + 'q' => '慀', + 'r' => '戠', + 's' => '酨', + 't' => '戣', + 'u' => '戥', + 'v' => '戤', + 'w' => '揅', + 'x' => '揱', + 'y' => '揫', + 'z' => '搐', + '{' => '搒', + '|' => '搉', + '}' => '搠', + '~' => '搤', + 'ݡ' => '搳', + 'ݢ' => '摃', + 'ݣ' => '搟', + 'ݤ' => '搕', + 'ݥ' => '搘', + 'ݦ' => '搹', + 'ݧ' => '搷', + 'ݨ' => '搢', + 'ݩ' => '搣', + 'ݪ' => '搌', + 'ݫ' => '搦', + 'ݬ' => '搰', + 'ݭ' => '搨', + 'ݮ' => '摁', + 'ݯ' => '搵', + 'ݰ' => '搯', + 'ݱ' => '搊', + 'ݲ' => '搚', + 'ݳ' => '摀', + 'ݴ' => '搥', + 'ݵ' => '搧', + 'ݶ' => '搋', + 'ݷ' => '揧', + 'ݸ' => '搛', + 'ݹ' => '搮', + 'ݺ' => '搡', + 'ݻ' => '搎', + 'ݼ' => '敯', + 'ݽ' => '斒', + 'ݾ' => '旓', + 'ݿ' => '暆', + '' => '暌', + '' => '暕', + '' => '暐', + '' => '暋', + '' => '暊', + '' => '暙', + '' => '暔', + '' => '晸', + '' => '朠', + '' => '楦', + '' => '楟', + '' => '椸', + '' => '楎', + '' => '楢', + '' => '楱', + '' => '椿', + '' => '楅', + '' => '楪', + '' => '椹', + '' => '楂', + '' => '楗', + '' => '楙', + '' => '楺', + '' => '楈', + '' => '楉', + '' => '椵', + '' => '楬', + '' => '椳', + '' => '椽', + '' => '楥', + '' => '棰', + '' => '楸', + '' => '椴', + '' => '楩', + '' => '楀', + '' => '楯', + '' => '楄', + '' => '楶', + '' => '楘', + '' => '楁', + '' => '楴', + '' => '楌', + '' => '椻', + '' => '楋', + '' => '椷', + '' => '楜', + '' => '楏', + '' => '楑', + '' => '椲', + '' => '楒', + '' => '椯', + '' => '楻', + '' => '椼', + '' => '歆', + '' => '歅', + '' => '歃', + '' => '歂', + '' => '歈', + '' => '歁', + '' => '殛', + '' => '嗀', + '' => '毻', + '' => '毼', + '@' => '毹', + 'A' => '毷', + 'B' => '毸', + 'C' => '溛', + 'D' => '滖', + 'E' => '滈', + 'F' => '溏', + 'G' => '滀', + 'H' => '溟', + 'I' => '溓', + 'J' => '溔', + 'K' => '溠', + 'L' => '溱', + 'M' => '溹', + 'N' => '滆', + 'O' => '滒', + 'P' => '溽', + 'Q' => '滁', + 'R' => '溞', + 'S' => '滉', + 'T' => '溷', + 'U' => '溰', + 'V' => '滍', + 'W' => '溦', + 'X' => '滏', + 'Y' => '溲', + 'Z' => '溾', + '[' => '滃', + '\\' => '滜', + ']' => '滘', + '^' => '溙', + '_' => '溒', + '`' => '溎', + 'a' => '溍', + 'b' => '溤', + 'c' => '溡', + 'd' => '溿', + 'e' => '溳', + 'f' => '滐', + 'g' => '滊', + 'h' => '溗', + 'i' => '溮', + 'j' => '溣', + 'k' => '煇', + 'l' => '煔', + 'm' => '煒', + 'n' => '煣', + 'o' => '煠', + 'p' => '煁', + 'q' => '煝', + 'r' => '煢', + 's' => '煲', + 't' => '煸', + 'u' => '煪', + 'v' => '煡', + 'w' => '煂', + 'x' => '煘', + 'y' => '煃', + 'z' => '煋', + '{' => '煰', + '|' => '煟', + '}' => '煐', + '~' => '煓', + 'ޡ' => '煄', + 'ޢ' => '煍', + 'ޣ' => '煚', + 'ޤ' => '牏', + 'ޥ' => '犍', + 'ަ' => '犌', + 'ާ' => '犑', + 'ި' => '犐', + 'ީ' => '犎', + 'ު' => '猼', + 'ޫ' => '獂', + 'ެ' => '猻', + 'ޭ' => '猺', + 'ޮ' => '獀', + 'ޯ' => '獊', + 'ް' => '獉', + 'ޱ' => '瑄', + '޲' => '瑊', + '޳' => '瑋', + '޴' => '瑒', + '޵' => '瑑', + '޶' => '瑗', + '޷' => '瑀', + '޸' => '瑏', + '޹' => '瑐', + '޺' => '瑎', + '޻' => '瑂', + '޼' => '瑆', + '޽' => '瑍', + '޾' => '瑔', + '޿' => '瓡', + '' => '瓿', + '' => '瓾', + '' => '瓽', + '' => '甝', + '' => '畹', + '' => '畷', + '' => '榃', + '' => '痯', + '' => '瘏', + '' => '瘃', + '' => '痷', + '' => '痾', + '' => '痼', + '' => '痹', + '' => '痸', + '' => '瘐', + '' => '痻', + '' => '痶', + '' => '痭', + '' => '痵', + '' => '痽', + '' => '皙', + '' => '皵', + '' => '盝', + '' => '睕', + '' => '睟', + '' => '睠', + '' => '睒', + '' => '睖', + '' => '睚', + '' => '睩', + '' => '睧', + '' => '睔', + '' => '睙', + '' => '睭', + '' => '矠', + '' => '碇', + '' => '碚', + '' => '碔', + '' => '碏', + '' => '碄', + '' => '碕', + '' => '碅', + '' => '碆', + '' => '碡', + '' => '碃', + '' => '硹', + '' => '碙', + '' => '碀', + '' => '碖', + '' => '硻', + '' => '祼', + '' => '禂', + '' => '祽', + '' => '祹', + '' => '稑', + '' => '稘', + '' => '稙', + '' => '稒', + '' => '稗', + '' => '稕', + '' => '稢', + '' => '稓', + '@' => '稛', + 'A' => '稐', + 'B' => '窣', + 'C' => '窢', + 'D' => '窞', + 'E' => '竫', + 'F' => '筦', + 'G' => '筤', + 'H' => '筭', + 'I' => '筴', + 'J' => '筩', + 'K' => '筲', + 'L' => '筥', + 'M' => '筳', + 'N' => '筱', + 'O' => '筰', + 'P' => '筡', + 'Q' => '筸', + 'R' => '筶', + 'S' => '筣', + 'T' => '粲', + 'U' => '粴', + 'V' => '粯', + 'W' => '綈', + 'X' => '綆', + 'Y' => '綀', + 'Z' => '綍', + '[' => '絿', + '\\' => '綅', + ']' => '絺', + '^' => '綎', + '_' => '絻', + '`' => '綃', + 'a' => '絼', + 'b' => '綌', + 'c' => '綔', + 'd' => '綄', + 'e' => '絽', + 'f' => '綒', + 'g' => '罭', + 'h' => '罫', + 'i' => '罧', + 'j' => '罨', + 'k' => '罬', + 'l' => '羦', + 'm' => '羥', + 'n' => '羧', + 'o' => '翛', + 'p' => '翜', + 'q' => '耡', + 'r' => '腤', + 's' => '腠', + 't' => '腷', + 'u' => '腜', + 'v' => '腩', + 'w' => '腛', + 'x' => '腢', + 'y' => '腲', + 'z' => '朡', + '{' => '腞', + '|' => '腶', + '}' => '腧', + '~' => '腯', + 'ߡ' => '腄', + 'ߢ' => '腡', + 'ߣ' => '舝', + 'ߤ' => '艉', + 'ߥ' => '艄', + 'ߦ' => '艀', + 'ߧ' => '艂', + 'ߨ' => '艅', + 'ߩ' => '蓱', + 'ߪ' => '萿', + '߫' => '葖', + '߬' => '葶', + '߭' => '葹', + '߮' => '蒏', + '߯' => '蒍', + '߰' => '葥', + '߱' => '葑', + '߲' => '葀', + '߳' => '蒆', + 'ߴ' => '葧', + 'ߵ' => '萰', + '߶' => '葍', + '߷' => '葽', + '߸' => '葚', + '߹' => '葙', + 'ߺ' => '葴', + '߻' => '葳', + '߼' => '葝', + '߽' => '蔇', + '߾' => '葞', + '߿' => '萷', + '' => '萺', + '' => '萴', + '' => '葺', + '' => '葃', + '' => '葸', + '' => '萲', + '' => '葅', + '' => '萩', + '' => '菙', + '' => '葋', + '' => '萯', + '' => '葂', + '' => '萭', + '' => '葟', + '' => '葰', + '' => '萹', + '' => '葎', + '' => '葌', + '' => '葒', + '' => '葯', + '' => '蓅', + '' => '蒎', + '' => '萻', + '' => '葇', + '' => '萶', + '' => '萳', + '' => '葨', + '' => '葾', + '' => '葄', + '' => '萫', + '' => '葠', + '' => '葔', + '' => '葮', + '' => '葐', + '' => '蜋', + '' => '蜄', + '' => '蛷', + '' => '蜌', + '' => '蛺', + '' => '蛖', + '' => '蛵', + '' => '蝍', + '' => '蛸', + '' => '蜎', + '' => '蜉', + '' => '蜁', + '' => '蛶', + '' => '蜍', + '' => '蜅', + '' => '裖', + '' => '裋', + '' => '裍', + '' => '裎', + '' => '裞', + '' => '裛', + '' => '裚', + '' => '裌', + '' => '裐', + '' => '覅', + '' => '覛', + '' => '觟', + '' => '觥', + '' => '觤', + '@' => '觡', + 'A' => '觠', + 'B' => '觢', + 'C' => '觜', + 'D' => '触', + 'E' => '詶', + 'F' => '誆', + 'G' => '詿', + 'H' => '詡', + 'I' => '訿', + 'J' => '詷', + 'K' => '誂', + 'L' => '誄', + 'M' => '詵', + 'N' => '誃', + 'O' => '誁', + 'P' => '詴', + 'Q' => '詺', + 'R' => '谼', + 'S' => '豋', + 'T' => '豊', + 'U' => '豥', + 'V' => '豤', + 'W' => '豦', + 'X' => '貆', + 'Y' => '貄', + 'Z' => '貅', + '[' => '賌', + '\\' => '赨', + ']' => '赩', + '^' => '趑', + '_' => '趌', + '`' => '趎', + 'a' => '趏', + 'b' => '趍', + 'c' => '趓', + 'd' => '趔', + 'e' => '趐', + 'f' => '趒', + 'g' => '跰', + 'h' => '跠', + 'i' => '跬', + 'j' => '跱', + 'k' => '跮', + 'l' => '跐', + 'm' => '跩', + 'n' => '跣', + 'o' => '跢', + 'p' => '跧', + 'q' => '跲', + 'r' => '跫', + 's' => '跴', + 't' => '輆', + 'u' => '軿', + 'v' => '輁', + 'w' => '輀', + 'x' => '輅', + 'y' => '輇', + 'z' => '輈', + '{' => '輂', + '|' => '輋', + '}' => '遒', + '~' => '逿', + '' => '遄', + '' => '遉', + '' => '逽', + '' => '鄐', + '' => '鄍', + '' => '鄏', + '' => '鄑', + '' => '鄖', + '' => '鄔', + '' => '鄋', + '' => '鄎', + '' => '酮', + '' => '酯', + '' => '鉈', + '' => '鉒', + '' => '鈰', + '' => '鈺', + '' => '鉦', + '' => '鈳', + '' => '鉥', + '' => '鉞', + '' => '銃', + '' => '鈮', + '' => '鉊', + '' => '鉆', + '' => '鉭', + '' => '鉬', + '' => '鉏', + '' => '鉠', + '' => '鉧', + '' => '鉯', + '' => '鈶', + '' => '鉡', + '' => '鉰', + '' => '鈱', + '' => '鉔', + '' => '鉣', + '' => '鉐', + '' => '鉲', + '' => '鉎', + '' => '鉓', + '' => '鉌', + '' => '鉖', + '' => '鈲', + '' => '閟', + '' => '閜', + '' => '閞', + '' => '閛', + '' => '隒', + '' => '隓', + '' => '隑', + '' => '隗', + '' => '雎', + '' => '雺', + '' => '雽', + '' => '雸', + '' => '雵', + '' => '靳', + '' => '靷', + '' => '靸', + '' => '靲', + '' => '頏', + '' => '頍', + '' => '頎', + '' => '颬', + '' => '飶', + '' => '飹', + '' => '馯', + '' => '馲', + '' => '馰', + '' => '馵', + '' => '骭', + '' => '骫', + '' => '魛', + '' => '鳪', + '' => '鳭', + '' => '鳧', + '' => '麀', + '' => '黽', + '' => '僦', + '' => '僔', + '' => '僗', + '' => '僨', + '' => '僳', + '' => '僛', + '' => '僪', + '' => '僝', + '' => '僤', + '' => '僓', + '' => '僬', + '' => '僰', + '' => '僯', + '' => '僣', + '' => '僠', + '@' => '凘', + 'A' => '劀', + 'B' => '劁', + 'C' => '勩', + 'D' => '勫', + 'E' => '匰', + 'F' => '厬', + 'G' => '嘧', + 'H' => '嘕', + 'I' => '嘌', + 'J' => '嘒', + 'K' => '嗼', + 'L' => '嘏', + 'M' => '嘜', + 'N' => '嘁', + 'O' => '嘓', + 'P' => '嘂', + 'Q' => '嗺', + 'R' => '嘝', + 'S' => '嘄', + 'T' => '嗿', + 'U' => '嗹', + 'V' => '墉', + 'W' => '塼', + 'X' => '墐', + 'Y' => '墘', + 'Z' => '墆', + '[' => '墁', + '\\' => '塿', + ']' => '塴', + '^' => '墋', + '_' => '塺', + '`' => '墇', + 'a' => '墑', + 'b' => '墎', + 'c' => '塶', + 'd' => '墂', + 'e' => '墈', + 'f' => '塻', + 'g' => '墔', + 'h' => '墏', + 'i' => '壾', + 'j' => '奫', + 'k' => '嫜', + 'l' => '嫮', + 'm' => '嫥', + 'n' => '嫕', + 'o' => '嫪', + 'p' => '嫚', + 'q' => '嫭', + 'r' => '嫫', + 's' => '嫳', + 't' => '嫢', + 'u' => '嫠', + 'v' => '嫛', + 'w' => '嫬', + 'x' => '嫞', + 'y' => '嫝', + 'z' => '嫙', + '{' => '嫨', + '|' => '嫟', + '}' => '孷', + '~' => '寠', + '' => '寣', + '' => '屣', + '' => '嶂', + '' => '嶀', + '' => '嵽', + '' => '嶆', + '' => '嵺', + '' => '嶁', + '' => '嵷', + '' => '嶊', + '' => '嶉', + '' => '嶈', + '' => '嵾', + '' => '嵼', + '' => '嶍', + '' => '嵹', + '' => '嵿', + '' => '幘', + '' => '幙', + '' => '幓', + '' => '廘', + '' => '廑', + '' => '廗', + '' => '廎', + '' => '廜', + '' => '廕', + '' => '廙', + '' => '廒', + '' => '廔', + '' => '彄', + '' => '彃', + '' => '彯', + '' => '徶', + '' => '愬', + '' => '愨', + '' => '慁', + '' => '慞', + '' => '慱', + '' => '慳', + '' => '慒', + '' => '慓', + '' => '慲', + '' => '慬', + '' => '憀', + '' => '慴', + '' => '慔', + '' => '慺', + '' => '慛', + '' => '慥', + '' => '愻', + '' => '慪', + '' => '慡', + '' => '慖', + '' => '戩', + '' => '戧', + '' => '戫', + '' => '搫', + '' => '摍', + '' => '摛', + '' => '摝', + '' => '摴', + '' => '摶', + '' => '摲', + '' => '摳', + '' => '摽', + '' => '摵', + '' => '摦', + '' => '撦', + '' => '摎', + '' => '撂', + '' => '摞', + '' => '摜', + '' => '摋', + '' => '摓', + '' => '摠', + '' => '摐', + '' => '摿', + '' => '搿', + '' => '摬', + '' => '摫', + '' => '摙', + '' => '摥', + '' => '摷', + '' => '敳', + '' => '斠', + '' => '暡', + '' => '暠', + '' => '暟', + '' => '朅', + '' => '朄', + '' => '朢', + '' => '榱', + '' => '榶', + '' => '槉', + '@' => '榠', + 'A' => '槎', + 'B' => '榖', + 'C' => '榰', + 'D' => '榬', + 'E' => '榼', + 'F' => '榑', + 'G' => '榙', + 'H' => '榎', + 'I' => '榧', + 'J' => '榍', + 'K' => '榩', + 'L' => '榾', + 'M' => '榯', + 'N' => '榿', + 'O' => '槄', + 'P' => '榽', + 'Q' => '榤', + 'R' => '槔', + 'S' => '榹', + 'T' => '槊', + 'U' => '榚', + 'V' => '槏', + 'W' => '榳', + 'X' => '榓', + 'Y' => '榪', + 'Z' => '榡', + '[' => '榞', + '\\' => '槙', + ']' => '榗', + '^' => '榐', + '_' => '槂', + '`' => '榵', + 'a' => '榥', + 'b' => '槆', + 'c' => '歊', + 'd' => '歍', + 'e' => '歋', + 'f' => '殞', + 'g' => '殟', + 'h' => '殠', + 'i' => '毃', + 'j' => '毄', + 'k' => '毾', + 'l' => '滎', + 'm' => '滵', + 'n' => '滱', + 'o' => '漃', + 'p' => '漥', + 'q' => '滸', + 'r' => '漷', + 's' => '滻', + 't' => '漮', + 'u' => '漉', + 'v' => '潎', + 'w' => '漙', + 'x' => '漚', + 'y' => '漧', + 'z' => '漘', + '{' => '漻', + '|' => '漒', + '}' => '滭', + '~' => '漊', + '' => '漶', + '' => '潳', + '' => '滹', + '' => '滮', + '' => '漭', + '' => '潀', + '' => '漰', + '' => '漼', + '' => '漵', + '' => '滫', + '' => '漇', + '' => '漎', + '' => '潃', + '' => '漅', + '' => '滽', + '' => '滶', + '' => '漹', + '' => '漜', + '' => '滼', + '' => '漺', + '' => '漟', + '' => '漍', + '' => '漞', + '' => '漈', + '' => '漡', + '' => '熇', + '' => '熐', + '' => '熉', + '' => '熀', + '' => '熅', + '' => '熂', + '' => '熏', + '' => '煻', + '' => '熆', + '' => '熁', + '' => '熗', + '' => '牄', + '' => '牓', + '' => '犗', + '' => '犕', + '' => '犓', + '' => '獃', + '' => '獍', + '' => '獑', + '' => '獌', + '' => '瑢', + '' => '瑳', + '' => '瑱', + '' => '瑵', + '' => '瑲', + '' => '瑧', + '' => '瑮', + '' => '甀', + '' => '甂', + '' => '甃', + '' => '畽', + '' => '疐', + '' => '瘖', + '' => '瘈', + '' => '瘌', + '' => '瘕', + '' => '瘑', + '' => '瘊', + '' => '瘔', + '' => '皸', + '' => '瞁', + '' => '睼', + '' => '瞅', + '' => '瞂', + '' => '睮', + '' => '瞀', + '' => '睯', + '' => '睾', + '' => '瞃', + '' => '碲', + '' => '碪', + '' => '碴', + '' => '碭', + '' => '碨', + '' => '硾', + '' => '碫', + '' => '碞', + '' => '碥', + '' => '碠', + '' => '碬', + '' => '碢', + '' => '碤', + '' => '禘', + '' => '禊', + '' => '禋', + '' => '禖', + '' => '禕', + '' => '禔', + '' => '禓', + '@' => '禗', + 'A' => '禈', + 'B' => '禒', + 'C' => '禐', + 'D' => '稫', + 'E' => '穊', + 'F' => '稰', + 'G' => '稯', + 'H' => '稨', + 'I' => '稦', + 'J' => '窨', + 'K' => '窫', + 'L' => '窬', + 'M' => '竮', + 'N' => '箈', + 'O' => '箜', + 'P' => '箊', + 'Q' => '箑', + 'R' => '箐', + 'S' => '箖', + 'T' => '箍', + 'U' => '箌', + 'V' => '箛', + 'W' => '箎', + 'X' => '箅', + 'Y' => '箘', + 'Z' => '劄', + '[' => '箙', + '\\' => '箤', + ']' => '箂', + '^' => '粻', + '_' => '粿', + '`' => '粼', + 'a' => '粺', + 'b' => '綧', + 'c' => '綷', + 'd' => '緂', + 'e' => '綣', + 'f' => '綪', + 'g' => '緁', + 'h' => '緀', + 'i' => '緅', + 'j' => '綝', + 'k' => '緎', + 'l' => '緄', + 'm' => '緆', + 'n' => '緋', + 'o' => '緌', + 'p' => '綯', + 'q' => '綹', + 'r' => '綖', + 's' => '綼', + 't' => '綟', + 'u' => '綦', + 'v' => '綮', + 'w' => '綩', + 'x' => '綡', + 'y' => '緉', + 'z' => '罳', + '{' => '翢', + '|' => '翣', + '}' => '翥', + '~' => '翞', + '' => '耤', + '' => '聝', + '' => '聜', + '' => '膉', + '' => '膆', + '' => '膃', + '' => '膇', + '' => '膍', + '' => '膌', + '' => '膋', + '' => '舕', + '' => '蒗', + '' => '蒤', + '' => '蒡', + '' => '蒟', + '' => '蒺', + '' => '蓎', + '' => '蓂', + '' => '蒬', + '' => '蒮', + '' => '蒫', + '' => '蒹', + '' => '蒴', + '' => '蓁', + '' => '蓍', + '' => '蒪', + '' => '蒚', + '' => '蒱', + '' => '蓐', + '' => '蒝', + '' => '蒧', + '' => '蒻', + '' => '蒢', + '' => '蒔', + '' => '蓇', + '' => '蓌', + '' => '蒛', + '' => '蒩', + '' => '蒯', + '' => '蒨', + '' => '蓖', + '' => '蒘', + '' => '蒶', + '' => '蓏', + '' => '蒠', + '' => '蓗', + '' => '蓔', + '' => '蓒', + '' => '蓛', + '' => '蒰', + '' => '蒑', + '' => '虡', + '' => '蜳', + '' => '蜣', + '' => '蜨', + '' => '蝫', + '' => '蝀', + '' => '蜮', + '' => '蜞', + '' => '蜡', + '' => '蜙', + '' => '蜛', + '' => '蝃', + '' => '蜬', + '' => '蝁', + '' => '蜾', + '' => '蝆', + '' => '蜠', + '' => '蜲', + '' => '蜪', + '' => '蜭', + '' => '蜼', + '' => '蜒', + '' => '蜺', + '' => '蜱', + '' => '蜵', + '' => '蝂', + '' => '蜦', + '' => '蜧', + '' => '蜸', + '' => '蜤', + '' => '蜚', + '' => '蜰', + '' => '蜑', + '' => '裷', + '' => '裧', + '' => '裱', + '' => '裲', + '' => '裺', + '' => '裾', + '' => '裮', + '' => '裼', + '' => '裶', + '' => '裻', + '@' => '裰', + 'A' => '裬', + 'B' => '裫', + 'C' => '覝', + 'D' => '覡', + 'E' => '覟', + 'F' => '覞', + 'G' => '觩', + 'H' => '觫', + 'I' => '觨', + 'J' => '誫', + 'K' => '誙', + 'L' => '誋', + 'M' => '誒', + 'N' => '誏', + 'O' => '誖', + 'P' => '谽', + 'Q' => '豨', + 'R' => '豩', + 'S' => '賕', + 'T' => '賏', + 'U' => '賗', + 'V' => '趖', + 'W' => '踉', + 'X' => '踂', + 'Y' => '跿', + 'Z' => '踍', + '[' => '跽', + '\\' => '踊', + ']' => '踃', + '^' => '踇', + '_' => '踆', + '`' => '踅', + 'a' => '跾', + 'b' => '踀', + 'c' => '踄', + 'd' => '輐', + 'e' => '輑', + 'f' => '輎', + 'g' => '輍', + 'h' => '鄣', + 'i' => '鄜', + 'j' => '鄠', + 'k' => '鄢', + 'l' => '鄟', + 'm' => '鄝', + 'n' => '鄚', + 'o' => '鄤', + 'p' => '鄡', + 'q' => '鄛', + 'r' => '酺', + 's' => '酲', + 't' => '酹', + 'u' => '酳', + 'v' => '銥', + 'w' => '銤', + 'x' => '鉶', + 'y' => '銛', + 'z' => '鉺', + '{' => '銠', + '|' => '銔', + '}' => '銪', + '~' => '銍', + '' => '銦', + '' => '銚', + '' => '銫', + '' => '鉹', + '' => '銗', + '' => '鉿', + '' => '銣', + '' => '鋮', + '' => '銎', + '' => '銂', + '' => '銕', + '' => '銢', + '' => '鉽', + '' => '銈', + '' => '銡', + '' => '銊', + '' => '銆', + '' => '銌', + '' => '銙', + '' => '銧', + '' => '鉾', + '' => '銇', + '' => '銩', + '' => '銝', + '' => '銋', + '' => '鈭', + '' => '隞', + '' => '隡', + '' => '雿', + '' => '靘', + '' => '靽', + '' => '靺', + '' => '靾', + '' => '鞃', + '' => '鞀', + '' => '鞂', + '' => '靻', + '' => '鞄', + '' => '鞁', + '' => '靿', + '' => '韎', + '' => '韍', + '' => '頖', + '' => '颭', + '' => '颮', + '' => '餂', + '' => '餀', + '' => '餇', + '' => '馝', + '' => '馜', + '' => '駃', + '' => '馹', + '' => '馻', + '' => '馺', + '' => '駂', + '' => '馽', + '' => '駇', + '' => '骱', + '' => '髣', + '' => '髧', + '' => '鬾', + '' => '鬿', + '' => '魠', + '' => '魡', + '' => '魟', + '' => '鳱', + '' => '鳲', + '' => '鳵', + '' => '麧', + '' => '僿', + '' => '儃', + '' => '儰', + '' => '僸', + '' => '儆', + '' => '儇', + '' => '僶', + '' => '僾', + '' => '儋', + '' => '儌', + '' => '僽', + '' => '儊', + '' => '劋', + '' => '劌', + '' => '勱', + '' => '勯', + '' => '噈', + '' => '噂', + '' => '噌', + '' => '嘵', + '' => '噁', + '' => '噊', + '' => '噉', + '' => '噆', + '' => '噘', + '@' => '噚', + 'A' => '噀', + 'B' => '嘳', + 'C' => '嘽', + 'D' => '嘬', + 'E' => '嘾', + 'F' => '嘸', + 'G' => '嘪', + 'H' => '嘺', + 'I' => '圚', + 'J' => '墫', + 'K' => '墝', + 'L' => '墱', + 'M' => '墠', + 'N' => '墣', + 'O' => '墯', + 'P' => '墬', + 'Q' => '墥', + 'R' => '墡', + 'S' => '壿', + 'T' => '嫿', + 'U' => '嫴', + 'V' => '嫽', + 'W' => '嫷', + 'X' => '嫶', + 'Y' => '嬃', + 'Z' => '嫸', + '[' => '嬂', + '\\' => '嫹', + ']' => '嬁', + '^' => '嬇', + '_' => '嬅', + '`' => '嬏', + 'a' => '屧', + 'b' => '嶙', + 'c' => '嶗', + 'd' => '嶟', + 'e' => '嶒', + 'f' => '嶢', + 'g' => '嶓', + 'h' => '嶕', + 'i' => '嶠', + 'j' => '嶜', + 'k' => '嶡', + 'l' => '嶚', + 'm' => '嶞', + 'n' => '幩', + 'o' => '幝', + 'p' => '幠', + 'q' => '幜', + 'r' => '緳', + 's' => '廛', + 't' => '廞', + 'u' => '廡', + 'v' => '彉', + 'w' => '徲', + 'x' => '憋', + 'y' => '憃', + 'z' => '慹', + '{' => '憱', + '|' => '憰', + '}' => '憢', + '~' => '憉', + '' => '憛', + '' => '憓', + '' => '憯', + '' => '憭', + '' => '憟', + '' => '憒', + '' => '憪', + '' => '憡', + '' => '憍', + '' => '慦', + '' => '憳', + '' => '戭', + '' => '摮', + '' => '摰', + '' => '撖', + '' => '撠', + '' => '撅', + '' => '撗', + '' => '撜', + '' => '撏', + '' => '撋', + '' => '撊', + '' => '撌', + '' => '撣', + '' => '撟', + '' => '摨', + '' => '撱', + '' => '撘', + '' => '敶', + '' => '敺', + '' => '敹', + '' => '敻', + '' => '斲', + '' => '斳', + '' => '暵', + '' => '暰', + '' => '暩', + '' => '暲', + '' => '暷', + '' => '暪', + '' => '暯', + '' => '樀', + '' => '樆', + '' => '樗', + '' => '槥', + '' => '槸', + '' => '樕', + '' => '槱', + '' => '槤', + '' => '樠', + '' => '槿', + '' => '槬', + '' => '槢', + '' => '樛', + '' => '樝', + '' => '槾', + '' => '樧', + '' => '槲', + '' => '槮', + '' => '樔', + '' => '槷', + '' => '槧', + '' => '橀', + '' => '樈', + '' => '槦', + '' => '槻', + '' => '樍', + '' => '槼', + '' => '槫', + '' => '樉', + '' => '樄', + '' => '樘', + '' => '樥', + '' => '樏', + '' => '槶', + '' => '樦', + '' => '樇', + '' => '槴', + '' => '樖', + '' => '歑', + '' => '殥', + '' => '殣', + '' => '殢', + '' => '殦', + '' => '氁', + '' => '氀', + '' => '毿', + '' => '氂', + '' => '潁', + '' => '漦', + '' => '潾', + '' => '澇', + '' => '濆', + '' => '澒', + '@' => '澍', + 'A' => '澉', + 'B' => '澌', + 'C' => '潢', + 'D' => '潏', + 'E' => '澅', + 'F' => '潚', + 'G' => '澖', + 'H' => '潶', + 'I' => '潬', + 'J' => '澂', + 'K' => '潕', + 'L' => '潲', + 'M' => '潒', + 'N' => '潐', + 'O' => '潗', + 'P' => '澔', + 'Q' => '澓', + 'R' => '潝', + 'S' => '漀', + 'T' => '潡', + 'U' => '潫', + 'V' => '潽', + 'W' => '潧', + 'X' => '澐', + 'Y' => '潓', + 'Z' => '澋', + '[' => '潩', + '\\' => '潿', + ']' => '澕', + '^' => '潣', + '_' => '潷', + '`' => '潪', + 'a' => '潻', + 'b' => '熲', + 'c' => '熯', + 'd' => '熛', + 'e' => '熰', + 'f' => '熠', + 'g' => '熚', + 'h' => '熩', + 'i' => '熵', + 'j' => '熝', + 'k' => '熥', + 'l' => '熞', + 'm' => '熤', + 'n' => '熡', + 'o' => '熪', + 'p' => '熜', + 'q' => '熧', + 'r' => '熳', + 's' => '犘', + 't' => '犚', + 'u' => '獘', + 'v' => '獒', + 'w' => '獞', + 'x' => '獟', + 'y' => '獠', + 'z' => '獝', + '{' => '獛', + '|' => '獡', + '}' => '獚', + '~' => '獙', + '' => '獢', + '' => '璇', + '' => '璉', + '' => '璊', + '' => '璆', + '' => '璁', + '' => '瑽', + '' => '璅', + '' => '璈', + '' => '瑼', + '' => '瑹', + '' => '甈', + '' => '甇', + '' => '畾', + '' => '瘥', + '' => '瘞', + '' => '瘙', + '' => '瘝', + '' => '瘜', + '' => '瘣', + '' => '瘚', + '' => '瘨', + '' => '瘛', + '' => '皜', + '' => '皝', + '' => '皞', + '' => '皛', + '' => '瞍', + '' => '瞏', + '' => '瞉', + '' => '瞈', + '' => '磍', + '' => '碻', + '' => '磏', + '' => '磌', + '' => '磑', + '' => '磎', + '' => '磔', + '' => '磈', + '' => '磃', + '' => '磄', + '' => '磉', + '' => '禚', + '' => '禡', + '' => '禠', + '' => '禜', + '' => '禢', + '' => '禛', + '' => '歶', + '' => '稹', + '' => '窲', + '' => '窴', + '' => '窳', + '' => '箷', + '' => '篋', + '' => '箾', + '' => '箬', + '' => '篎', + '' => '箯', + '' => '箹', + '' => '篊', + '' => '箵', + '' => '糅', + '' => '糈', + '' => '糌', + '' => '糋', + '' => '緷', + '' => '緛', + '' => '緪', + '' => '緧', + '' => '緗', + '' => '緡', + '' => '縃', + '' => '緺', + '' => '緦', + '' => '緶', + '' => '緱', + '' => '緰', + '' => '緮', + '' => '緟', + '' => '罶', + '' => '羬', + '' => '羰', + '' => '羭', + '' => '翭', + '' => '翫', + '' => '翪', + '' => '翬', + '' => '翦', + '' => '翨', + '' => '聤', + '' => '聧', + '' => '膣', + '' => '膟', + '@' => '膞', + 'A' => '膕', + 'B' => '膢', + 'C' => '膙', + 'D' => '膗', + 'E' => '舖', + 'F' => '艏', + 'G' => '艓', + 'H' => '艒', + 'I' => '艐', + 'J' => '艎', + 'K' => '艑', + 'L' => '蔤', + 'M' => '蔻', + 'N' => '蔏', + 'O' => '蔀', + 'P' => '蔩', + 'Q' => '蔎', + 'R' => '蔉', + 'S' => '蔍', + 'T' => '蔟', + 'U' => '蔊', + 'V' => '蔧', + 'W' => '蔜', + 'X' => '蓻', + 'Y' => '蔫', + 'Z' => '蓺', + '[' => '蔈', + '\\' => '蔌', + ']' => '蓴', + '^' => '蔪', + '_' => '蓲', + '`' => '蔕', + 'a' => '蓷', + 'b' => '蓫', + 'c' => '蓳', + 'd' => '蓼', + 'e' => '蔒', + 'f' => '蓪', + 'g' => '蓩', + 'h' => '蔖', + 'i' => '蓾', + 'j' => '蔨', + 'k' => '蔝', + 'l' => '蔮', + 'm' => '蔂', + 'n' => '蓽', + 'o' => '蔞', + 'p' => '蓶', + 'q' => '蔱', + 'r' => '蔦', + 's' => '蓧', + 't' => '蓨', + 'u' => '蓰', + 'v' => '蓯', + 'w' => '蓹', + 'x' => '蔘', + 'y' => '蔠', + 'z' => '蔰', + '{' => '蔋', + '|' => '蔙', + '}' => '蔯', + '~' => '虢', + '' => '蝖', + '' => '蝣', + '' => '蝤', + '' => '蝷', + '' => '蟡', + '' => '蝳', + '' => '蝘', + '' => '蝔', + '' => '蝛', + '' => '蝒', + '' => '蝡', + '' => '蝚', + '' => '蝑', + '' => '蝞', + '' => '蝭', + '' => '蝪', + '' => '蝐', + '' => '蝎', + '' => '蝟', + '' => '蝝', + '' => '蝯', + '' => '蝬', + '' => '蝺', + '' => '蝮', + '' => '蝜', + '' => '蝥', + '' => '蝏', + '' => '蝻', + '' => '蝵', + '' => '蝢', + '' => '蝧', + '' => '蝩', + '' => '衚', + '' => '褅', + '' => '褌', + '' => '褔', + '' => '褋', + '' => '褗', + '' => '褘', + '' => '褙', + '' => '褆', + '' => '褖', + '' => '褑', + '' => '褎', + '' => '褉', + '' => '覢', + '' => '覤', + '' => '覣', + '' => '觭', + '' => '觰', + '' => '觬', + '' => '諏', + '' => '諆', + '' => '誸', + '' => '諓', + '' => '諑', + '' => '諔', + '' => '諕', + '' => '誻', + '' => '諗', + '' => '誾', + '' => '諀', + '' => '諅', + '' => '諘', + '' => '諃', + '' => '誺', + '' => '誽', + '' => '諙', + '' => '谾', + '' => '豍', + '' => '貏', + '' => '賥', + '' => '賟', + '' => '賙', + '' => '賨', + '' => '賚', + '' => '賝', + '' => '賧', + '' => '趠', + '' => '趜', + '' => '趡', + '' => '趛', + '' => '踠', + '' => '踣', + '' => '踥', + '' => '踤', + '' => '踮', + '' => '踕', + '' => '踛', + '' => '踖', + '' => '踑', + '' => '踙', + '' => '踦', + '' => '踧', + '@' => '踔', + 'A' => '踒', + 'B' => '踘', + 'C' => '踓', + 'D' => '踜', + 'E' => '踗', + 'F' => '踚', + 'G' => '輬', + 'H' => '輤', + 'I' => '輘', + 'J' => '輚', + 'K' => '輠', + 'L' => '輣', + 'M' => '輖', + 'N' => '輗', + 'O' => '遳', + 'P' => '遰', + 'Q' => '遯', + 'R' => '遧', + 'S' => '遫', + 'T' => '鄯', + 'U' => '鄫', + 'V' => '鄩', + 'W' => '鄪', + 'X' => '鄲', + 'Y' => '鄦', + 'Z' => '鄮', + '[' => '醅', + '\\' => '醆', + ']' => '醊', + '^' => '醁', + '_' => '醂', + '`' => '醄', + 'a' => '醀', + 'b' => '鋐', + 'c' => '鋃', + 'd' => '鋄', + 'e' => '鋀', + 'f' => '鋙', + 'g' => '銶', + 'h' => '鋏', + 'i' => '鋱', + 'j' => '鋟', + 'k' => '鋘', + 'l' => '鋩', + 'm' => '鋗', + 'n' => '鋝', + 'o' => '鋌', + 'p' => '鋯', + 'q' => '鋂', + 'r' => '鋨', + 's' => '鋊', + 't' => '鋈', + 'u' => '鋎', + 'v' => '鋦', + 'w' => '鋍', + 'x' => '鋕', + 'y' => '鋉', + 'z' => '鋠', + '{' => '鋞', + '|' => '鋧', + '}' => '鋑', + '~' => '鋓', + '' => '銵', + '' => '鋡', + '' => '鋆', + '' => '銴', + '' => '镼', + '' => '閬', + '' => '閫', + '' => '閮', + '' => '閰', + '' => '隤', + '' => '隢', + '' => '雓', + '' => '霅', + '' => '霈', + '' => '霂', + '' => '靚', + '' => '鞊', + '' => '鞎', + '' => '鞈', + '' => '韐', + '' => '韏', + '' => '頞', + '' => '頝', + '' => '頦', + '' => '頩', + '' => '頨', + '' => '頠', + '' => '頛', + '' => '頧', + '' => '颲', + '' => '餈', + '' => '飺', + '' => '餑', + '' => '餔', + '' => '餖', + '' => '餗', + '' => '餕', + '' => '駜', + '' => '駍', + '' => '駏', + '' => '駓', + '' => '駔', + '' => '駎', + '' => '駉', + '' => '駖', + '' => '駘', + '' => '駋', + '' => '駗', + '' => '駌', + '' => '骳', + '' => '髬', + '' => '髫', + '' => '髳', + '' => '髲', + '' => '髱', + '' => '魆', + '' => '魃', + '' => '魧', + '' => '魴', + '' => '魱', + '' => '魦', + '' => '魶', + '' => '魵', + '' => '魰', + '' => '魨', + '' => '魤', + '' => '魬', + '' => '鳼', + '' => '鳺', + '' => '鳽', + '' => '鳿', + '' => '鳷', + '' => '鴇', + '' => '鴀', + '' => '鳹', + '' => '鳻', + '' => '鴈', + '' => '鴅', + '' => '鴄', + '' => '麃', + '' => '黓', + '' => '鼏', + '' => '鼐', + '' => '儜', + '' => '儓', + '' => '儗', + '' => '儚', + '' => '儑', + '' => '凞', + '' => '匴', + '' => '叡', + '' => '噰', + '' => '噠', + '' => '噮', + '@' => '噳', + 'A' => '噦', + 'B' => '噣', + 'C' => '噭', + 'D' => '噲', + 'E' => '噞', + 'F' => '噷', + 'G' => '圜', + 'H' => '圛', + 'I' => '壈', + 'J' => '墽', + 'K' => '壉', + 'L' => '墿', + 'M' => '墺', + 'N' => '壂', + 'O' => '墼', + 'P' => '壆', + 'Q' => '嬗', + 'R' => '嬙', + 'S' => '嬛', + 'T' => '嬡', + 'U' => '嬔', + 'V' => '嬓', + 'W' => '嬐', + 'X' => '嬖', + 'Y' => '嬨', + 'Z' => '嬚', + '[' => '嬠', + '\\' => '嬞', + ']' => '寯', + '^' => '嶬', + '_' => '嶱', + '`' => '嶩', + 'a' => '嶧', + 'b' => '嶵', + 'c' => '嶰', + 'd' => '嶮', + 'e' => '嶪', + 'f' => '嶨', + 'g' => '嶲', + 'h' => '嶭', + 'i' => '嶯', + 'j' => '嶴', + 'k' => '幧', + 'l' => '幨', + 'm' => '幦', + 'n' => '幯', + 'o' => '廩', + 'p' => '廧', + 'q' => '廦', + 'r' => '廨', + 's' => '廥', + 't' => '彋', + 'u' => '徼', + 'v' => '憝', + 'w' => '憨', + 'x' => '憖', + 'y' => '懅', + 'z' => '憴', + '{' => '懆', + '|' => '懁', + '}' => '懌', + '~' => '憺', + '' => '憿', + '' => '憸', + '' => '憌', + '' => '擗', + '' => '擖', + '' => '擐', + '' => '擏', + '' => '擉', + '' => '撽', + '' => '撉', + '' => '擃', + '' => '擛', + '' => '擳', + '' => '擙', + '' => '攳', + '' => '敿', + '' => '敼', + '' => '斢', + '' => '曈', + '' => '暾', + '' => '曀', + '' => '曊', + '' => '曋', + '' => '曏', + '' => '暽', + '' => '暻', + '' => '暺', + '' => '曌', + '' => '朣', + '' => '樴', + '' => '橦', + '' => '橉', + '' => '橧', + '' => '樲', + '' => '橨', + '' => '樾', + '' => '橝', + '' => '橭', + '' => '橶', + '' => '橛', + '' => '橑', + '' => '樨', + '' => '橚', + '' => '樻', + '' => '樿', + '' => '橁', + '' => '橪', + '' => '橤', + '' => '橐', + '' => '橏', + '' => '橔', + '' => '橯', + '' => '橩', + '' => '橠', + '' => '樼', + '' => '橞', + '' => '橖', + '' => '橕', + '' => '橍', + '' => '橎', + '' => '橆', + '' => '歕', + '' => '歔', + '' => '歖', + '' => '殧', + '' => '殪', + '' => '殫', + '' => '毈', + '' => '毇', + '' => '氄', + '' => '氃', + '' => '氆', + '' => '澭', + '' => '濋', + '' => '澣', + '' => '濇', + '' => '澼', + '' => '濎', + '' => '濈', + '' => '潞', + '' => '濄', + '' => '澽', + '' => '澞', + '' => '濊', + '' => '澨', + '' => '瀄', + '' => '澥', + '' => '澮', + '' => '澺', + '' => '澬', + '' => '澪', + '' => '濏', + '' => '澿', + '' => '澸', + '@' => '澢', + 'A' => '濉', + 'B' => '澫', + 'C' => '濍', + 'D' => '澯', + 'E' => '澲', + 'F' => '澰', + 'G' => '燅', + 'H' => '燂', + 'I' => '熿', + 'J' => '熸', + 'K' => '燖', + 'L' => '燀', + 'M' => '燁', + 'N' => '燋', + 'O' => '燔', + 'P' => '燊', + 'Q' => '燇', + 'R' => '燏', + 'S' => '熽', + 'T' => '燘', + 'U' => '熼', + 'V' => '燆', + 'W' => '燚', + 'X' => '燛', + 'Y' => '犝', + 'Z' => '犞', + '[' => '獩', + '\\' => '獦', + ']' => '獧', + '^' => '獬', + '_' => '獥', + '`' => '獫', + 'a' => '獪', + 'b' => '瑿', + 'c' => '璚', + 'd' => '璠', + 'e' => '璔', + 'f' => '璒', + 'g' => '璕', + 'h' => '璡', + 'i' => '甋', + 'j' => '疀', + 'k' => '瘯', + 'l' => '瘭', + 'm' => '瘱', + 'n' => '瘽', + 'o' => '瘳', + 'p' => '瘼', + 'q' => '瘵', + 'r' => '瘲', + 's' => '瘰', + 't' => '皻', + 'u' => '盦', + 'v' => '瞚', + 'w' => '瞝', + 'x' => '瞡', + 'y' => '瞜', + 'z' => '瞛', + '{' => '瞢', + '|' => '瞣', + '}' => '瞕', + '~' => '瞙', + '' => '瞗', + '' => '磝', + '' => '磩', + '' => '磥', + '' => '磪', + '' => '磞', + '' => '磣', + '' => '磛', + '' => '磡', + '' => '磢', + '' => '磭', + '' => '磟', + '' => '磠', + '' => '禤', + '' => '穄', + '' => '穈', + '' => '穇', + '' => '窶', + '' => '窸', + '' => '窵', + '' => '窱', + '' => '窷', + '' => '篞', + '' => '篣', + '' => '篧', + '' => '篝', + '' => '篕', + '' => '篥', + '' => '篚', + '' => '篨', + '' => '篹', + '' => '篔', + '' => '篪', + '' => '篢', + '' => '篜', + '' => '篫', + '' => '篘', + '' => '篟', + '' => '糒', + '' => '糔', + '' => '糗', + '' => '糐', + '' => '糑', + '' => '縒', + '' => '縡', + '' => '縗', + '' => '縌', + '' => '縟', + '' => '縠', + '' => '縓', + '' => '縎', + '' => '縜', + '' => '縕', + '' => '縚', + '' => '縢', + '' => '縋', + '' => '縏', + '' => '縖', + '' => '縍', + '' => '縔', + '' => '縥', + '' => '縤', + '' => '罃', + '' => '罻', + '' => '罼', + '' => '罺', + '' => '羱', + '' => '翯', + '' => '耪', + '' => '耩', + '' => '聬', + '' => '膱', + '' => '膦', + '' => '膮', + '' => '膹', + '' => '膵', + '' => '膫', + '' => '膰', + '' => '膬', + '' => '膴', + '' => '膲', + '' => '膷', + '' => '膧', + '' => '臲', + '' => '艕', + '' => '艖', + '' => '艗', + '' => '蕖', + '' => '蕅', + '' => '蕫', + '' => '蕍', + '' => '蕓', + '' => '蕡', + '' => '蕘', + '@' => '蕀', + 'A' => '蕆', + 'B' => '蕤', + 'C' => '蕁', + 'D' => '蕢', + 'E' => '蕄', + 'F' => '蕑', + 'G' => '蕇', + 'H' => '蕣', + 'I' => '蔾', + 'J' => '蕛', + 'K' => '蕱', + 'L' => '蕎', + 'M' => '蕮', + 'N' => '蕵', + 'O' => '蕕', + 'P' => '蕧', + 'Q' => '蕠', + 'R' => '薌', + 'S' => '蕦', + 'T' => '蕝', + 'U' => '蕔', + 'V' => '蕥', + 'W' => '蕬', + 'X' => '虣', + 'Y' => '虥', + 'Z' => '虤', + '[' => '螛', + '\\' => '螏', + ']' => '螗', + '^' => '螓', + '_' => '螒', + '`' => '螈', + 'a' => '螁', + 'b' => '螖', + 'c' => '螘', + 'd' => '蝹', + 'e' => '螇', + 'f' => '螣', + 'g' => '螅', + 'h' => '螐', + 'i' => '螑', + 'j' => '螝', + 'k' => '螄', + 'l' => '螔', + 'm' => '螜', + 'n' => '螚', + 'o' => '螉', + 'p' => '褞', + 'q' => '褦', + 'r' => '褰', + 's' => '褭', + 't' => '褮', + 'u' => '褧', + 'v' => '褱', + 'w' => '褢', + 'x' => '褩', + 'y' => '褣', + 'z' => '褯', + '{' => '褬', + '|' => '褟', + '}' => '觱', + '~' => '諠', + '' => '諢', + '' => '諲', + '' => '諴', + '' => '諵', + '' => '諝', + '' => '謔', + '' => '諤', + '' => '諟', + '' => '諰', + '' => '諈', + '' => '諞', + '' => '諡', + '' => '諨', + '' => '諿', + '' => '諯', + '' => '諻', + '' => '貑', + '' => '貒', + '' => '貐', + '' => '賵', + '' => '賮', + '' => '賱', + '' => '賰', + '' => '賳', + '' => '赬', + '' => '赮', + '' => '趥', + '' => '趧', + '' => '踳', + '' => '踾', + '' => '踸', + '' => '蹀', + '' => '蹅', + '' => '踶', + '' => '踼', + '' => '踽', + '' => '蹁', + '' => '踰', + '' => '踿', + '' => '躽', + '' => '輶', + '' => '輮', + '' => '輵', + '' => '輲', + '' => '輹', + '' => '輷', + '' => '輴', + '' => '遶', + '' => '遹', + '' => '遻', + '' => '邆', + '' => '郺', + '' => '鄳', + '' => '鄵', + '' => '鄶', + '' => '醓', + '' => '醐', + '' => '醑', + '' => '醍', + '' => '醏', + '' => '錧', + '' => '錞', + '' => '錈', + '' => '錟', + '' => '錆', + '' => '錏', + '' => '鍺', + '' => '錸', + '' => '錼', + '' => '錛', + '' => '錣', + '' => '錒', + '' => '錁', + '' => '鍆', + '' => '錭', + '' => '錎', + '' => '錍', + '' => '鋋', + '' => '錝', + '' => '鋺', + '' => '錥', + '' => '錓', + '' => '鋹', + '' => '鋷', + '' => '錴', + '' => '錂', + '' => '錤', + '' => '鋿', + '' => '錩', + '' => '錹', + '' => '錵', + '' => '錪', + '' => '錔', + '' => '錌', + '@' => '錋', + 'A' => '鋾', + 'B' => '錉', + 'C' => '錀', + 'D' => '鋻', + 'E' => '錖', + 'F' => '閼', + 'G' => '闍', + 'H' => '閾', + 'I' => '閹', + 'J' => '閺', + 'K' => '閶', + 'L' => '閿', + 'M' => '閵', + 'N' => '閽', + 'O' => '隩', + 'P' => '雔', + 'Q' => '霋', + 'R' => '霒', + 'S' => '霐', + 'T' => '鞙', + 'U' => '鞗', + 'V' => '鞔', + 'W' => '韰', + 'X' => '韸', + 'Y' => '頵', + 'Z' => '頯', + '[' => '頲', + '\\' => '餤', + ']' => '餟', + '^' => '餧', + '_' => '餩', + '`' => '馞', + 'a' => '駮', + 'b' => '駬', + 'c' => '駥', + 'd' => '駤', + 'e' => '駰', + 'f' => '駣', + 'g' => '駪', + 'h' => '駩', + 'i' => '駧', + 'j' => '骹', + 'k' => '骿', + 'l' => '骴', + 'm' => '骻', + 'n' => '髶', + 'o' => '髺', + 'p' => '髹', + 'q' => '髷', + 'r' => '鬳', + 's' => '鮀', + 't' => '鮅', + 'u' => '鮇', + 'v' => '魼', + 'w' => '魾', + 'x' => '魻', + 'y' => '鮂', + 'z' => '鮓', + '{' => '鮒', + '|' => '鮐', + '}' => '魺', + '~' => '鮕', + '' => '魽', + '' => '鮈', + '' => '鴥', + '' => '鴗', + '' => '鴠', + '' => '鴞', + '' => '鴔', + '' => '鴩', + '' => '鴝', + '' => '鴘', + '' => '鴢', + '' => '鴐', + '' => '鴙', + '' => '鴟', + '' => '麈', + '' => '麆', + '' => '麇', + '' => '麮', + '' => '麭', + '' => '黕', + '' => '黖', + '' => '黺', + '' => '鼒', + '' => '鼽', + '' => '儦', + '' => '儥', + '' => '儢', + '' => '儤', + '' => '儠', + '' => '儩', + '' => '勴', + '' => '嚓', + '' => '嚌', + '' => '嚍', + '' => '嚆', + '' => '嚄', + '' => '嚃', + '' => '噾', + '' => '嚂', + '' => '噿', + '' => '嚁', + '' => '壖', + '' => '壔', + '' => '壏', + '' => '壒', + '' => '嬭', + '' => '嬥', + '' => '嬲', + '' => '嬣', + '' => '嬬', + '' => '嬧', + '' => '嬦', + '' => '嬯', + '' => '嬮', + '' => '孻', + '' => '寱', + '' => '寲', + '' => '嶷', + '' => '幬', + '' => '幪', + '' => '徾', + '' => '徻', + '' => '懃', + '' => '憵', + '' => '憼', + '' => '懧', + '' => '懠', + '' => '懥', + '' => '懤', + '' => '懨', + '' => '懞', + '' => '擯', + '' => '擩', + '' => '擣', + '' => '擫', + '' => '擤', + '' => '擨', + '' => '斁', + '' => '斀', + '' => '斶', + '' => '旚', + '' => '曒', + '' => '檍', + '' => '檖', + '' => '檁', + '' => '檥', + '' => '檉', + '' => '檟', + '' => '檛', + '' => '檡', + '' => '檞', + '' => '檇', + '' => '檓', + '' => '檎', + '@' => '檕', + 'A' => '檃', + 'B' => '檨', + 'C' => '檤', + 'D' => '檑', + 'E' => '橿', + 'F' => '檦', + 'G' => '檚', + 'H' => '檅', + 'I' => '檌', + 'J' => '檒', + 'K' => '歛', + 'L' => '殭', + 'M' => '氉', + 'N' => '濌', + 'O' => '澩', + 'P' => '濴', + 'Q' => '濔', + 'R' => '濣', + 'S' => '濜', + 'T' => '濭', + 'U' => '濧', + 'V' => '濦', + 'W' => '濞', + 'X' => '濲', + 'Y' => '濝', + 'Z' => '濢', + '[' => '濨', + '\\' => '燡', + ']' => '燱', + '^' => '燨', + '_' => '燲', + '`' => '燤', + 'a' => '燰', + 'b' => '燢', + 'c' => '獳', + 'd' => '獮', + 'e' => '獯', + 'f' => '璗', + 'g' => '璲', + 'h' => '璫', + 'i' => '璐', + 'j' => '璪', + 'k' => '璭', + 'l' => '璱', + 'm' => '璥', + 'n' => '璯', + 'o' => '甐', + 'p' => '甑', + 'q' => '甒', + 'r' => '甏', + 's' => '疄', + 't' => '癃', + 'u' => '癈', + 'v' => '癉', + 'w' => '癇', + 'x' => '皤', + 'y' => '盩', + 'z' => '瞵', + '{' => '瞫', + '|' => '瞲', + '}' => '瞷', + '~' => '瞶', + '' => '瞴', + '' => '瞱', + '' => '瞨', + '' => '矰', + '' => '磳', + '' => '磽', + '' => '礂', + '' => '磻', + '' => '磼', + '' => '磲', + '' => '礅', + '' => '磹', + '' => '磾', + '' => '礄', + '' => '禫', + '' => '禨', + '' => '穜', + '' => '穛', + '' => '穖', + '' => '穘', + '' => '穔', + '' => '穚', + '' => '窾', + '' => '竀', + '' => '竁', + '' => '簅', + '' => '簏', + '' => '篲', + '' => '簀', + '' => '篿', + '' => '篻', + '' => '簎', + '' => '篴', + '' => '簋', + '' => '篳', + '' => '簂', + '' => '簉', + '' => '簃', + '' => '簁', + '' => '篸', + '' => '篽', + '' => '簆', + '' => '篰', + '' => '篱', + '' => '簐', + '' => '簊', + '' => '糨', + '' => '縭', + '' => '縼', + '' => '繂', + '' => '縳', + '' => '顈', + '' => '縸', + '' => '縪', + '' => '繉', + '' => '繀', + '' => '繇', + '' => '縩', + '' => '繌', + '' => '縰', + '' => '縻', + '' => '縶', + '' => '繄', + '' => '縺', + '' => '罅', + '' => '罿', + '' => '罾', + '' => '罽', + '' => '翴', + '' => '翲', + '' => '耬', + '' => '膻', + '' => '臄', + '' => '臌', + '' => '臊', + '' => '臅', + '' => '臇', + '' => '膼', + '' => '臩', + '' => '艛', + '' => '艚', + '' => '艜', + '' => '薃', + '' => '薀', + '' => '薏', + '' => '薧', + '' => '薕', + '' => '薠', + '' => '薋', + '' => '薣', + '' => '蕻', + '' => '薤', + '' => '薚', + '' => '薞', + '@' => '蕷', + 'A' => '蕼', + 'B' => '薉', + 'C' => '薡', + 'D' => '蕺', + 'E' => '蕸', + 'F' => '蕗', + 'G' => '薎', + 'H' => '薖', + 'I' => '薆', + 'J' => '薍', + 'K' => '薙', + 'L' => '薝', + 'M' => '薁', + 'N' => '薢', + 'O' => '薂', + 'P' => '薈', + 'Q' => '薅', + 'R' => '蕹', + 'S' => '蕶', + 'T' => '薘', + 'U' => '薐', + 'V' => '薟', + 'W' => '虨', + 'X' => '螾', + 'Y' => '螪', + 'Z' => '螭', + '[' => '蟅', + '\\' => '螰', + ']' => '螬', + '^' => '螹', + '_' => '螵', + '`' => '螼', + 'a' => '螮', + 'b' => '蟉', + 'c' => '蟃', + 'd' => '蟂', + 'e' => '蟌', + 'f' => '螷', + 'g' => '螯', + 'h' => '蟄', + 'i' => '蟊', + 'j' => '螴', + 'k' => '螶', + 'l' => '螿', + 'm' => '螸', + 'n' => '螽', + 'o' => '蟞', + 'p' => '螲', + 'q' => '褵', + 'r' => '褳', + 's' => '褼', + 't' => '褾', + 'u' => '襁', + 'v' => '襒', + 'w' => '褷', + 'x' => '襂', + 'y' => '覭', + 'z' => '覯', + '{' => '覮', + '|' => '觲', + '}' => '觳', + '~' => '謞', + '' => '謘', + '' => '謖', + '' => '謑', + '' => '謅', + '' => '謋', + '' => '謢', + '' => '謏', + '' => '謒', + '' => '謕', + '' => '謇', + '' => '謍', + '' => '謈', + '' => '謆', + '' => '謜', + '' => '謓', + '' => '謚', + '' => '豏', + '' => '豰', + '' => '豲', + '' => '豱', + '' => '豯', + '' => '貕', + '' => '貔', + '' => '賹', + '' => '赯', + '' => '蹎', + '' => '蹍', + '' => '蹓', + '' => '蹐', + '' => '蹌', + '' => '蹇', + '' => '轃', + '' => '轀', + '' => '邅', + '' => '遾', + '' => '鄸', + '' => '醚', + '' => '醢', + '' => '醛', + '' => '醙', + '' => '醟', + '' => '醡', + '' => '醝', + '' => '醠', + '' => '鎡', + '' => '鎃', + '' => '鎯', + '' => '鍤', + '' => '鍖', + '' => '鍇', + '' => '鍼', + '' => '鍘', + '' => '鍜', + '' => '鍶', + '' => '鍉', + '' => '鍐', + '' => '鍑', + '' => '鍠', + '' => '鍭', + '' => '鎏', + '' => '鍌', + '' => '鍪', + '' => '鍹', + '' => '鍗', + '' => '鍕', + '' => '鍒', + '' => '鍏', + '' => '鍱', + '' => '鍷', + '' => '鍻', + '' => '鍡', + '' => '鍞', + '' => '鍣', + '' => '鍧', + '' => '鎀', + '' => '鍎', + '' => '鍙', + '' => '闇', + '' => '闀', + '' => '闉', + '' => '闃', + '' => '闅', + '' => '閷', + '' => '隮', + '' => '隰', + '' => '隬', + '' => '霠', + '' => '霟', + '' => '霘', + '' => '霝', + '' => '霙', + '' => '鞚', + '' => '鞡', + '' => '鞜', + '@' => '鞞', + 'A' => '鞝', + 'B' => '韕', + 'C' => '韔', + 'D' => '韱', + 'E' => '顁', + 'F' => '顄', + 'G' => '顊', + 'H' => '顉', + 'I' => '顅', + 'J' => '顃', + 'K' => '餥', + 'L' => '餫', + 'M' => '餬', + 'N' => '餪', + 'O' => '餳', + 'P' => '餲', + 'Q' => '餯', + 'R' => '餭', + 'S' => '餱', + 'T' => '餰', + 'U' => '馘', + 'V' => '馣', + 'W' => '馡', + 'X' => '騂', + 'Y' => '駺', + 'Z' => '駴', + '[' => '駷', + '\\' => '駹', + ']' => '駸', + '^' => '駶', + '_' => '駻', + '`' => '駽', + 'a' => '駾', + 'b' => '駼', + 'c' => '騃', + 'd' => '骾', + 'e' => '髾', + 'f' => '髽', + 'g' => '鬁', + 'h' => '髼', + 'i' => '魈', + 'j' => '鮚', + 'k' => '鮨', + 'l' => '鮞', + 'm' => '鮛', + 'n' => '鮦', + 'o' => '鮡', + 'p' => '鮥', + 'q' => '鮤', + 'r' => '鮆', + 's' => '鮢', + 't' => '鮠', + 'u' => '鮯', + 'v' => '鴳', + 'w' => '鵁', + 'x' => '鵧', + 'y' => '鴶', + 'z' => '鴮', + '{' => '鴯', + '|' => '鴱', + '}' => '鴸', + '~' => '鴰', + '' => '鵅', + '' => '鵂', + '' => '鵃', + '' => '鴾', + '' => '鴷', + '' => '鵀', + '' => '鴽', + '' => '翵', + '' => '鴭', + '' => '麊', + '' => '麉', + '' => '麍', + '' => '麰', + '' => '黈', + '' => '黚', + '' => '黻', + '' => '黿', + '' => '鼤', + '' => '鼣', + '' => '鼢', + '' => '齔', + '' => '龠', + '' => '儱', + '' => '儭', + '' => '儮', + '' => '嚘', + '' => '嚜', + '' => '嚗', + '' => '嚚', + '' => '嚝', + '' => '嚙', + '' => '奰', + '' => '嬼', + '' => '屩', + '' => '屪', + '' => '巀', + '' => '幭', + '' => '幮', + '' => '懘', + '' => '懟', + '' => '懭', + '' => '懮', + '' => '懱', + '' => '懪', + '' => '懰', + '' => '懫', + '' => '懖', + '' => '懩', + '' => '擿', + '' => '攄', + '' => '擽', + '' => '擸', + '' => '攁', + '' => '攃', + '' => '擼', + '' => '斔', + '' => '旛', + '' => '曚', + '' => '曛', + '' => '曘', + '' => '櫅', + '' => '檹', + '' => '檽', + '' => '櫡', + '' => '櫆', + '' => '檺', + '' => '檶', + '' => '檷', + '' => '櫇', + '' => '檴', + '' => '檭', + '' => '歞', + '' => '毉', + '' => '氋', + '' => '瀇', + '' => '瀌', + '' => '瀍', + '' => '瀁', + '' => '瀅', + '' => '瀔', + '' => '瀎', + '' => '濿', + '' => '瀀', + '' => '濻', + '' => '瀦', + '' => '濼', + '' => '濷', + '' => '瀊', + '' => '爁', + '' => '燿', + '' => '燹', + '' => '爃', + '' => '燽', + '' => '獶', + '@' => '璸', + 'A' => '瓀', + 'B' => '璵', + 'C' => '瓁', + 'D' => '璾', + 'E' => '璶', + 'F' => '璻', + 'G' => '瓂', + 'H' => '甔', + 'I' => '甓', + 'J' => '癜', + 'K' => '癤', + 'L' => '癙', + 'M' => '癐', + 'N' => '癓', + 'O' => '癗', + 'P' => '癚', + 'Q' => '皦', + 'R' => '皽', + 'S' => '盬', + 'T' => '矂', + 'U' => '瞺', + 'V' => '磿', + 'W' => '礌', + 'X' => '礓', + 'Y' => '礔', + 'Z' => '礉', + '[' => '礐', + '\\' => '礒', + ']' => '礑', + '^' => '禭', + '_' => '禬', + '`' => '穟', + 'a' => '簜', + 'b' => '簩', + 'c' => '簙', + 'd' => '簠', + 'e' => '簟', + 'f' => '簭', + 'g' => '簝', + 'h' => '簦', + 'i' => '簨', + 'j' => '簢', + 'k' => '簥', + 'l' => '簰', + 'm' => '繜', + 'n' => '繐', + 'o' => '繖', + 'p' => '繣', + 'q' => '繘', + 'r' => '繢', + 's' => '繟', + 't' => '繑', + 'u' => '繠', + 'v' => '繗', + 'w' => '繓', + 'x' => '羵', + 'y' => '羳', + 'z' => '翷', + '{' => '翸', + '|' => '聵', + '}' => '臑', + '~' => '臒', + '' => '臐', + '' => '艟', + '' => '艞', + '' => '薴', + '' => '藆', + '' => '藀', + '' => '藃', + '' => '藂', + '' => '薳', + '' => '薵', + '' => '薽', + '' => '藇', + '' => '藄', + '' => '薿', + '' => '藋', + '' => '藎', + '' => '藈', + '' => '藅', + '' => '薱', + '' => '薶', + '' => '藒', + '' => '蘤', + '' => '薸', + '' => '薷', + '' => '薾', + '' => '虩', + '' => '蟧', + '' => '蟦', + '' => '蟢', + '' => '蟛', + '' => '蟫', + '' => '蟪', + '' => '蟥', + '' => '蟟', + '' => '蟳', + '' => '蟤', + '' => '蟔', + '' => '蟜', + '' => '蟓', + '' => '蟭', + '' => '蟘', + '' => '蟣', + '' => '螤', + '' => '蟗', + '' => '蟙', + '' => '蠁', + '' => '蟴', + '' => '蟨', + '' => '蟝', + '' => '襓', + '' => '襋', + '' => '襏', + '' => '襌', + '' => '襆', + '' => '襐', + '' => '襑', + '' => '襉', + '' => '謪', + '' => '謧', + '' => '謣', + '' => '謳', + '' => '謰', + '' => '謵', + '' => '譇', + '' => '謯', + '' => '謼', + '' => '謾', + '' => '謱', + '' => '謥', + '' => '謷', + '' => '謦', + '' => '謶', + '' => '謮', + '' => '謤', + '' => '謻', + '' => '謽', + '' => '謺', + '' => '豂', + '' => '豵', + '' => '貙', + '' => '貘', + '' => '貗', + '' => '賾', + '' => '贄', + '' => '贂', + '' => '贀', + '' => '蹜', + '' => '蹢', + '' => '蹠', + '' => '蹗', + '' => '蹖', + '' => '蹞', + '' => '蹥', + '' => '蹧', + '@' => '蹛', + 'A' => '蹚', + 'B' => '蹡', + 'C' => '蹝', + 'D' => '蹩', + 'E' => '蹔', + 'F' => '轆', + 'G' => '轇', + 'H' => '轈', + 'I' => '轋', + 'J' => '鄨', + 'K' => '鄺', + 'L' => '鄻', + 'M' => '鄾', + 'N' => '醨', + 'O' => '醥', + 'P' => '醧', + 'Q' => '醯', + 'R' => '醪', + 'S' => '鎵', + 'T' => '鎌', + 'U' => '鎒', + 'V' => '鎷', + 'W' => '鎛', + 'X' => '鎝', + 'Y' => '鎉', + 'Z' => '鎧', + '[' => '鎎', + '\\' => '鎪', + ']' => '鎞', + '^' => '鎦', + '_' => '鎕', + '`' => '鎈', + 'a' => '鎙', + 'b' => '鎟', + 'c' => '鎍', + 'd' => '鎱', + 'e' => '鎑', + 'f' => '鎲', + 'g' => '鎤', + 'h' => '鎨', + 'i' => '鎴', + 'j' => '鎣', + 'k' => '鎥', + 'l' => '闒', + 'm' => '闓', + 'n' => '闑', + 'o' => '隳', + 'p' => '雗', + 'q' => '雚', + 'r' => '巂', + 's' => '雟', + 't' => '雘', + 'u' => '雝', + 'v' => '霣', + 'w' => '霢', + 'x' => '霥', + 'y' => '鞬', + 'z' => '鞮', + '{' => '鞨', + '|' => '鞫', + '}' => '鞤', + '~' => '鞪', + '' => '鞢', + '' => '鞥', + '' => '韗', + '' => '韙', + '' => '韖', + '' => '韘', + '' => '韺', + '' => '顐', + '' => '顑', + '' => '顒', + '' => '颸', + '' => '饁', + '' => '餼', + '' => '餺', + '' => '騏', + '' => '騋', + '' => '騉', + '' => '騍', + '' => '騄', + '' => '騑', + '' => '騊', + '' => '騅', + '' => '騇', + '' => '騆', + '' => '髀', + '' => '髜', + '' => '鬈', + '' => '鬄', + '' => '鬅', + '' => '鬩', + '' => '鬵', + '' => '魊', + '' => '魌', + '' => '魋', + '' => '鯇', + '' => '鯆', + '' => '鯃', + '' => '鮿', + '' => '鯁', + '' => '鮵', + '' => '鮸', + '' => '鯓', + '' => '鮶', + '' => '鯄', + '' => '鮹', + '' => '鮽', + '' => '鵜', + '' => '鵓', + '' => '鵏', + '' => '鵊', + '' => '鵛', + '' => '鵋', + '' => '鵙', + '' => '鵖', + '' => '鵌', + '' => '鵗', + '' => '鵒', + '' => '鵔', + '' => '鵟', + '' => '鵘', + '' => '鵚', + '' => '麎', + '' => '麌', + '' => '黟', + '' => '鼁', + '' => '鼀', + '' => '鼖', + '' => '鼥', + '' => '鼫', + '' => '鼪', + '' => '鼩', + '' => '鼨', + '' => '齌', + '' => '齕', + '' => '儴', + '' => '儵', + '' => '劖', + '' => '勷', + '' => '厴', + '' => '嚫', + '' => '嚭', + '' => '嚦', + '' => '嚧', + '' => '嚪', + '' => '嚬', + '' => '壚', + '' => '壝', + '' => '壛', + '' => '夒', + '' => '嬽', + '' => '嬾', + '' => '嬿', + '' => '巃', + '' => '幰', + '@' => '徿', + 'A' => '懻', + 'B' => '攇', + 'C' => '攐', + 'D' => '攍', + 'E' => '攉', + 'F' => '攌', + 'G' => '攎', + 'H' => '斄', + 'I' => '旞', + 'J' => '旝', + 'K' => '曞', + 'L' => '櫧', + 'M' => '櫠', + 'N' => '櫌', + 'O' => '櫑', + 'P' => '櫙', + 'Q' => '櫋', + 'R' => '櫟', + 'S' => '櫜', + 'T' => '櫐', + 'U' => '櫫', + 'V' => '櫏', + 'W' => '櫍', + 'X' => '櫞', + 'Y' => '歠', + 'Z' => '殰', + '[' => '氌', + '\\' => '瀙', + ']' => '瀧', + '^' => '瀠', + '_' => '瀖', + '`' => '瀫', + 'a' => '瀡', + 'b' => '瀢', + 'c' => '瀣', + 'd' => '瀩', + 'e' => '瀗', + 'f' => '瀤', + 'g' => '瀜', + 'h' => '瀪', + 'i' => '爌', + 'j' => '爊', + 'k' => '爇', + 'l' => '爂', + 'm' => '爅', + 'n' => '犥', + 'o' => '犦', + 'p' => '犤', + 'q' => '犣', + 'r' => '犡', + 's' => '瓋', + 't' => '瓅', + 'u' => '璷', + 'v' => '瓃', + 'w' => '甖', + 'x' => '癠', + 'y' => '矉', + 'z' => '矊', + '{' => '矄', + '|' => '矱', + '}' => '礝', + '~' => '礛', + '' => '礡', + '' => '礜', + '' => '礗', + '' => '礞', + '' => '禰', + '' => '穧', + '' => '穨', + '' => '簳', + '' => '簼', + '' => '簹', + '' => '簬', + '' => '簻', + '' => '糬', + '' => '糪', + '' => '繶', + '' => '繵', + '' => '繸', + '' => '繰', + '' => '繷', + '' => '繯', + '' => '繺', + '' => '繲', + '' => '繴', + '' => '繨', + '' => '罋', + '' => '罊', + '' => '羃', + '' => '羆', + '' => '羷', + '' => '翽', + '' => '翾', + '' => '聸', + '' => '臗', + '' => '臕', + '' => '艤', + '' => '艡', + '' => '艣', + '' => '藫', + '' => '藱', + '' => '藭', + '' => '藙', + '' => '藡', + '' => '藨', + '' => '藚', + '' => '藗', + '' => '藬', + '' => '藲', + '' => '藸', + '' => '藘', + '' => '藟', + '' => '藣', + '' => '藜', + '' => '藑', + '' => '藰', + '' => '藦', + '' => '藯', + '' => '藞', + '' => '藢', + '' => '蠀', + '' => '蟺', + '' => '蠃', + '' => '蟶', + '' => '蟷', + '' => '蠉', + '' => '蠌', + '' => '蠋', + '' => '蠆', + '' => '蟼', + '' => '蠈', + '' => '蟿', + '' => '蠊', + '' => '蠂', + '' => '襢', + '' => '襚', + '' => '襛', + '' => '襗', + '' => '襡', + '' => '襜', + '' => '襘', + '' => '襝', + '' => '襙', + '' => '覈', + '' => '覷', + '' => '覶', + '' => '觶', + '' => '譐', + '' => '譈', + '' => '譊', + '' => '譀', + '' => '譓', + '' => '譖', + '' => '譔', + '' => '譋', + '' => '譕', + '@' => '譑', + 'A' => '譂', + 'B' => '譒', + 'C' => '譗', + 'D' => '豃', + 'E' => '豷', + 'F' => '豶', + 'G' => '貚', + 'H' => '贆', + 'I' => '贇', + 'J' => '贉', + 'K' => '趬', + 'L' => '趪', + 'M' => '趭', + 'N' => '趫', + 'O' => '蹭', + 'P' => '蹸', + 'Q' => '蹳', + 'R' => '蹪', + 'S' => '蹯', + 'T' => '蹻', + 'U' => '軂', + 'V' => '轒', + 'W' => '轑', + 'X' => '轏', + 'Y' => '轐', + 'Z' => '轓', + '[' => '辴', + '\\' => '酀', + ']' => '鄿', + '^' => '醰', + '_' => '醭', + '`' => '鏞', + 'a' => '鏇', + 'b' => '鏏', + 'c' => '鏂', + 'd' => '鏚', + 'e' => '鏐', + 'f' => '鏹', + 'g' => '鏬', + 'h' => '鏌', + 'i' => '鏙', + 'j' => '鎩', + 'k' => '鏦', + 'l' => '鏊', + 'm' => '鏔', + 'n' => '鏮', + 'o' => '鏣', + 'p' => '鏕', + 'q' => '鏄', + 'r' => '鏎', + 's' => '鏀', + 't' => '鏒', + 'u' => '鏧', + 'v' => '镽', + 'w' => '闚', + 'x' => '闛', + 'y' => '雡', + 'z' => '霩', + '{' => '霫', + '|' => '霬', + '}' => '霨', + '~' => '霦', + '' => '鞳', + '' => '鞷', + '' => '鞶', + '' => '韝', + '' => '韞', + '' => '韟', + '' => '顜', + '' => '顙', + '' => '顝', + '' => '顗', + '' => '颿', + '' => '颽', + '' => '颻', + '' => '颾', + '' => '饈', + '' => '饇', + '' => '饃', + '' => '馦', + '' => '馧', + '' => '騚', + '' => '騕', + '' => '騥', + '' => '騝', + '' => '騤', + '' => '騛', + '' => '騢', + '' => '騠', + '' => '騧', + '' => '騣', + '' => '騞', + '' => '騜', + '' => '騔', + '' => '髂', + '' => '鬋', + '' => '鬊', + '' => '鬎', + '' => '鬌', + '' => '鬷', + '' => '鯪', + '' => '鯫', + '' => '鯠', + '' => '鯞', + '' => '鯤', + '' => '鯦', + '' => '鯢', + '' => '鯰', + '' => '鯔', + '' => '鯗', + '' => '鯬', + '' => '鯜', + '' => '鯙', + '' => '鯥', + '' => '鯕', + '' => '鯡', + '' => '鯚', + '' => '鵷', + '' => '鶁', + '' => '鶊', + '' => '鶄', + '' => '鶈', + '' => '鵱', + '' => '鶀', + '' => '鵸', + '' => '鶆', + '' => '鶋', + '' => '鶌', + '' => '鵽', + '' => '鵫', + '' => '鵴', + '' => '鵵', + '' => '鵰', + '' => '鵩', + '' => '鶅', + '' => '鵳', + '' => '鵻', + '' => '鶂', + '' => '鵯', + '' => '鵹', + '' => '鵿', + '' => '鶇', + '' => '鵨', + '' => '麔', + '' => '麑', + '' => '黀', + '' => '黼', + '' => '鼭', + '' => '齀', + '' => '齁', + '' => '齍', + '' => '齖', + '' => '齗', + '' => '齘', + '' => '匷', + '' => '嚲', + '@' => '嚵', + 'A' => '嚳', + 'B' => '壣', + 'C' => '孅', + 'D' => '巆', + 'E' => '巇', + 'F' => '廮', + 'G' => '廯', + 'H' => '忀', + 'I' => '忁', + 'J' => '懹', + 'K' => '攗', + 'L' => '攖', + 'M' => '攕', + 'N' => '攓', + 'O' => '旟', + 'P' => '曨', + 'Q' => '曣', + 'R' => '曤', + 'S' => '櫳', + 'T' => '櫰', + 'U' => '櫪', + 'V' => '櫨', + 'W' => '櫹', + 'X' => '櫱', + 'Y' => '櫮', + 'Z' => '櫯', + '[' => '瀼', + '\\' => '瀵', + ']' => '瀯', + '^' => '瀷', + '_' => '瀴', + '`' => '瀱', + 'a' => '灂', + 'b' => '瀸', + 'c' => '瀿', + 'd' => '瀺', + 'e' => '瀹', + 'f' => '灀', + 'g' => '瀻', + 'h' => '瀳', + 'i' => '灁', + 'j' => '爓', + 'k' => '爔', + 'l' => '犨', + 'm' => '獽', + 'n' => '獼', + 'o' => '璺', + 'p' => '皫', + 'q' => '皪', + 'r' => '皾', + 's' => '盭', + 't' => '矌', + 'u' => '矎', + 'v' => '矏', + 'w' => '矍', + 'x' => '矲', + 'y' => '礥', + 'z' => '礣', + '{' => '礧', + '|' => '礨', + '}' => '礤', + '~' => '礩', + '' => '禲', + '' => '穮', + '' => '穬', + '' => '穭', + '' => '竷', + '' => '籉', + '' => '籈', + '' => '籊', + '' => '籇', + '' => '籅', + '' => '糮', + '' => '繻', + '' => '繾', + '' => '纁', + '' => '纀', + '' => '羺', + '' => '翿', + '' => '聹', + '' => '臛', + '' => '臙', + '' => '舋', + '' => '艨', + '' => '艩', + '' => '蘢', + '' => '藿', + '' => '蘁', + '' => '藾', + '' => '蘛', + '' => '蘀', + '' => '藶', + '' => '蘄', + '' => '蘉', + '' => '蘅', + '' => '蘌', + '' => '藽', + '' => '蠙', + '' => '蠐', + '' => '蠑', + '' => '蠗', + '' => '蠓', + '' => '蠖', + '' => '襣', + '' => '襦', + '' => '覹', + '' => '觷', + '' => '譠', + '' => '譪', + '' => '譝', + '' => '譨', + '' => '譣', + '' => '譥', + '' => '譧', + '' => '譭', + '' => '趮', + '' => '躆', + '' => '躈', + '' => '躄', + '' => '轙', + '' => '轖', + '' => '轗', + '' => '轕', + '' => '轘', + '' => '轚', + '' => '邍', + '' => '酃', + '' => '酁', + '' => '醷', + '' => '醵', + '' => '醲', + '' => '醳', + '' => '鐋', + '' => '鐓', + '' => '鏻', + '' => '鐠', + '' => '鐏', + '' => '鐔', + '' => '鏾', + '' => '鐕', + '' => '鐐', + '' => '鐨', + '' => '鐙', + '' => '鐍', + '' => '鏵', + '' => '鐀', + '' => '鏷', + '' => '鐇', + '' => '鐎', + '' => '鐖', + '' => '鐒', + '' => '鏺', + '' => '鐉', + '' => '鏸', + '' => '鐊', + '' => '鏿', + '@' => '鏼', + 'A' => '鐌', + 'B' => '鏶', + 'C' => '鐑', + 'D' => '鐆', + 'E' => '闞', + 'F' => '闠', + 'G' => '闟', + 'H' => '霮', + 'I' => '霯', + 'J' => '鞹', + 'K' => '鞻', + 'L' => '韽', + 'M' => '韾', + 'N' => '顠', + 'O' => '顢', + 'P' => '顣', + 'Q' => '顟', + 'R' => '飁', + 'S' => '飂', + 'T' => '饐', + 'U' => '饎', + 'V' => '饙', + 'W' => '饌', + 'X' => '饋', + 'Y' => '饓', + 'Z' => '騲', + '[' => '騴', + '\\' => '騱', + ']' => '騬', + '^' => '騪', + '_' => '騶', + '`' => '騩', + 'a' => '騮', + 'b' => '騸', + 'c' => '騭', + 'd' => '髇', + 'e' => '髊', + 'f' => '髆', + 'g' => '鬐', + 'h' => '鬒', + 'i' => '鬑', + 'j' => '鰋', + 'k' => '鰈', + 'l' => '鯷', + 'm' => '鰅', + 'n' => '鰒', + 'o' => '鯸', + 'p' => '鱀', + 'q' => '鰇', + 'r' => '鰎', + 's' => '鰆', + 't' => '鰗', + 'u' => '鰔', + 'v' => '鰉', + 'w' => '鶟', + 'x' => '鶙', + 'y' => '鶤', + 'z' => '鶝', + '{' => '鶒', + '|' => '鶘', + '}' => '鶐', + '~' => '鶛', + '' => '鶠', + '' => '鶔', + '' => '鶜', + '' => '鶪', + '' => '鶗', + '' => '鶡', + '' => '鶚', + '' => '鶢', + '' => '鶨', + '' => '鶞', + '' => '鶣', + '' => '鶿', + '' => '鶩', + '' => '鶖', + '' => '鶦', + '' => '鶧', + '' => '麙', + '' => '麛', + '' => '麚', + '' => '黥', + '' => '黤', + '' => '黧', + '' => '黦', + '' => '鼰', + '' => '鼮', + '' => '齛', + '' => '齠', + '' => '齞', + '' => '齝', + '' => '齙', + '' => '龑', + '' => '儺', + '' => '儹', + '' => '劘', + '' => '劗', + '' => '囃', + '' => '嚽', + '' => '嚾', + '' => '孈', + '' => '孇', + '' => '巋', + '' => '巏', + '' => '廱', + '' => '懽', + '' => '攛', + '' => '欂', + '' => '櫼', + '' => '欃', + '' => '櫸', + '' => '欀', + '' => '灃', + '' => '灄', + '' => '灊', + '' => '灈', + '' => '灉', + '' => '灅', + '' => '灆', + '' => '爝', + '' => '爚', + '' => '爙', + '' => '獾', + '' => '甗', + '' => '癪', + '' => '矐', + '' => '礭', + '' => '礱', + '' => '礯', + '' => '籔', + '' => '籓', + '' => '糲', + '' => '纊', + '' => '纇', + '' => '纈', + '' => '纋', + '' => '纆', + '' => '纍', + '' => '罍', + '' => '羻', + '' => '耰', + '' => '臝', + '' => '蘘', + '' => '蘪', + '' => '蘦', + '' => '蘟', + '' => '蘣', + '' => '蘜', + '' => '蘙', + '' => '蘧', + '' => '蘮', + '' => '蘡', + '' => '蘠', + '' => '蘩', + '' => '蘞', + '' => '蘥', + '@' => '蠩', + 'A' => '蠝', + 'B' => '蠛', + 'C' => '蠠', + 'D' => '蠤', + 'E' => '蠜', + 'F' => '蠫', + 'G' => '衊', + 'H' => '襭', + 'I' => '襩', + 'J' => '襮', + 'K' => '襫', + 'L' => '觺', + 'M' => '譹', + 'N' => '譸', + 'O' => '譅', + 'P' => '譺', + 'Q' => '譻', + 'R' => '贐', + 'S' => '贔', + 'T' => '趯', + 'U' => '躎', + 'V' => '躌', + 'W' => '轞', + 'X' => '轛', + 'Y' => '轝', + 'Z' => '酆', + '[' => '酄', + '\\' => '酅', + ']' => '醹', + '^' => '鐿', + '_' => '鐻', + '`' => '鐶', + 'a' => '鐩', + 'b' => '鐽', + 'c' => '鐼', + 'd' => '鐰', + 'e' => '鐹', + 'f' => '鐪', + 'g' => '鐷', + 'h' => '鐬', + 'i' => '鑀', + 'j' => '鐱', + 'k' => '闥', + 'l' => '闤', + 'm' => '闣', + 'n' => '霵', + 'o' => '霺', + 'p' => '鞿', + 'q' => '韡', + 'r' => '顤', + 's' => '飉', + 't' => '飆', + 'u' => '飀', + 'v' => '饘', + 'w' => '饖', + 'x' => '騹', + 'y' => '騽', + 'z' => '驆', + '{' => '驄', + '|' => '驂', + '}' => '驁', + '~' => '騺', + '' => '騿', + '' => '髍', + '' => '鬕', + '' => '鬗', + '' => '鬘', + '' => '鬖', + '' => '鬺', + '' => '魒', + '' => '鰫', + '' => '鰝', + '' => '鰜', + '' => '鰬', + '' => '鰣', + '' => '鰨', + '' => '鰩', + '' => '鰤', + '' => '鰡', + '' => '鶷', + '' => '鶶', + '' => '鶼', + '' => '鷁', + '' => '鷇', + '' => '鷊', + '' => '鷏', + '' => '鶾', + '' => '鷅', + '' => '鷃', + '' => '鶻', + '' => '鶵', + '' => '鷎', + '' => '鶹', + '' => '鶺', + '' => '鶬', + '' => '鷈', + '' => '鶱', + '' => '鶭', + '' => '鷌', + '' => '鶳', + '' => '鷍', + '' => '鶲', + '' => '鹺', + '' => '麜', + '' => '黫', + '' => '黮', + '' => '黭', + '' => '鼛', + '' => '鼘', + '' => '鼚', + '' => '鼱', + '' => '齎', + '' => '齥', + '' => '齤', + '' => '龒', + '' => '亹', + '' => '囆', + '' => '囅', + '' => '囋', + '' => '奱', + '' => '孋', + '' => '孌', + '' => '巕', + '' => '巑', + '' => '廲', + '' => '攡', + '' => '攠', + '' => '攦', + '' => '攢', + '' => '欋', + '' => '欈', + '' => '欉', + '' => '氍', + '' => '灕', + '' => '灖', + '' => '灗', + '' => '灒', + '' => '爞', + '' => '爟', + '' => '犩', + '' => '獿', + '' => '瓘', + '' => '瓕', + '' => '瓙', + '' => '瓗', + '' => '癭', + '' => '皭', + '' => '礵', + '' => '禴', + '' => '穰', + '' => '穱', + '' => '籗', + '' => '籜', + '' => '籙', + '' => '籛', + '' => '籚', + '@' => '糴', + 'A' => '糱', + 'B' => '纑', + 'C' => '罏', + 'D' => '羇', + 'E' => '臞', + 'F' => '艫', + 'G' => '蘴', + 'H' => '蘵', + 'I' => '蘳', + 'J' => '蘬', + 'K' => '蘲', + 'L' => '蘶', + 'M' => '蠬', + 'N' => '蠨', + 'O' => '蠦', + 'P' => '蠪', + 'Q' => '蠥', + 'R' => '襱', + 'S' => '覿', + 'T' => '覾', + 'U' => '觻', + 'V' => '譾', + 'W' => '讄', + 'X' => '讂', + 'Y' => '讆', + 'Z' => '讅', + '[' => '譿', + '\\' => '贕', + ']' => '躕', + '^' => '躔', + '_' => '躚', + '`' => '躒', + 'a' => '躐', + 'b' => '躖', + 'c' => '躗', + 'd' => '轠', + 'e' => '轢', + 'f' => '酇', + 'g' => '鑌', + 'h' => '鑐', + 'i' => '鑊', + 'j' => '鑋', + 'k' => '鑏', + 'l' => '鑇', + 'm' => '鑅', + 'n' => '鑈', + 'o' => '鑉', + 'p' => '鑆', + 'q' => '霿', + 'r' => '韣', + 's' => '顪', + 't' => '顩', + 'u' => '飋', + 'v' => '饔', + 'w' => '饛', + 'x' => '驎', + 'y' => '驓', + 'z' => '驔', + '{' => '驌', + '|' => '驏', + '}' => '驈', + '~' => '驊', + '' => '驉', + '' => '驒', + '' => '驐', + '' => '髐', + '' => '鬙', + '' => '鬫', + '' => '鬻', + '' => '魖', + '' => '魕', + '' => '鱆', + '' => '鱈', + '' => '鰿', + '' => '鱄', + '' => '鰹', + '' => '鰳', + '' => '鱁', + '' => '鰼', + '' => '鰷', + '' => '鰴', + '' => '鰲', + '' => '鰽', + '' => '鰶', + '' => '鷛', + '' => '鷒', + '' => '鷞', + '' => '鷚', + '' => '鷋', + '' => '鷐', + '' => '鷜', + '' => '鷑', + '' => '鷟', + '' => '鷩', + '' => '鷙', + '' => '鷘', + '' => '鷖', + '' => '鷵', + '' => '鷕', + '' => '鷝', + '' => '麶', + '' => '黰', + '' => '鼵', + '' => '鼳', + '' => '鼲', + '' => '齂', + '' => '齫', + '' => '龕', + '' => '龢', + '' => '儽', + '' => '劙', + '' => '壨', + '' => '壧', + '' => '奲', + '' => '孍', + '' => '巘', + '' => '蠯', + '' => '彏', + '' => '戁', + '' => '戃', + '' => '戄', + '' => '攩', + '' => '攥', + '' => '斖', + '' => '曫', + '' => '欑', + '' => '欒', + '' => '欏', + '' => '毊', + '' => '灛', + '' => '灚', + '' => '爢', + '' => '玂', + '' => '玁', + '' => '玃', + '' => '癰', + '' => '矔', + '' => '籧', + '' => '籦', + '' => '纕', + '' => '艬', + '' => '蘺', + '' => '虀', + '' => '蘹', + '' => '蘼', + '' => '蘱', + '' => '蘻', + '' => '蘾', + '' => '蠰', + '' => '蠲', + '' => '蠮', + '' => '蠳', + '' => '襶', + '' => '襴', + '' => '襳', + '' => '觾', + '@' => '讌', + 'A' => '讎', + 'B' => '讋', + 'C' => '讈', + 'D' => '豅', + 'E' => '贙', + 'F' => '躘', + 'G' => '轤', + 'H' => '轣', + 'I' => '醼', + 'J' => '鑢', + 'K' => '鑕', + 'L' => '鑝', + 'M' => '鑗', + 'N' => '鑞', + 'O' => '韄', + 'P' => '韅', + 'Q' => '頀', + 'R' => '驖', + 'S' => '驙', + 'T' => '鬞', + 'U' => '鬟', + 'V' => '鬠', + 'W' => '鱒', + 'X' => '鱘', + 'Y' => '鱐', + 'Z' => '鱊', + '[' => '鱍', + '\\' => '鱋', + ']' => '鱕', + '^' => '鱙', + '_' => '鱌', + '`' => '鱎', + 'a' => '鷻', + 'b' => '鷷', + 'c' => '鷯', + 'd' => '鷣', + 'e' => '鷫', + 'f' => '鷸', + 'g' => '鷤', + 'h' => '鷶', + 'i' => '鷡', + 'j' => '鷮', + 'k' => '鷦', + 'l' => '鷲', + 'm' => '鷰', + 'n' => '鷢', + 'o' => '鷬', + 'p' => '鷴', + 'q' => '鷳', + 'r' => '鷨', + 's' => '鷭', + 't' => '黂', + 'u' => '黐', + 'v' => '黲', + 'w' => '黳', + 'x' => '鼆', + 'y' => '鼜', + 'z' => '鼸', + '{' => '鼷', + '|' => '鼶', + '}' => '齃', + '~' => '齏', + '' => '齱', + '' => '齰', + '' => '齮', + '' => '齯', + '' => '囓', + '' => '囍', + '' => '孎', + '' => '屭', + '' => '攭', + '' => '曭', + '' => '曮', + '' => '欓', + '' => '灟', + '' => '灡', + '' => '灝', + '' => '灠', + '' => '爣', + '' => '瓛', + '' => '瓥', + '' => '矕', + '' => '礸', + '' => '禷', + '' => '禶', + '' => '籪', + '' => '纗', + '' => '羉', + '' => '艭', + '' => '虃', + '' => '蠸', + '' => '蠷', + '' => '蠵', + '' => '衋', + '' => '讔', + '' => '讕', + '' => '躞', + '' => '躟', + '' => '躠', + '' => '躝', + '' => '醾', + '' => '醽', + '' => '釂', + '' => '鑫', + '' => '鑨', + '' => '鑩', + '' => '雥', + '' => '靆', + '' => '靃', + '' => '靇', + '' => '韇', + '' => '韥', + '' => '驞', + '' => '髕', + '' => '魙', + '' => '鱣', + '' => '鱧', + '' => '鱦', + '' => '鱢', + '' => '鱞', + '' => '鱠', + '' => '鸂', + '' => '鷾', + '' => '鸇', + '' => '鸃', + '' => '鸆', + '' => '鸅', + '' => '鸀', + '' => '鸁', + '' => '鸉', + '' => '鷿', + '' => '鷽', + '' => '鸄', + '' => '麠', + '' => '鼞', + '' => '齆', + '' => '齴', + '' => '齵', + '' => '齶', + '' => '囔', + '' => '攮', + '' => '斸', + '' => '欘', + '' => '欙', + '' => '欗', + '' => '欚', + '' => '灢', + '' => '爦', + '' => '犪', + '' => '矘', + '' => '矙', + '' => '礹', + '' => '籩', + '' => '籫', + '' => '糶', + '' => '纚', + '@' => '纘', + 'A' => '纛', + 'B' => '纙', + 'C' => '臠', + 'D' => '臡', + 'E' => '虆', + 'F' => '虇', + 'G' => '虈', + 'H' => '襹', + 'I' => '襺', + 'J' => '襼', + 'K' => '襻', + 'L' => '觿', + 'M' => '讘', + 'N' => '讙', + 'O' => '躥', + 'P' => '躤', + 'Q' => '躣', + 'R' => '鑮', + 'S' => '鑭', + 'T' => '鑯', + 'U' => '鑱', + 'V' => '鑳', + 'W' => '靉', + 'X' => '顲', + 'Y' => '饟', + 'Z' => '鱨', + '[' => '鱮', + '\\' => '鱭', + ']' => '鸋', + '^' => '鸍', + '_' => '鸐', + '`' => '鸏', + 'a' => '鸒', + 'b' => '鸑', + 'c' => '麡', + 'd' => '黵', + 'e' => '鼉', + 'f' => '齇', + 'g' => '齸', + 'h' => '齻', + 'i' => '齺', + 'j' => '齹', + 'k' => '圞', + 'l' => '灦', + 'm' => '籯', + 'n' => '蠼', + 'o' => '趲', + 'p' => '躦', + 'q' => '釃', + 'r' => '鑴', + 's' => '鑸', + 't' => '鑶', + 'u' => '鑵', + 'v' => '驠', + 'w' => '鱴', + 'x' => '鱳', + 'y' => '鱱', + 'z' => '鱵', + '{' => '鸔', + '|' => '鸓', + '}' => '黶', + '~' => '鼊', + '' => '龤', + '' => '灨', + '' => '灥', + '' => '糷', + '' => '虪', + '' => '蠾', + '' => '蠽', + '' => '蠿', + '' => '讞', + '' => '貜', + '' => '躩', + '' => '軉', + '' => '靋', + '' => '顳', + '' => '顴', + '' => '飌', + '' => '饡', + '' => '馫', + '' => '驤', + '' => '驦', + '' => '驧', + '' => '鬤', + '' => '鸕', + '' => '鸗', + '' => '齈', + '' => '戇', + '' => '欞', + '' => '爧', + '' => '虌', + '' => '躨', + '' => '钂', + '' => '钀', + '' => '钁', + '' => '驩', + '' => '驨', + '' => '鬮', + '' => '鸙', + '' => '爩', + '' => '虋', + '' => '讟', + '' => '钃', + '' => '鱹', + '' => '麷', + '' => '癵', + '' => '驫', + '' => '鱺', + '' => '鸝', + '' => '灩', + '' => '灪', + '' => '麤', + '' => '齾', + '' => '齉', + '' => '龘', +); + +$result =& $data; +unset($data); + +return $result; diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp037.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp037.php new file mode 100644 index 0000000..a014e4b Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp037.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1006.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1006.php new file mode 100644 index 0000000..2b5e7be Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1006.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1026.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1026.php new file mode 100644 index 0000000..aba455b Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp1026.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp424.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp424.php new file mode 100644 index 0000000..e8e2370 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp424.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp437.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp437.php new file mode 100644 index 0000000..e3ebb45 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp437.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp500.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp500.php new file mode 100644 index 0000000..3771c8f Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp500.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp737.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp737.php new file mode 100644 index 0000000..2d67d33 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp737.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp775.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp775.php new file mode 100644 index 0000000..1fbc4cd Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp775.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp850.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp850.php new file mode 100644 index 0000000..0b314c8 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp850.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp852.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp852.php new file mode 100644 index 0000000..f8c318c Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp852.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp855.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp855.php new file mode 100644 index 0000000..48440ba Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp855.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp856.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp856.php new file mode 100644 index 0000000..c9cac0c Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp856.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp857.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp857.php new file mode 100644 index 0000000..3e7770a Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp857.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp860.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp860.php new file mode 100644 index 0000000..2a52d47 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp860.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp861.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp861.php new file mode 100644 index 0000000..4ba6573 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp861.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp862.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp862.php new file mode 100644 index 0000000..d2a29a2 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp862.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp863.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp863.php new file mode 100644 index 0000000..1f36b9a Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp863.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp864.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp864.php new file mode 100644 index 0000000..953e463 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp864.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp865.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp865.php new file mode 100644 index 0000000..2668bcc Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp865.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp866.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp866.php new file mode 100644 index 0000000..a7b47f8 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp866.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp869.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp869.php new file mode 100644 index 0000000..0f04054 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp869.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp874.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp874.php new file mode 100644 index 0000000..4799456 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp874.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp875.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp875.php new file mode 100644 index 0000000..8561645 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp875.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp932.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp932.php new file mode 100644 index 0000000..0bf828f Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp932.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp936.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp936.php new file mode 100644 index 0000000..a593d05 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp936.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp949.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp949.php new file mode 100644 index 0000000..d4e99f1 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp949.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.cp950.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp950.php new file mode 100644 index 0000000..267b190 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.cp950.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-1.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-1.php new file mode 100644 index 0000000..d7a217c Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-1.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-10.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-10.php new file mode 100644 index 0000000..d60f647 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-10.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-11.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-11.php new file mode 100644 index 0000000..d69220b Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-11.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-13.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-13.php new file mode 100644 index 0000000..838783f Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-13.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-14.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-14.php new file mode 100644 index 0000000..65a48ee Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-14.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-15.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-15.php new file mode 100644 index 0000000..42e50e0 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-15.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-16.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-16.php new file mode 100644 index 0000000..46758a6 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-16.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-2.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-2.php new file mode 100644 index 0000000..5f23f51 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-2.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-3.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-3.php new file mode 100644 index 0000000..b31bb83 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-3.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-4.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-4.php new file mode 100644 index 0000000..9cbf9f3 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-4.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-5.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-5.php new file mode 100644 index 0000000..fd03882 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-5.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-6.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-6.php new file mode 100644 index 0000000..ed6f72f Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-6.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-7.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-7.php new file mode 100644 index 0000000..cf723ac Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-7.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-8.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-8.php new file mode 100644 index 0000000..c978731 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-8.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-9.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-9.php new file mode 100644 index 0000000..2a3e36a Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.iso-8859-9.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-r.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-r.php new file mode 100644 index 0000000..d83c212 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-r.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-u.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-u.php new file mode 100644 index 0000000..dbbf96b Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.koi8-u.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.us-ascii.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.us-ascii.php new file mode 100644 index 0000000..94a93b2 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.us-ascii.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1250.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1250.php new file mode 100644 index 0000000..d1d5e6f Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1250.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1251.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1251.php new file mode 100644 index 0000000..f422a71 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1251.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1252.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1252.php new file mode 100644 index 0000000..ba6d203 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1252.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1253.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1253.php new file mode 100644 index 0000000..c04dc8f Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1253.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1254.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1254.php new file mode 100644 index 0000000..1cfadcf Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1254.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1255.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1255.php new file mode 100644 index 0000000..f73cbb6 Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1255.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1256.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1256.php new file mode 100644 index 0000000..953704f Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1256.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1257.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1257.php new file mode 100644 index 0000000..78580ec Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1257.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1258.php b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1258.php new file mode 100644 index 0000000..de1609d Binary files /dev/null and b/vendor/symfony/polyfill-iconv/Resources/charset/from.windows-1258.php differ diff --git a/vendor/symfony/polyfill-iconv/Resources/charset/translit.php b/vendor/symfony/polyfill-iconv/Resources/charset/translit.php new file mode 100644 index 0000000..829ea12 --- /dev/null +++ b/vendor/symfony/polyfill-iconv/Resources/charset/translit.php @@ -0,0 +1,3969 @@ + 'μ', + '¼' => ' 1⁄4 ', + '½' => ' 1⁄2 ', + '¾' => ' 3⁄4 ', + 'IJ' => 'IJ', + 'ij' => 'ij', + 'Ŀ' => 'L·', + 'ŀ' => 'l·', + 'ʼn' => 'ʼn', + 'ſ' => 's', + 'DŽ' => 'DŽ', + 'Dž' => 'Dž', + 'dž' => 'dž', + 'LJ' => 'LJ', + 'Lj' => 'Lj', + 'lj' => 'lj', + 'NJ' => 'NJ', + 'Nj' => 'Nj', + 'nj' => 'nj', + 'DZ' => 'DZ', + 'Dz' => 'Dz', + 'dz' => 'dz', + 'ϐ' => 'β', + 'ϑ' => 'θ', + 'ϒ' => 'Υ', + 'ϕ' => 'φ', + 'ϖ' => 'π', + 'ϰ' => 'κ', + 'ϱ' => 'ρ', + 'ϲ' => 'ς', + 'ϴ' => 'Θ', + 'ϵ' => 'ε', + 'Ϲ' => 'Σ', + 'և' => 'եւ', + 'ٵ' => 'اٴ', + 'ٶ' => 'وٴ', + 'ٷ' => 'ۇٴ', + 'ٸ' => 'يٴ', + 'ำ' => 'ํา', + 'ຳ' => 'ໍາ', + 'ໜ' => 'ຫນ', + 'ໝ' => 'ຫມ', + 'ཷ' => 'ྲཱྀ', + 'ཹ' => 'ླཱྀ', + 'ẚ' => 'aʾ', + '․' => '.', + '‥' => '..', + '…' => '...', + '″' => '′′', + '‴' => '′′′', + '‶' => '‵‵', + '‷' => '‵‵‵', + '‼' => '!!', + '⁇' => '??', + '⁈' => '?!', + '⁉' => '!?', + '⁗' => '′′′′', + '₨' => 'Rs', + '℀' => 'a/c', + '℁' => 'a/s', + 'ℂ' => 'C', + '℃' => '°C', + '℅' => 'c/o', + '℆' => 'c/u', + 'ℇ' => 'Ɛ', + '℉' => '°F', + 'ℊ' => 'g', + 'ℋ' => 'H', + 'ℌ' => 'H', + 'ℍ' => 'H', + 'ℎ' => 'h', + 'ℏ' => 'ħ', + 'ℐ' => 'I', + 'ℑ' => 'I', + 'ℒ' => 'L', + 'ℓ' => 'l', + 'ℕ' => 'N', + '№' => 'No', + 'ℙ' => 'P', + 'ℚ' => 'Q', + 'ℛ' => 'R', + 'ℜ' => 'R', + 'ℝ' => 'R', + '℡' => 'TEL', + 'ℤ' => 'Z', + 'ℨ' => 'Z', + 'ℬ' => 'B', + 'ℭ' => 'C', + 'ℯ' => 'e', + 'ℰ' => 'E', + 'ℱ' => 'F', + 'ℳ' => 'M', + 'ℴ' => 'o', + 'ℵ' => 'א', + 'ℶ' => 'ב', + 'ℷ' => 'ג', + 'ℸ' => 'ד', + 'ℹ' => 'i', + '℻' => 'FAX', + 'ℼ' => 'π', + 'ℽ' => 'γ', + 'ℾ' => 'Γ', + 'ℿ' => 'Π', + '⅀' => '∑', + 'ⅅ' => 'D', + 'ⅆ' => 'd', + 'ⅇ' => 'e', + 'ⅈ' => 'i', + 'ⅉ' => 'j', + '⅐' => ' 1⁄7 ', + '⅑' => ' 1⁄9 ', + '⅒' => ' 1⁄10 ', + '⅓' => ' 1⁄3 ', + '⅔' => ' 2⁄3 ', + '⅕' => ' 1⁄5 ', + '⅖' => ' 2⁄5 ', + '⅗' => ' 3⁄5 ', + '⅘' => ' 4⁄5 ', + '⅙' => ' 1⁄6 ', + '⅚' => ' 5⁄6 ', + '⅛' => ' 1⁄8 ', + '⅜' => ' 3⁄8 ', + '⅝' => ' 5⁄8 ', + '⅞' => ' 7⁄8 ', + '⅟' => ' 1⁄ ', + 'Ⅰ' => 'I', + 'Ⅱ' => 'II', + 'Ⅲ' => 'III', + 'Ⅳ' => 'IV', + 'Ⅴ' => 'V', + 'Ⅵ' => 'VI', + 'Ⅶ' => 'VII', + 'Ⅷ' => 'VIII', + 'Ⅸ' => 'IX', + 'Ⅹ' => 'X', + 'Ⅺ' => 'XI', + 'Ⅻ' => 'XII', + 'Ⅼ' => 'L', + 'Ⅽ' => 'C', + 'Ⅾ' => 'D', + 'Ⅿ' => 'M', + 'ⅰ' => 'i', + 'ⅱ' => 'ii', + 'ⅲ' => 'iii', + 'ⅳ' => 'iv', + 'ⅴ' => 'v', + 'ⅵ' => 'vi', + 'ⅶ' => 'vii', + 'ⅷ' => 'viii', + 'ⅸ' => 'ix', + 'ⅹ' => 'x', + 'ⅺ' => 'xi', + 'ⅻ' => 'xii', + 'ⅼ' => 'l', + 'ⅽ' => 'c', + 'ⅾ' => 'd', + 'ⅿ' => 'm', + '↉' => ' 0⁄3 ', + '∬' => '∫∫', + '∭' => '∫∫∫', + '∯' => '∮∮', + '∰' => '∮∮∮', + '①' => '(1)', + '②' => '(2)', + '③' => '(3)', + '④' => '(4)', + '⑤' => '(5)', + '⑥' => '(6)', + '⑦' => '(7)', + '⑧' => '(8)', + '⑨' => '(9)', + '⑩' => '(10)', + '⑪' => '(11)', + '⑫' => '(12)', + '⑬' => '(13)', + '⑭' => '(14)', + '⑮' => '(15)', + '⑯' => '(16)', + '⑰' => '(17)', + '⑱' => '(18)', + '⑲' => '(19)', + '⑳' => '(20)', + '⑴' => '(1)', + '⑵' => '(2)', + '⑶' => '(3)', + '⑷' => '(4)', + '⑸' => '(5)', + '⑹' => '(6)', + '⑺' => '(7)', + '⑻' => '(8)', + '⑼' => '(9)', + '⑽' => '(10)', + '⑾' => '(11)', + '⑿' => '(12)', + '⒀' => '(13)', + '⒁' => '(14)', + '⒂' => '(15)', + '⒃' => '(16)', + '⒄' => '(17)', + '⒅' => '(18)', + '⒆' => '(19)', + '⒇' => '(20)', + '⒈' => '1.', + '⒉' => '2.', + '⒊' => '3.', + '⒋' => '4.', + '⒌' => '5.', + '⒍' => '6.', + '⒎' => '7.', + '⒏' => '8.', + '⒐' => '9.', + '⒑' => '10.', + '⒒' => '11.', + '⒓' => '12.', + '⒔' => '13.', + '⒕' => '14.', + '⒖' => '15.', + '⒗' => '16.', + '⒘' => '17.', + '⒙' => '18.', + '⒚' => '19.', + '⒛' => '20.', + '⒜' => '(a)', + '⒝' => '(b)', + '⒞' => '(c)', + '⒟' => '(d)', + '⒠' => '(e)', + '⒡' => '(f)', + '⒢' => '(g)', + '⒣' => '(h)', + '⒤' => '(i)', + '⒥' => '(j)', + '⒦' => '(k)', + '⒧' => '(l)', + '⒨' => '(m)', + '⒩' => '(n)', + '⒪' => '(o)', + '⒫' => '(p)', + '⒬' => '(q)', + '⒭' => '(r)', + '⒮' => '(s)', + '⒯' => '(t)', + '⒰' => '(u)', + '⒱' => '(v)', + '⒲' => '(w)', + '⒳' => '(x)', + '⒴' => '(y)', + '⒵' => '(z)', + 'Ⓐ' => '(A)', + 'Ⓑ' => '(B)', + 'Ⓒ' => '(C)', + 'Ⓓ' => '(D)', + 'Ⓔ' => '(E)', + 'Ⓕ' => '(F)', + 'Ⓖ' => '(G)', + 'Ⓗ' => '(H)', + 'Ⓘ' => '(I)', + 'Ⓙ' => '(J)', + 'Ⓚ' => '(K)', + 'Ⓛ' => '(L)', + 'Ⓜ' => '(M)', + 'Ⓝ' => '(N)', + 'Ⓞ' => '(O)', + 'Ⓟ' => '(P)', + 'Ⓠ' => '(Q)', + 'Ⓡ' => '(R)', + 'Ⓢ' => '(S)', + 'Ⓣ' => '(T)', + 'Ⓤ' => '(U)', + 'Ⓥ' => '(V)', + 'Ⓦ' => '(W)', + 'Ⓧ' => '(X)', + 'Ⓨ' => '(Y)', + 'Ⓩ' => '(Z)', + 'ⓐ' => '(a)', + 'ⓑ' => '(b)', + 'ⓒ' => '(c)', + 'ⓓ' => '(d)', + 'ⓔ' => '(e)', + 'ⓕ' => '(f)', + 'ⓖ' => '(g)', + 'ⓗ' => '(h)', + 'ⓘ' => '(i)', + 'ⓙ' => '(j)', + 'ⓚ' => '(k)', + 'ⓛ' => '(l)', + 'ⓜ' => '(m)', + 'ⓝ' => '(n)', + 'ⓞ' => '(o)', + 'ⓟ' => '(p)', + 'ⓠ' => '(q)', + 'ⓡ' => '(r)', + 'ⓢ' => '(s)', + 'ⓣ' => '(t)', + 'ⓤ' => '(u)', + 'ⓥ' => '(v)', + 'ⓦ' => '(w)', + 'ⓧ' => '(x)', + 'ⓨ' => '(y)', + 'ⓩ' => '(z)', + '⓪' => '(0)', + '⨌' => '∫∫∫∫', + '⩴' => '::=', + '⩵' => '==', + '⩶' => '===', + '⺟' => '母', + '⻳' => '龟', + '⼀' => '一', + '⼁' => '丨', + '⼂' => '丶', + '⼃' => '丿', + '⼄' => '乙', + '⼅' => '亅', + '⼆' => '二', + '⼇' => '亠', + '⼈' => '人', + '⼉' => '儿', + '⼊' => '入', + '⼋' => '八', + '⼌' => '冂', + '⼍' => '冖', + '⼎' => '冫', + '⼏' => '几', + '⼐' => '凵', + '⼑' => '刀', + '⼒' => '力', + '⼓' => '勹', + '⼔' => '匕', + '⼕' => '匚', + '⼖' => '匸', + '⼗' => '十', + '⼘' => '卜', + '⼙' => '卩', + '⼚' => '厂', + '⼛' => '厶', + '⼜' => '又', + '⼝' => '口', + '⼞' => '囗', + '⼟' => '土', + '⼠' => '士', + '⼡' => '夂', + '⼢' => '夊', + '⼣' => '夕', + '⼤' => '大', + '⼥' => '女', + '⼦' => '子', + '⼧' => '宀', + '⼨' => '寸', + '⼩' => '小', + '⼪' => '尢', + '⼫' => '尸', + '⼬' => '屮', + '⼭' => '山', + '⼮' => '巛', + '⼯' => '工', + '⼰' => '己', + '⼱' => '巾', + '⼲' => '干', + '⼳' => '幺', + '⼴' => '广', + '⼵' => '廴', + '⼶' => '廾', + '⼷' => '弋', + '⼸' => '弓', + '⼹' => '彐', + '⼺' => '彡', + '⼻' => '彳', + '⼼' => '心', + '⼽' => '戈', + '⼾' => '戶', + '⼿' => '手', + '⽀' => '支', + '⽁' => '攴', + '⽂' => '文', + '⽃' => '斗', + '⽄' => '斤', + '⽅' => '方', + '⽆' => '无', + '⽇' => '日', + '⽈' => '曰', + '⽉' => '月', + '⽊' => '木', + '⽋' => '欠', + '⽌' => '止', + '⽍' => '歹', + '⽎' => '殳', + '⽏' => '毋', + '⽐' => '比', + '⽑' => '毛', + '⽒' => '氏', + '⽓' => '气', + '⽔' => '水', + '⽕' => '火', + '⽖' => '爪', + '⽗' => '父', + '⽘' => '爻', + '⽙' => '爿', + '⽚' => '片', + '⽛' => '牙', + '⽜' => '牛', + '⽝' => '犬', + '⽞' => '玄', + '⽟' => '玉', + '⽠' => '瓜', + '⽡' => '瓦', + '⽢' => '甘', + '⽣' => '生', + '⽤' => '用', + '⽥' => '田', + '⽦' => '疋', + '⽧' => '疒', + '⽨' => '癶', + '⽩' => '白', + '⽪' => '皮', + '⽫' => '皿', + '⽬' => '目', + '⽭' => '矛', + '⽮' => '矢', + '⽯' => '石', + '⽰' => '示', + '⽱' => '禸', + '⽲' => '禾', + '⽳' => '穴', + '⽴' => '立', + '⽵' => '竹', + '⽶' => '米', + '⽷' => '糸', + '⽸' => '缶', + '⽹' => '网', + '⽺' => '羊', + '⽻' => '羽', + '⽼' => '老', + '⽽' => '而', + '⽾' => '耒', + '⽿' => '耳', + '⾀' => '聿', + '⾁' => '肉', + '⾂' => '臣', + '⾃' => '自', + '⾄' => '至', + '⾅' => '臼', + '⾆' => '舌', + '⾇' => '舛', + '⾈' => '舟', + '⾉' => '艮', + '⾊' => '色', + '⾋' => '艸', + '⾌' => '虍', + '⾍' => '虫', + '⾎' => '血', + '⾏' => '行', + '⾐' => '衣', + '⾑' => '襾', + '⾒' => '見', + '⾓' => '角', + '⾔' => '言', + '⾕' => '谷', + '⾖' => '豆', + '⾗' => '豕', + '⾘' => '豸', + '⾙' => '貝', + '⾚' => '赤', + '⾛' => '走', + '⾜' => '足', + '⾝' => '身', + '⾞' => '車', + '⾟' => '辛', + '⾠' => '辰', + '⾡' => '辵', + '⾢' => '邑', + '⾣' => '酉', + '⾤' => '釆', + '⾥' => '里', + '⾦' => '金', + '⾧' => '長', + '⾨' => '門', + '⾩' => '阜', + '⾪' => '隶', + '⾫' => '隹', + '⾬' => '雨', + '⾭' => '靑', + '⾮' => '非', + '⾯' => '面', + '⾰' => '革', + '⾱' => '韋', + '⾲' => '韭', + '⾳' => '音', + '⾴' => '頁', + '⾵' => '風', + '⾶' => '飛', + '⾷' => '食', + '⾸' => '首', + '⾹' => '香', + '⾺' => '馬', + '⾻' => '骨', + '⾼' => '高', + '⾽' => '髟', + '⾾' => '鬥', + '⾿' => '鬯', + '⿀' => '鬲', + '⿁' => '鬼', + '⿂' => '魚', + '⿃' => '鳥', + '⿄' => '鹵', + '⿅' => '鹿', + '⿆' => '麥', + '⿇' => '麻', + '⿈' => '黃', + '⿉' => '黍', + '⿊' => '黑', + '⿋' => '黹', + '⿌' => '黽', + '⿍' => '鼎', + '⿎' => '鼓', + '⿏' => '鼠', + '⿐' => '鼻', + '⿑' => '齊', + '⿒' => '齒', + '⿓' => '龍', + '⿔' => '龜', + '⿕' => '龠', + ' ' => ' ', + '〶' => '〒', + '〸' => '十', + '〹' => '卄', + '〺' => '卅', + 'ㄱ' => 'ᄀ', + 'ㄲ' => 'ᄁ', + 'ㄳ' => 'ᆪ', + 'ㄴ' => 'ᄂ', + 'ㄵ' => 'ᆬ', + 'ㄶ' => 'ᆭ', + 'ㄷ' => 'ᄃ', + 'ㄸ' => 'ᄄ', + 'ㄹ' => 'ᄅ', + 'ㄺ' => 'ᆰ', + 'ㄻ' => 'ᆱ', + 'ㄼ' => 'ᆲ', + 'ㄽ' => 'ᆳ', + 'ㄾ' => 'ᆴ', + 'ㄿ' => 'ᆵ', + 'ㅀ' => 'ᄚ', + 'ㅁ' => 'ᄆ', + 'ㅂ' => 'ᄇ', + 'ㅃ' => 'ᄈ', + 'ㅄ' => 'ᄡ', + 'ㅅ' => 'ᄉ', + 'ㅆ' => 'ᄊ', + 'ㅇ' => 'ᄋ', + 'ㅈ' => 'ᄌ', + 'ㅉ' => 'ᄍ', + 'ㅊ' => 'ᄎ', + 'ㅋ' => 'ᄏ', + 'ㅌ' => 'ᄐ', + 'ㅍ' => 'ᄑ', + 'ㅎ' => 'ᄒ', + 'ㅏ' => 'ᅡ', + 'ㅐ' => 'ᅢ', + 'ㅑ' => 'ᅣ', + 'ㅒ' => 'ᅤ', + 'ㅓ' => 'ᅥ', + 'ㅔ' => 'ᅦ', + 'ㅕ' => 'ᅧ', + 'ㅖ' => 'ᅨ', + 'ㅗ' => 'ᅩ', + 'ㅘ' => 'ᅪ', + 'ㅙ' => 'ᅫ', + 'ㅚ' => 'ᅬ', + 'ㅛ' => 'ᅭ', + 'ㅜ' => 'ᅮ', + 'ㅝ' => 'ᅯ', + 'ㅞ' => 'ᅰ', + 'ㅟ' => 'ᅱ', + 'ㅠ' => 'ᅲ', + 'ㅡ' => 'ᅳ', + 'ㅢ' => 'ᅴ', + 'ㅣ' => 'ᅵ', + 'ㅤ' => 'ᅠ', + 'ㅥ' => 'ᄔ', + 'ㅦ' => 'ᄕ', + 'ㅧ' => 'ᇇ', + 'ㅨ' => 'ᇈ', + 'ㅩ' => 'ᇌ', + 'ㅪ' => 'ᇎ', + 'ㅫ' => 'ᇓ', + 'ㅬ' => 'ᇗ', + 'ㅭ' => 'ᇙ', + 'ㅮ' => 'ᄜ', + 'ㅯ' => 'ᇝ', + 'ㅰ' => 'ᇟ', + 'ㅱ' => 'ᄝ', + 'ㅲ' => 'ᄞ', + 'ㅳ' => 'ᄠ', + 'ㅴ' => 'ᄢ', + 'ㅵ' => 'ᄣ', + 'ㅶ' => 'ᄧ', + 'ㅷ' => 'ᄩ', + 'ㅸ' => 'ᄫ', + 'ㅹ' => 'ᄬ', + 'ㅺ' => 'ᄭ', + 'ㅻ' => 'ᄮ', + 'ㅼ' => 'ᄯ', + 'ㅽ' => 'ᄲ', + 'ㅾ' => 'ᄶ', + 'ㅿ' => 'ᅀ', + 'ㆀ' => 'ᅇ', + 'ㆁ' => 'ᅌ', + 'ㆂ' => 'ᇱ', + 'ㆃ' => 'ᇲ', + 'ㆄ' => 'ᅗ', + 'ㆅ' => 'ᅘ', + 'ㆆ' => 'ᅙ', + 'ㆇ' => 'ᆄ', + 'ㆈ' => 'ᆅ', + 'ㆉ' => 'ᆈ', + 'ㆊ' => 'ᆑ', + 'ㆋ' => 'ᆒ', + 'ㆌ' => 'ᆔ', + 'ㆍ' => 'ᆞ', + 'ㆎ' => 'ᆡ', + '㈀' => '(ᄀ)', + '㈁' => '(ᄂ)', + '㈂' => '(ᄃ)', + '㈃' => '(ᄅ)', + '㈄' => '(ᄆ)', + '㈅' => '(ᄇ)', + '㈆' => '(ᄉ)', + '㈇' => '(ᄋ)', + '㈈' => '(ᄌ)', + '㈉' => '(ᄎ)', + '㈊' => '(ᄏ)', + '㈋' => '(ᄐ)', + '㈌' => '(ᄑ)', + '㈍' => '(ᄒ)', + '㈎' => '(가)', + '㈏' => '(나)', + '㈐' => '(다)', + '㈑' => '(라)', + '㈒' => '(마)', + '㈓' => '(바)', + '㈔' => '(사)', + '㈕' => '(아)', + '㈖' => '(자)', + '㈗' => '(차)', + '㈘' => '(카)', + '㈙' => '(타)', + '㈚' => '(파)', + '㈛' => '(하)', + '㈜' => '(주)', + '㈝' => '(오전)', + '㈞' => '(오후)', + '㈠' => '(一)', + '㈡' => '(二)', + '㈢' => '(三)', + '㈣' => '(四)', + '㈤' => '(五)', + '㈥' => '(六)', + '㈦' => '(七)', + '㈧' => '(八)', + '㈨' => '(九)', + '㈩' => '(十)', + '㈪' => '(月)', + '㈫' => '(火)', + '㈬' => '(水)', + '㈭' => '(木)', + '㈮' => '(金)', + '㈯' => '(土)', + '㈰' => '(日)', + '㈱' => '(株)', + '㈲' => '(有)', + '㈳' => '(社)', + '㈴' => '(名)', + '㈵' => '(特)', + '㈶' => '(財)', + '㈷' => '(祝)', + '㈸' => '(労)', + '㈹' => '(代)', + '㈺' => '(呼)', + '㈻' => '(学)', + '㈼' => '(監)', + '㈽' => '(企)', + '㈾' => '(資)', + '㈿' => '(協)', + '㉀' => '(祭)', + '㉁' => '(休)', + '㉂' => '(自)', + '㉃' => '(至)', + '㉄' => '(問)', + '㉅' => '(幼)', + '㉆' => '(文)', + '㉇' => '(箏)', + '㉐' => 'PTE', + '㉑' => '(21)', + '㉒' => '(22)', + '㉓' => '(23)', + '㉔' => '(24)', + '㉕' => '(25)', + '㉖' => '(26)', + '㉗' => '(27)', + '㉘' => '(28)', + '㉙' => '(29)', + '㉚' => '(30)', + '㉛' => '(31)', + '㉜' => '(32)', + '㉝' => '(33)', + '㉞' => '(34)', + '㉟' => '(35)', + '㉠' => '(ᄀ)', + '㉡' => '(ᄂ)', + '㉢' => '(ᄃ)', + '㉣' => '(ᄅ)', + '㉤' => '(ᄆ)', + '㉥' => '(ᄇ)', + '㉦' => '(ᄉ)', + '㉧' => '(ᄋ)', + '㉨' => '(ᄌ)', + '㉩' => '(ᄎ)', + '㉪' => '(ᄏ)', + '㉫' => '(ᄐ)', + '㉬' => '(ᄑ)', + '㉭' => '(ᄒ)', + '㉮' => '(가)', + '㉯' => '(나)', + '㉰' => '(다)', + '㉱' => '(라)', + '㉲' => '(마)', + '㉳' => '(바)', + '㉴' => '(사)', + '㉵' => '(아)', + '㉶' => '(자)', + '㉷' => '(차)', + '㉸' => '(카)', + '㉹' => '(타)', + '㉺' => '(파)', + '㉻' => '(하)', + '㉼' => '(참고)', + '㉽' => '(주의)', + '㉾' => '(우)', + '㊀' => '(一)', + '㊁' => '(二)', + '㊂' => '(三)', + '㊃' => '(四)', + '㊄' => '(五)', + '㊅' => '(六)', + '㊆' => '(七)', + '㊇' => '(八)', + '㊈' => '(九)', + '㊉' => '(十)', + '㊊' => '(月)', + '㊋' => '(火)', + '㊌' => '(水)', + '㊍' => '(木)', + '㊎' => '(金)', + '㊏' => '(土)', + '㊐' => '(日)', + '㊑' => '(株)', + '㊒' => '(有)', + '㊓' => '(社)', + '㊔' => '(名)', + '㊕' => '(特)', + '㊖' => '(財)', + '㊗' => '(祝)', + '㊘' => '(労)', + '㊙' => '(秘)', + '㊚' => '(男)', + '㊛' => '(女)', + '㊜' => '(適)', + '㊝' => '(優)', + '㊞' => '(印)', + '㊟' => '(注)', + '㊠' => '(項)', + '㊡' => '(休)', + '㊢' => '(写)', + '㊣' => '(正)', + '㊤' => '(上)', + '㊥' => '(中)', + '㊦' => '(下)', + '㊧' => '(左)', + '㊨' => '(右)', + '㊩' => '(医)', + '㊪' => '(宗)', + '㊫' => '(学)', + '㊬' => '(監)', + '㊭' => '(企)', + '㊮' => '(資)', + '㊯' => '(協)', + '㊰' => '(夜)', + '㊱' => '(36)', + '㊲' => '(37)', + '㊳' => '(38)', + '㊴' => '(39)', + '㊵' => '(40)', + '㊶' => '(41)', + '㊷' => '(42)', + '㊸' => '(43)', + '㊹' => '(44)', + '㊺' => '(45)', + '㊻' => '(46)', + '㊼' => '(47)', + '㊽' => '(48)', + '㊾' => '(49)', + '㊿' => '(50)', + '㋀' => '1月', + '㋁' => '2月', + '㋂' => '3月', + '㋃' => '4月', + '㋄' => '5月', + '㋅' => '6月', + '㋆' => '7月', + '㋇' => '8月', + '㋈' => '9月', + '㋉' => '10月', + '㋊' => '11月', + '㋋' => '12月', + '㋌' => 'Hg', + '㋍' => 'erg', + '㋎' => 'eV', + '㋏' => 'LTD', + '㋐' => '(ア)', + '㋑' => '(イ)', + '㋒' => '(ウ)', + '㋓' => '(エ)', + '㋔' => '(オ)', + '㋕' => '(カ)', + '㋖' => '(キ)', + '㋗' => '(ク)', + '㋘' => '(ケ)', + '㋙' => '(コ)', + '㋚' => '(サ)', + '㋛' => '(シ)', + '㋜' => '(ス)', + '㋝' => '(セ)', + '㋞' => '(ソ)', + '㋟' => '(タ)', + '㋠' => '(チ)', + '㋡' => '(ツ)', + '㋢' => '(テ)', + '㋣' => '(ト)', + '㋤' => '(ナ)', + '㋥' => '(ニ)', + '㋦' => '(ヌ)', + '㋧' => '(ネ)', + '㋨' => '(ノ)', + '㋩' => '(ハ)', + '㋪' => '(ヒ)', + '㋫' => '(フ)', + '㋬' => '(ヘ)', + '㋭' => '(ホ)', + '㋮' => '(マ)', + '㋯' => '(ミ)', + '㋰' => '(ム)', + '㋱' => '(メ)', + '㋲' => '(モ)', + '㋳' => '(ヤ)', + '㋴' => '(ユ)', + '㋵' => '(ヨ)', + '㋶' => '(ラ)', + '㋷' => '(リ)', + '㋸' => '(ル)', + '㋹' => '(レ)', + '㋺' => '(ロ)', + '㋻' => '(ワ)', + '㋼' => '(ヰ)', + '㋽' => '(ヱ)', + '㋾' => '(ヲ)', + '㌀' => 'アパート', + '㌁' => 'アルファ', + '㌂' => 'アンペア', + '㌃' => 'アール', + '㌄' => 'イニング', + '㌅' => 'インチ', + '㌆' => 'ウォン', + '㌇' => 'エスクード', + '㌈' => 'エーカー', + '㌉' => 'オンス', + '㌊' => 'オーム', + '㌋' => 'カイリ', + '㌌' => 'カラット', + '㌍' => 'カロリー', + '㌎' => 'ガロン', + '㌏' => 'ガンマ', + '㌐' => 'ギガ', + '㌑' => 'ギニー', + '㌒' => 'キュリー', + '㌓' => 'ギルダー', + '㌔' => 'キロ', + '㌕' => 'キログラム', + '㌖' => 'キロメートル', + '㌗' => 'キロワット', + '㌘' => 'グラム', + '㌙' => 'グラムトン', + '㌚' => 'クルゼイロ', + '㌛' => 'クローネ', + '㌜' => 'ケース', + '㌝' => 'コルナ', + '㌞' => 'コーポ', + '㌟' => 'サイクル', + '㌠' => 'サンチーム', + '㌡' => 'シリング', + '㌢' => 'センチ', + '㌣' => 'セント', + '㌤' => 'ダース', + '㌥' => 'デシ', + '㌦' => 'ドル', + '㌧' => 'トン', + '㌨' => 'ナノ', + '㌩' => 'ノット', + '㌪' => 'ハイツ', + '㌫' => 'パーセント', + '㌬' => 'パーツ', + '㌭' => 'バーレル', + '㌮' => 'ピアストル', + '㌯' => 'ピクル', + '㌰' => 'ピコ', + '㌱' => 'ビル', + '㌲' => 'ファラッド', + '㌳' => 'フィート', + '㌴' => 'ブッシェル', + '㌵' => 'フラン', + '㌶' => 'ヘクタール', + '㌷' => 'ペソ', + '㌸' => 'ペニヒ', + '㌹' => 'ヘルツ', + '㌺' => 'ペンス', + '㌻' => 'ページ', + '㌼' => 'ベータ', + '㌽' => 'ポイント', + '㌾' => 'ボルト', + '㌿' => 'ホン', + '㍀' => 'ポンド', + '㍁' => 'ホール', + '㍂' => 'ホーン', + '㍃' => 'マイクロ', + '㍄' => 'マイル', + '㍅' => 'マッハ', + '㍆' => 'マルク', + '㍇' => 'マンション', + '㍈' => 'ミクロン', + '㍉' => 'ミリ', + '㍊' => 'ミリバール', + '㍋' => 'メガ', + '㍌' => 'メガトン', + '㍍' => 'メートル', + '㍎' => 'ヤード', + '㍏' => 'ヤール', + '㍐' => 'ユアン', + '㍑' => 'リットル', + '㍒' => 'リラ', + '㍓' => 'ルピー', + '㍔' => 'ルーブル', + '㍕' => 'レム', + '㍖' => 'レントゲン', + '㍗' => 'ワット', + '㍘' => '0点', + '㍙' => '1点', + '㍚' => '2点', + '㍛' => '3点', + '㍜' => '4点', + '㍝' => '5点', + '㍞' => '6点', + '㍟' => '7点', + '㍠' => '8点', + '㍡' => '9点', + '㍢' => '10点', + '㍣' => '11点', + '㍤' => '12点', + '㍥' => '13点', + '㍦' => '14点', + '㍧' => '15点', + '㍨' => '16点', + '㍩' => '17点', + '㍪' => '18点', + '㍫' => '19点', + '㍬' => '20点', + '㍭' => '21点', + '㍮' => '22点', + '㍯' => '23点', + '㍰' => '24点', + '㍱' => 'hPa', + '㍲' => 'da', + '㍳' => 'AU', + '㍴' => 'bar', + '㍵' => 'oV', + '㍶' => 'pc', + '㍷' => 'dm', + '㍸' => 'dm²', + '㍹' => 'dm³', + '㍺' => 'IU', + '㍻' => '平成', + '㍼' => '昭和', + '㍽' => '大正', + '㍾' => '明治', + '㍿' => '株式会社', + '㎀' => 'pA', + '㎁' => 'nA', + '㎂' => 'μA', + '㎃' => 'mA', + '㎄' => 'kA', + '㎅' => 'KB', + '㎆' => 'MB', + '㎇' => 'GB', + '㎈' => 'cal', + '㎉' => 'kcal', + '㎊' => 'pF', + '㎋' => 'nF', + '㎌' => 'μF', + '㎍' => 'μg', + '㎎' => 'mg', + '㎏' => 'kg', + '㎐' => 'Hz', + '㎑' => 'kHz', + '㎒' => 'MHz', + '㎓' => 'GHz', + '㎔' => 'THz', + '㎕' => 'μℓ', + '㎖' => 'mℓ', + '㎗' => 'dℓ', + '㎘' => 'kℓ', + '㎙' => 'fm', + '㎚' => 'nm', + '㎛' => 'μm', + '㎜' => 'mm', + '㎝' => 'cm', + '㎞' => 'km', + '㎟' => 'mm²', + '㎠' => 'cm²', + '㎡' => 'm²', + '㎢' => 'km²', + '㎣' => 'mm³', + '㎤' => 'cm³', + '㎥' => 'm³', + '㎦' => 'km³', + '㎧' => 'm∕s', + '㎨' => 'm∕s²', + '㎩' => 'Pa', + '㎪' => 'kPa', + '㎫' => 'MPa', + '㎬' => 'GPa', + '㎭' => 'rad', + '㎮' => 'rad∕s', + '㎯' => 'rad∕s²', + '㎰' => 'ps', + '㎱' => 'ns', + '㎲' => 'μs', + '㎳' => 'ms', + '㎴' => 'pV', + '㎵' => 'nV', + '㎶' => 'μV', + '㎷' => 'mV', + '㎸' => 'kV', + '㎹' => 'MV', + '㎺' => 'pW', + '㎻' => 'nW', + '㎼' => 'μW', + '㎽' => 'mW', + '㎾' => 'kW', + '㎿' => 'MW', + '㏀' => 'kΩ', + '㏁' => 'MΩ', + '㏂' => 'a.m.', + '㏃' => 'Bq', + '㏄' => 'cc', + '㏅' => 'cd', + '㏆' => 'C∕kg', + '㏇' => 'Co.', + '㏈' => 'dB', + '㏉' => 'Gy', + '㏊' => 'ha', + '㏋' => 'HP', + '㏌' => 'in', + '㏍' => 'KK', + '㏎' => 'KM', + '㏏' => 'kt', + '㏐' => 'lm', + '㏑' => 'ln', + '㏒' => 'log', + '㏓' => 'lx', + '㏔' => 'mb', + '㏕' => 'mil', + '㏖' => 'mol', + '㏗' => 'PH', + '㏘' => 'p.m.', + '㏙' => 'PPM', + '㏚' => 'PR', + '㏛' => 'sr', + '㏜' => 'Sv', + '㏝' => 'Wb', + '㏞' => 'V∕m', + '㏟' => 'A∕m', + '㏠' => '1日', + '㏡' => '2日', + '㏢' => '3日', + '㏣' => '4日', + '㏤' => '5日', + '㏥' => '6日', + '㏦' => '7日', + '㏧' => '8日', + '㏨' => '9日', + '㏩' => '10日', + '㏪' => '11日', + '㏫' => '12日', + '㏬' => '13日', + '㏭' => '14日', + '㏮' => '15日', + '㏯' => '16日', + '㏰' => '17日', + '㏱' => '18日', + '㏲' => '19日', + '㏳' => '20日', + '㏴' => '21日', + '㏵' => '22日', + '㏶' => '23日', + '㏷' => '24日', + '㏸' => '25日', + '㏹' => '26日', + '㏺' => '27日', + '㏻' => '28日', + '㏼' => '29日', + '㏽' => '30日', + '㏾' => '31日', + '㏿' => 'gal', + '豈' => '豈', + '更' => '更', + '車' => '車', + '賈' => '賈', + '滑' => '滑', + '串' => '串', + '句' => '句', + '龜' => '龜', + '龜' => '龜', + '契' => '契', + '金' => '金', + '喇' => '喇', + '奈' => '奈', + '懶' => '懶', + '癩' => '癩', + '羅' => '羅', + '蘿' => '蘿', + '螺' => '螺', + '裸' => '裸', + '邏' => '邏', + '樂' => '樂', + '洛' => '洛', + '烙' => '烙', + '珞' => '珞', + '落' => '落', + '酪' => '酪', + '駱' => '駱', + '亂' => '亂', + '卵' => '卵', + '欄' => '欄', + '爛' => '爛', + '蘭' => '蘭', + '鸞' => '鸞', + '嵐' => '嵐', + '濫' => '濫', + '藍' => '藍', + '襤' => '襤', + '拉' => '拉', + '臘' => '臘', + '蠟' => '蠟', + '廊' => '廊', + '朗' => '朗', + '浪' => '浪', + '狼' => '狼', + '郎' => '郎', + '來' => '來', + '冷' => '冷', + '勞' => '勞', + '擄' => '擄', + '櫓' => '櫓', + '爐' => '爐', + '盧' => '盧', + '老' => '老', + '蘆' => '蘆', + '虜' => '虜', + '路' => '路', + '露' => '露', + '魯' => '魯', + '鷺' => '鷺', + '碌' => '碌', + '祿' => '祿', + '綠' => '綠', + '菉' => '菉', + '錄' => '錄', + '鹿' => '鹿', + '論' => '論', + '壟' => '壟', + '弄' => '弄', + '籠' => '籠', + '聾' => '聾', + '牢' => '牢', + '磊' => '磊', + '賂' => '賂', + '雷' => '雷', + '壘' => '壘', + '屢' => '屢', + '樓' => '樓', + '淚' => '淚', + '漏' => '漏', + '累' => '累', + '縷' => '縷', + '陋' => '陋', + '勒' => '勒', + '肋' => '肋', + '凜' => '凜', + '凌' => '凌', + '稜' => '稜', + '綾' => '綾', + '菱' => '菱', + '陵' => '陵', + '讀' => '讀', + '拏' => '拏', + '樂' => '樂', + '諾' => '諾', + '丹' => '丹', + '寧' => '寧', + '怒' => '怒', + '率' => '率', + '異' => '異', + '北' => '北', + '磻' => '磻', + '便' => '便', + '復' => '復', + '不' => '不', + '泌' => '泌', + '數' => '數', + '索' => '索', + '參' => '參', + '塞' => '塞', + '省' => '省', + '葉' => '葉', + '說' => '說', + '殺' => '殺', + '辰' => '辰', + '沈' => '沈', + '拾' => '拾', + '若' => '若', + '掠' => '掠', + '略' => '略', + '亮' => '亮', + '兩' => '兩', + '凉' => '凉', + '梁' => '梁', + '糧' => '糧', + '良' => '良', + '諒' => '諒', + '量' => '量', + '勵' => '勵', + '呂' => '呂', + '女' => '女', + '廬' => '廬', + '旅' => '旅', + '濾' => '濾', + '礪' => '礪', + '閭' => '閭', + '驪' => '驪', + '麗' => '麗', + '黎' => '黎', + '力' => '力', + '曆' => '曆', + '歷' => '歷', + '轢' => '轢', + '年' => '年', + '憐' => '憐', + '戀' => '戀', + '撚' => '撚', + '漣' => '漣', + '煉' => '煉', + '璉' => '璉', + '秊' => '秊', + '練' => '練', + '聯' => '聯', + '輦' => '輦', + '蓮' => '蓮', + '連' => '連', + '鍊' => '鍊', + '列' => '列', + '劣' => '劣', + '咽' => '咽', + '烈' => '烈', + '裂' => '裂', + '說' => '說', + '廉' => '廉', + '念' => '念', + '捻' => '捻', + '殮' => '殮', + '簾' => '簾', + '獵' => '獵', + '令' => '令', + '囹' => '囹', + '寧' => '寧', + '嶺' => '嶺', + '怜' => '怜', + '玲' => '玲', + '瑩' => '瑩', + '羚' => '羚', + '聆' => '聆', + '鈴' => '鈴', + '零' => '零', + '靈' => '靈', + '領' => '領', + '例' => '例', + '禮' => '禮', + '醴' => '醴', + '隸' => '隸', + '惡' => '惡', + '了' => '了', + '僚' => '僚', + '寮' => '寮', + '尿' => '尿', + '料' => '料', + '樂' => '樂', + '燎' => '燎', + '療' => '療', + '蓼' => '蓼', + '遼' => '遼', + '龍' => '龍', + '暈' => '暈', + '阮' => '阮', + '劉' => '劉', + '杻' => '杻', + '柳' => '柳', + '流' => '流', + '溜' => '溜', + '琉' => '琉', + '留' => '留', + '硫' => '硫', + '紐' => '紐', + '類' => '類', + '六' => '六', + '戮' => '戮', + '陸' => '陸', + '倫' => '倫', + '崙' => '崙', + '淪' => '淪', + '輪' => '輪', + '律' => '律', + '慄' => '慄', + '栗' => '栗', + '率' => '率', + '隆' => '隆', + '利' => '利', + '吏' => '吏', + '履' => '履', + '易' => '易', + '李' => '李', + '梨' => '梨', + '泥' => '泥', + '理' => '理', + '痢' => '痢', + '罹' => '罹', + '裏' => '裏', + '裡' => '裡', + '里' => '里', + '離' => '離', + '匿' => '匿', + '溺' => '溺', + '吝' => '吝', + '燐' => '燐', + '璘' => '璘', + '藺' => '藺', + '隣' => '隣', + '鱗' => '鱗', + '麟' => '麟', + '林' => '林', + '淋' => '淋', + '臨' => '臨', + '立' => '立', + '笠' => '笠', + '粒' => '粒', + '狀' => '狀', + '炙' => '炙', + '識' => '識', + '什' => '什', + '茶' => '茶', + '刺' => '刺', + '切' => '切', + '度' => '度', + '拓' => '拓', + '糖' => '糖', + '宅' => '宅', + '洞' => '洞', + '暴' => '暴', + '輻' => '輻', + '行' => '行', + '降' => '降', + '見' => '見', + '廓' => '廓', + '兀' => '兀', + '嗀' => '嗀', + '﨎' => '', + '﨏' => '', + '塚' => '塚', + '﨑' => '', + '晴' => '晴', + '﨓' => '', + '﨔' => '', + '凞' => '凞', + '猪' => '猪', + '益' => '益', + '礼' => '礼', + '神' => '神', + '祥' => '祥', + '福' => '福', + '靖' => '靖', + '精' => '精', + '羽' => '羽', + '﨟' => '', + '蘒' => '蘒', + '﨡' => '', + '諸' => '諸', + '﨣' => '', + '﨤' => '', + '逸' => '逸', + '都' => '都', + '﨧' => '', + '﨨' => '', + '﨩' => '', + '飯' => '飯', + '飼' => '飼', + '館' => '館', + '鶴' => '鶴', + '郞' => '郞', + '隷' => '隷', + '侮' => '侮', + '僧' => '僧', + '免' => '免', + '勉' => '勉', + '勤' => '勤', + '卑' => '卑', + '喝' => '喝', + '嘆' => '嘆', + '器' => '器', + '塀' => '塀', + '墨' => '墨', + '層' => '層', + '屮' => '屮', + '悔' => '悔', + '慨' => '慨', + '憎' => '憎', + '懲' => '懲', + '敏' => '敏', + '既' => '既', + '暑' => '暑', + '梅' => '梅', + '海' => '海', + '渚' => '渚', + '漢' => '漢', + '煮' => '煮', + '爫' => '爫', + '琢' => '琢', + '碑' => '碑', + '社' => '社', + '祉' => '祉', + '祈' => '祈', + '祐' => '祐', + '祖' => '祖', + '祝' => '祝', + '禍' => '禍', + '禎' => '禎', + '穀' => '穀', + '突' => '突', + '節' => '節', + '練' => '練', + '縉' => '縉', + '繁' => '繁', + '署' => '署', + '者' => '者', + '臭' => '臭', + '艹' => '艹', + '艹' => '艹', + '著' => '著', + '褐' => '褐', + '視' => '視', + '謁' => '謁', + '謹' => '謹', + '賓' => '賓', + '贈' => '贈', + '辶' => '辶', + '逸' => '逸', + '難' => '難', + '響' => '響', + '頻' => '頻', + '恵' => '恵', + '𤋮' => '𤋮', + '舘' => '舘', + '並' => '並', + '况' => '况', + '全' => '全', + '侀' => '侀', + '充' => '充', + '冀' => '冀', + '勇' => '勇', + '勺' => '勺', + '喝' => '喝', + '啕' => '啕', + '喙' => '喙', + '嗢' => '嗢', + '塚' => '塚', + '墳' => '墳', + '奄' => '奄', + '奔' => '奔', + '婢' => '婢', + '嬨' => '嬨', + '廒' => '廒', + '廙' => '廙', + '彩' => '彩', + '徭' => '徭', + '惘' => '惘', + '慎' => '慎', + '愈' => '愈', + '憎' => '憎', + '慠' => '慠', + '懲' => '懲', + '戴' => '戴', + '揄' => '揄', + '搜' => '搜', + '摒' => '摒', + '敖' => '敖', + '晴' => '晴', + '朗' => '朗', + '望' => '望', + '杖' => '杖', + '歹' => '歹', + '殺' => '殺', + '流' => '流', + '滛' => '滛', + '滋' => '滋', + '漢' => '漢', + '瀞' => '瀞', + '煮' => '煮', + '瞧' => '瞧', + '爵' => '爵', + '犯' => '犯', + '猪' => '猪', + '瑱' => '瑱', + '甆' => '甆', + '画' => '画', + '瘝' => '瘝', + '瘟' => '瘟', + '益' => '益', + '盛' => '盛', + '直' => '直', + '睊' => '睊', + '着' => '着', + '磌' => '磌', + '窱' => '窱', + '節' => '節', + '类' => '类', + '絛' => '絛', + '練' => '練', + '缾' => '缾', + '者' => '者', + '荒' => '荒', + '華' => '華', + '蝹' => '蝹', + '襁' => '襁', + '覆' => '覆', + '視' => '視', + '調' => '調', + '諸' => '諸', + '請' => '請', + '謁' => '謁', + '諾' => '諾', + '諭' => '諭', + '謹' => '謹', + '變' => '變', + '贈' => '贈', + '輸' => '輸', + '遲' => '遲', + '醙' => '醙', + '鉶' => '鉶', + '陼' => '陼', + '難' => '難', + '靖' => '靖', + '韛' => '韛', + '響' => '響', + '頋' => '頋', + '頻' => '頻', + '鬒' => '鬒', + '龜' => '龜', + '𢡊' => '𢡊', + '𢡄' => '𢡄', + '𣏕' => '𣏕', + '㮝' => '㮝', + '䀘' => '䀘', + '䀹' => '䀹', + '𥉉' => '𥉉', + '𥳐' => '𥳐', + '𧻓' => '𧻓', + '齃' => '齃', + '龎' => '龎', + 'ff' => 'ff', + 'fi' => 'fi', + 'fl' => 'fl', + 'ffi' => 'ffi', + 'ffl' => 'ffl', + 'ſt' => 'ſt', + 'st' => 'st', + 'ﬓ' => 'մն', + 'ﬔ' => 'մե', + 'ﬕ' => 'մի', + 'ﬖ' => 'վն', + 'ﬗ' => 'մխ', + 'ﬠ' => 'ע', + 'ﬡ' => 'א', + 'ﬢ' => 'ד', + 'ﬣ' => 'ה', + 'ﬤ' => 'כ', + 'ﬥ' => 'ל', + 'ﬦ' => 'ם', + 'ﬧ' => 'ר', + 'ﬨ' => 'ת', + '﬩' => '+', + 'ﭏ' => 'אל', + '﹉' => '‾', + '﹊' => '‾', + '﹋' => '‾', + '﹌' => '‾', + '﹍' => '_', + '﹎' => '_', + '﹏' => '_', + '﹐' => ',', + '﹑' => '、', + '﹒' => '.', + '﹔' => ';', + '﹕' => ':', + '﹖' => '?', + '﹗' => '!', + '﹘' => '—', + '﹙' => '(', + '﹚' => ')', + '﹛' => '{', + '﹜' => '}', + '﹝' => '〔', + '﹞' => '〕', + '﹟' => '#', + '﹠' => '&', + '﹡' => '*', + '﹢' => '+', + '﹣' => '-', + '﹤' => '<', + '﹥' => '>', + '﹦' => '=', + '﹨' => '\\', + '﹩' => '$', + '﹪' => '%', + '﹫' => '@', + '!' => '!', + '"' => '"', + '#' => '#', + '$' => '$', + '%' => '%', + '&' => '&', + ''' => '\'', + '(' => '(', + ')' => ')', + '*' => '*', + '+' => '+', + ',' => ',', + '-' => '-', + '.' => '.', + '/' => '/', + '0' => '0', + '1' => '1', + '2' => '2', + '3' => '3', + '4' => '4', + '5' => '5', + '6' => '6', + '7' => '7', + '8' => '8', + '9' => '9', + ':' => ':', + ';' => ';', + '<' => '<', + '=' => '=', + '>' => '>', + '?' => '?', + '@' => '@', + 'A' => 'A', + 'B' => 'B', + 'C' => 'C', + 'D' => 'D', + 'E' => 'E', + 'F' => 'F', + 'G' => 'G', + 'H' => 'H', + 'I' => 'I', + 'J' => 'J', + 'K' => 'K', + 'L' => 'L', + 'M' => 'M', + 'N' => 'N', + 'O' => 'O', + 'P' => 'P', + 'Q' => 'Q', + 'R' => 'R', + 'S' => 'S', + 'T' => 'T', + 'U' => 'U', + 'V' => 'V', + 'W' => 'W', + 'X' => 'X', + 'Y' => 'Y', + 'Z' => 'Z', + '[' => '[', + '\' => '\\', + ']' => ']', + '^' => '^', + '_' => '_', + '`' => '`', + 'a' => 'a', + 'b' => 'b', + 'c' => 'c', + 'd' => 'd', + 'e' => 'e', + 'f' => 'f', + 'g' => 'g', + 'h' => 'h', + 'i' => 'i', + 'j' => 'j', + 'k' => 'k', + 'l' => 'l', + 'm' => 'm', + 'n' => 'n', + 'o' => 'o', + 'p' => 'p', + 'q' => 'q', + 'r' => 'r', + 's' => 's', + 't' => 't', + 'u' => 'u', + 'v' => 'v', + 'w' => 'w', + 'x' => 'x', + 'y' => 'y', + 'z' => 'z', + '{' => '{', + '|' => '|', + '}' => '}', + '~' => '~', + '⦅' => '⦅', + '⦆' => '⦆', + '。' => '。', + '「' => '「', + '」' => '」', + '、' => '、', + '・' => '・', + 'ヲ' => 'ヲ', + 'ァ' => 'ァ', + 'ィ' => 'ィ', + 'ゥ' => 'ゥ', + 'ェ' => 'ェ', + 'ォ' => 'ォ', + 'ャ' => 'ャ', + 'ュ' => 'ュ', + 'ョ' => 'ョ', + 'ッ' => 'ッ', + 'ー' => 'ー', + 'ア' => 'ア', + 'イ' => 'イ', + 'ウ' => 'ウ', + 'エ' => 'エ', + 'オ' => 'オ', + 'カ' => 'カ', + 'キ' => 'キ', + 'ク' => 'ク', + 'ケ' => 'ケ', + 'コ' => 'コ', + 'サ' => 'サ', + 'シ' => 'シ', + 'ス' => 'ス', + 'セ' => 'セ', + 'ソ' => 'ソ', + 'タ' => 'タ', + 'チ' => 'チ', + 'ツ' => 'ツ', + 'テ' => 'テ', + 'ト' => 'ト', + 'ナ' => 'ナ', + 'ニ' => 'ニ', + 'ヌ' => 'ヌ', + 'ネ' => 'ネ', + 'ノ' => 'ノ', + 'ハ' => 'ハ', + 'ヒ' => 'ヒ', + 'フ' => 'フ', + 'ヘ' => 'ヘ', + 'ホ' => 'ホ', + 'マ' => 'マ', + 'ミ' => 'ミ', + 'ム' => 'ム', + 'メ' => 'メ', + 'モ' => 'モ', + 'ヤ' => 'ヤ', + 'ユ' => 'ユ', + 'ヨ' => 'ヨ', + 'ラ' => 'ラ', + 'リ' => 'リ', + 'ル' => 'ル', + 'レ' => 'レ', + 'ロ' => 'ロ', + 'ワ' => 'ワ', + 'ン' => 'ン', + '゙' => '゙', + '゚' => '゚', + 'ᅠ' => 'ㅤ', + 'ᄀ' => 'ㄱ', + 'ᄁ' => 'ㄲ', + 'ᆪ' => 'ㄳ', + 'ᄂ' => 'ㄴ', + 'ᆬ' => 'ㄵ', + 'ᆭ' => 'ㄶ', + 'ᄃ' => 'ㄷ', + 'ᄄ' => 'ㄸ', + 'ᄅ' => 'ㄹ', + 'ᆰ' => 'ㄺ', + 'ᆱ' => 'ㄻ', + 'ᆲ' => 'ㄼ', + 'ᆳ' => 'ㄽ', + 'ᆴ' => 'ㄾ', + 'ᆵ' => 'ㄿ', + 'ᄚ' => 'ㅀ', + 'ᄆ' => 'ㅁ', + 'ᄇ' => 'ㅂ', + 'ᄈ' => 'ㅃ', + 'ᄡ' => 'ㅄ', + 'ᄉ' => 'ㅅ', + 'ᄊ' => 'ㅆ', + 'ᄋ' => 'ㅇ', + 'ᄌ' => 'ㅈ', + 'ᄍ' => 'ㅉ', + 'ᄎ' => 'ㅊ', + 'ᄏ' => 'ㅋ', + 'ᄐ' => 'ㅌ', + 'ᄑ' => 'ㅍ', + 'ᄒ' => 'ㅎ', + 'ᅡ' => 'ㅏ', + 'ᅢ' => 'ㅐ', + 'ᅣ' => 'ㅑ', + 'ᅤ' => 'ㅒ', + 'ᅥ' => 'ㅓ', + 'ᅦ' => 'ㅔ', + 'ᅧ' => 'ㅕ', + 'ᅨ' => 'ㅖ', + 'ᅩ' => 'ㅗ', + 'ᅪ' => 'ㅘ', + 'ᅫ' => 'ㅙ', + 'ᅬ' => 'ㅚ', + 'ᅭ' => 'ㅛ', + 'ᅮ' => 'ㅜ', + 'ᅯ' => 'ㅝ', + 'ᅰ' => 'ㅞ', + 'ᅱ' => 'ㅟ', + 'ᅲ' => 'ㅠ', + 'ᅳ' => 'ㅡ', + 'ᅴ' => 'ㅢ', + 'ᅵ' => 'ㅣ', + '¢' => '¢', + '£' => '£', + '¬' => '¬', + ' ̄' => '¯', + '¦' => '¦', + '¥' => '¥', + '₩' => '₩', + '│' => '│', + '←' => '←', + '↑' => '↑', + '→' => '→', + '↓' => '↓', + '■' => '■', + '○' => '○', + '𝐀' => 'A', + '𝐁' => 'B', + '𝐂' => 'C', + '𝐃' => 'D', + '𝐄' => 'E', + '𝐅' => 'F', + '𝐆' => 'G', + '𝐇' => 'H', + '𝐈' => 'I', + '𝐉' => 'J', + '𝐊' => 'K', + '𝐋' => 'L', + '𝐌' => 'M', + '𝐍' => 'N', + '𝐎' => 'O', + '𝐏' => 'P', + '𝐐' => 'Q', + '𝐑' => 'R', + '𝐒' => 'S', + '𝐓' => 'T', + '𝐔' => 'U', + '𝐕' => 'V', + '𝐖' => 'W', + '𝐗' => 'X', + '𝐘' => 'Y', + '𝐙' => 'Z', + '𝐚' => 'a', + '𝐛' => 'b', + '𝐜' => 'c', + '𝐝' => 'd', + '𝐞' => 'e', + '𝐟' => 'f', + '𝐠' => 'g', + '𝐡' => 'h', + '𝐢' => 'i', + '𝐣' => 'j', + '𝐤' => 'k', + '𝐥' => 'l', + '𝐦' => 'm', + '𝐧' => 'n', + '𝐨' => 'o', + '𝐩' => 'p', + '𝐪' => 'q', + '𝐫' => 'r', + '𝐬' => 's', + '𝐭' => 't', + '𝐮' => 'u', + '𝐯' => 'v', + '𝐰' => 'w', + '𝐱' => 'x', + '𝐲' => 'y', + '𝐳' => 'z', + '𝐴' => 'A', + '𝐵' => 'B', + '𝐶' => 'C', + '𝐷' => 'D', + '𝐸' => 'E', + '𝐹' => 'F', + '𝐺' => 'G', + '𝐻' => 'H', + '𝐼' => 'I', + '𝐽' => 'J', + '𝐾' => 'K', + '𝐿' => 'L', + '𝑀' => 'M', + '𝑁' => 'N', + '𝑂' => 'O', + '𝑃' => 'P', + '𝑄' => 'Q', + '𝑅' => 'R', + '𝑆' => 'S', + '𝑇' => 'T', + '𝑈' => 'U', + '𝑉' => 'V', + '𝑊' => 'W', + '𝑋' => 'X', + '𝑌' => 'Y', + '𝑍' => 'Z', + '𝑎' => 'a', + '𝑏' => 'b', + '𝑐' => 'c', + '𝑑' => 'd', + '𝑒' => 'e', + '𝑓' => 'f', + '𝑔' => 'g', + '𝑖' => 'i', + '𝑗' => 'j', + '𝑘' => 'k', + '𝑙' => 'l', + '𝑚' => 'm', + '𝑛' => 'n', + '𝑜' => 'o', + '𝑝' => 'p', + '𝑞' => 'q', + '𝑟' => 'r', + '𝑠' => 's', + '𝑡' => 't', + '𝑢' => 'u', + '𝑣' => 'v', + '𝑤' => 'w', + '𝑥' => 'x', + '𝑦' => 'y', + '𝑧' => 'z', + '𝑨' => 'A', + '𝑩' => 'B', + '𝑪' => 'C', + '𝑫' => 'D', + '𝑬' => 'E', + '𝑭' => 'F', + '𝑮' => 'G', + '𝑯' => 'H', + '𝑰' => 'I', + '𝑱' => 'J', + '𝑲' => 'K', + '𝑳' => 'L', + '𝑴' => 'M', + '𝑵' => 'N', + '𝑶' => 'O', + '𝑷' => 'P', + '𝑸' => 'Q', + '𝑹' => 'R', + '𝑺' => 'S', + '𝑻' => 'T', + '𝑼' => 'U', + '𝑽' => 'V', + '𝑾' => 'W', + '𝑿' => 'X', + '𝒀' => 'Y', + '𝒁' => 'Z', + '𝒂' => 'a', + '𝒃' => 'b', + '𝒄' => 'c', + '𝒅' => 'd', + '𝒆' => 'e', + '𝒇' => 'f', + '𝒈' => 'g', + '𝒉' => 'h', + '𝒊' => 'i', + '𝒋' => 'j', + '𝒌' => 'k', + '𝒍' => 'l', + '𝒎' => 'm', + '𝒏' => 'n', + '𝒐' => 'o', + '𝒑' => 'p', + '𝒒' => 'q', + '𝒓' => 'r', + '𝒔' => 's', + '𝒕' => 't', + '𝒖' => 'u', + '𝒗' => 'v', + '𝒘' => 'w', + '𝒙' => 'x', + '𝒚' => 'y', + '𝒛' => 'z', + '𝒜' => 'A', + '𝒞' => 'C', + '𝒟' => 'D', + '𝒢' => 'G', + '𝒥' => 'J', + '𝒦' => 'K', + '𝒩' => 'N', + '𝒪' => 'O', + '𝒫' => 'P', + '𝒬' => 'Q', + '𝒮' => 'S', + '𝒯' => 'T', + '𝒰' => 'U', + '𝒱' => 'V', + '𝒲' => 'W', + '𝒳' => 'X', + '𝒴' => 'Y', + '𝒵' => 'Z', + '𝒶' => 'a', + '𝒷' => 'b', + '𝒸' => 'c', + '𝒹' => 'd', + '𝒻' => 'f', + '𝒽' => 'h', + '𝒾' => 'i', + '𝒿' => 'j', + '𝓀' => 'k', + '𝓁' => 'l', + '𝓂' => 'm', + '𝓃' => 'n', + '𝓅' => 'p', + '𝓆' => 'q', + '𝓇' => 'r', + '𝓈' => 's', + '𝓉' => 't', + '𝓊' => 'u', + '𝓋' => 'v', + '𝓌' => 'w', + '𝓍' => 'x', + '𝓎' => 'y', + '𝓏' => 'z', + '𝓐' => 'A', + '𝓑' => 'B', + '𝓒' => 'C', + '𝓓' => 'D', + '𝓔' => 'E', + '𝓕' => 'F', + '𝓖' => 'G', + '𝓗' => 'H', + '𝓘' => 'I', + '𝓙' => 'J', + '𝓚' => 'K', + '𝓛' => 'L', + '𝓜' => 'M', + '𝓝' => 'N', + '𝓞' => 'O', + '𝓟' => 'P', + '𝓠' => 'Q', + '𝓡' => 'R', + '𝓢' => 'S', + '𝓣' => 'T', + '𝓤' => 'U', + '𝓥' => 'V', + '𝓦' => 'W', + '𝓧' => 'X', + '𝓨' => 'Y', + '𝓩' => 'Z', + '𝓪' => 'a', + '𝓫' => 'b', + '𝓬' => 'c', + '𝓭' => 'd', + '𝓮' => 'e', + '𝓯' => 'f', + '𝓰' => 'g', + '𝓱' => 'h', + '𝓲' => 'i', + '𝓳' => 'j', + '𝓴' => 'k', + '𝓵' => 'l', + '𝓶' => 'm', + '𝓷' => 'n', + '𝓸' => 'o', + '𝓹' => 'p', + '𝓺' => 'q', + '𝓻' => 'r', + '𝓼' => 's', + '𝓽' => 't', + '𝓾' => 'u', + '𝓿' => 'v', + '𝔀' => 'w', + '𝔁' => 'x', + '𝔂' => 'y', + '𝔃' => 'z', + '𝔄' => 'A', + '𝔅' => 'B', + '𝔇' => 'D', + '𝔈' => 'E', + '𝔉' => 'F', + '𝔊' => 'G', + '𝔍' => 'J', + '𝔎' => 'K', + '𝔏' => 'L', + '𝔐' => 'M', + '𝔑' => 'N', + '𝔒' => 'O', + '𝔓' => 'P', + '𝔔' => 'Q', + '𝔖' => 'S', + '𝔗' => 'T', + '𝔘' => 'U', + '𝔙' => 'V', + '𝔚' => 'W', + '𝔛' => 'X', + '𝔜' => 'Y', + '𝔞' => 'a', + '𝔟' => 'b', + '𝔠' => 'c', + '𝔡' => 'd', + '𝔢' => 'e', + '𝔣' => 'f', + '𝔤' => 'g', + '𝔥' => 'h', + '𝔦' => 'i', + '𝔧' => 'j', + '𝔨' => 'k', + '𝔩' => 'l', + '𝔪' => 'm', + '𝔫' => 'n', + '𝔬' => 'o', + '𝔭' => 'p', + '𝔮' => 'q', + '𝔯' => 'r', + '𝔰' => 's', + '𝔱' => 't', + '𝔲' => 'u', + '𝔳' => 'v', + '𝔴' => 'w', + '𝔵' => 'x', + '𝔶' => 'y', + '𝔷' => 'z', + '𝔸' => 'A', + '𝔹' => 'B', + '𝔻' => 'D', + '𝔼' => 'E', + '𝔽' => 'F', + '𝔾' => 'G', + '𝕀' => 'I', + '𝕁' => 'J', + '𝕂' => 'K', + '𝕃' => 'L', + '𝕄' => 'M', + '𝕆' => 'O', + '𝕊' => 'S', + '𝕋' => 'T', + '𝕌' => 'U', + '𝕍' => 'V', + '𝕎' => 'W', + '𝕏' => 'X', + '𝕐' => 'Y', + '𝕒' => 'a', + '𝕓' => 'b', + '𝕔' => 'c', + '𝕕' => 'd', + '𝕖' => 'e', + '𝕗' => 'f', + '𝕘' => 'g', + '𝕙' => 'h', + '𝕚' => 'i', + '𝕛' => 'j', + '𝕜' => 'k', + '𝕝' => 'l', + '𝕞' => 'm', + '𝕟' => 'n', + '𝕠' => 'o', + '𝕡' => 'p', + '𝕢' => 'q', + '𝕣' => 'r', + '𝕤' => 's', + '𝕥' => 't', + '𝕦' => 'u', + '𝕧' => 'v', + '𝕨' => 'w', + '𝕩' => 'x', + '𝕪' => 'y', + '𝕫' => 'z', + '𝕬' => 'A', + '𝕭' => 'B', + '𝕮' => 'C', + '𝕯' => 'D', + '𝕰' => 'E', + '𝕱' => 'F', + '𝕲' => 'G', + '𝕳' => 'H', + '𝕴' => 'I', + '𝕵' => 'J', + '𝕶' => 'K', + '𝕷' => 'L', + '𝕸' => 'M', + '𝕹' => 'N', + '𝕺' => 'O', + '𝕻' => 'P', + '𝕼' => 'Q', + '𝕽' => 'R', + '𝕾' => 'S', + '𝕿' => 'T', + '𝖀' => 'U', + '𝖁' => 'V', + '𝖂' => 'W', + '𝖃' => 'X', + '𝖄' => 'Y', + '𝖅' => 'Z', + '𝖆' => 'a', + '𝖇' => 'b', + '𝖈' => 'c', + '𝖉' => 'd', + '𝖊' => 'e', + '𝖋' => 'f', + '𝖌' => 'g', + '𝖍' => 'h', + '𝖎' => 'i', + '𝖏' => 'j', + '𝖐' => 'k', + '𝖑' => 'l', + '𝖒' => 'm', + '𝖓' => 'n', + '𝖔' => 'o', + '𝖕' => 'p', + '𝖖' => 'q', + '𝖗' => 'r', + '𝖘' => 's', + '𝖙' => 't', + '𝖚' => 'u', + '𝖛' => 'v', + '𝖜' => 'w', + '𝖝' => 'x', + '𝖞' => 'y', + '𝖟' => 'z', + '𝖠' => 'A', + '𝖡' => 'B', + '𝖢' => 'C', + '𝖣' => 'D', + '𝖤' => 'E', + '𝖥' => 'F', + '𝖦' => 'G', + '𝖧' => 'H', + '𝖨' => 'I', + '𝖩' => 'J', + '𝖪' => 'K', + '𝖫' => 'L', + '𝖬' => 'M', + '𝖭' => 'N', + '𝖮' => 'O', + '𝖯' => 'P', + '𝖰' => 'Q', + '𝖱' => 'R', + '𝖲' => 'S', + '𝖳' => 'T', + '𝖴' => 'U', + '𝖵' => 'V', + '𝖶' => 'W', + '𝖷' => 'X', + '𝖸' => 'Y', + '𝖹' => 'Z', + '𝖺' => 'a', + '𝖻' => 'b', + '𝖼' => 'c', + '𝖽' => 'd', + '𝖾' => 'e', + '𝖿' => 'f', + '𝗀' => 'g', + '𝗁' => 'h', + '𝗂' => 'i', + '𝗃' => 'j', + '𝗄' => 'k', + '𝗅' => 'l', + '𝗆' => 'm', + '𝗇' => 'n', + '𝗈' => 'o', + '𝗉' => 'p', + '𝗊' => 'q', + '𝗋' => 'r', + '𝗌' => 's', + '𝗍' => 't', + '𝗎' => 'u', + '𝗏' => 'v', + '𝗐' => 'w', + '𝗑' => 'x', + '𝗒' => 'y', + '𝗓' => 'z', + '𝗔' => 'A', + '𝗕' => 'B', + '𝗖' => 'C', + '𝗗' => 'D', + '𝗘' => 'E', + '𝗙' => 'F', + '𝗚' => 'G', + '𝗛' => 'H', + '𝗜' => 'I', + '𝗝' => 'J', + '𝗞' => 'K', + '𝗟' => 'L', + '𝗠' => 'M', + '𝗡' => 'N', + '𝗢' => 'O', + '𝗣' => 'P', + '𝗤' => 'Q', + '𝗥' => 'R', + '𝗦' => 'S', + '𝗧' => 'T', + '𝗨' => 'U', + '𝗩' => 'V', + '𝗪' => 'W', + '𝗫' => 'X', + '𝗬' => 'Y', + '𝗭' => 'Z', + '𝗮' => 'a', + '𝗯' => 'b', + '𝗰' => 'c', + '𝗱' => 'd', + '𝗲' => 'e', + '𝗳' => 'f', + '𝗴' => 'g', + '𝗵' => 'h', + '𝗶' => 'i', + '𝗷' => 'j', + '𝗸' => 'k', + '𝗹' => 'l', + '𝗺' => 'm', + '𝗻' => 'n', + '𝗼' => 'o', + '𝗽' => 'p', + '𝗾' => 'q', + '𝗿' => 'r', + '𝘀' => 's', + '𝘁' => 't', + '𝘂' => 'u', + '𝘃' => 'v', + '𝘄' => 'w', + '𝘅' => 'x', + '𝘆' => 'y', + '𝘇' => 'z', + '𝘈' => 'A', + '𝘉' => 'B', + '𝘊' => 'C', + '𝘋' => 'D', + '𝘌' => 'E', + '𝘍' => 'F', + '𝘎' => 'G', + '𝘏' => 'H', + '𝘐' => 'I', + '𝘑' => 'J', + '𝘒' => 'K', + '𝘓' => 'L', + '𝘔' => 'M', + '𝘕' => 'N', + '𝘖' => 'O', + '𝘗' => 'P', + '𝘘' => 'Q', + '𝘙' => 'R', + '𝘚' => 'S', + '𝘛' => 'T', + '𝘜' => 'U', + '𝘝' => 'V', + '𝘞' => 'W', + '𝘟' => 'X', + '𝘠' => 'Y', + '𝘡' => 'Z', + '𝘢' => 'a', + '𝘣' => 'b', + '𝘤' => 'c', + '𝘥' => 'd', + '𝘦' => 'e', + '𝘧' => 'f', + '𝘨' => 'g', + '𝘩' => 'h', + '𝘪' => 'i', + '𝘫' => 'j', + '𝘬' => 'k', + '𝘭' => 'l', + '𝘮' => 'm', + '𝘯' => 'n', + '𝘰' => 'o', + '𝘱' => 'p', + '𝘲' => 'q', + '𝘳' => 'r', + '𝘴' => 's', + '𝘵' => 't', + '𝘶' => 'u', + '𝘷' => 'v', + '𝘸' => 'w', + '𝘹' => 'x', + '𝘺' => 'y', + '𝘻' => 'z', + '𝘼' => 'A', + '𝘽' => 'B', + '𝘾' => 'C', + '𝘿' => 'D', + '𝙀' => 'E', + '𝙁' => 'F', + '𝙂' => 'G', + '𝙃' => 'H', + '𝙄' => 'I', + '𝙅' => 'J', + '𝙆' => 'K', + '𝙇' => 'L', + '𝙈' => 'M', + '𝙉' => 'N', + '𝙊' => 'O', + '𝙋' => 'P', + '𝙌' => 'Q', + '𝙍' => 'R', + '𝙎' => 'S', + '𝙏' => 'T', + '𝙐' => 'U', + '𝙑' => 'V', + '𝙒' => 'W', + '𝙓' => 'X', + '𝙔' => 'Y', + '𝙕' => 'Z', + '𝙖' => 'a', + '𝙗' => 'b', + '𝙘' => 'c', + '𝙙' => 'd', + '𝙚' => 'e', + '𝙛' => 'f', + '𝙜' => 'g', + '𝙝' => 'h', + '𝙞' => 'i', + '𝙟' => 'j', + '𝙠' => 'k', + '𝙡' => 'l', + '𝙢' => 'm', + '𝙣' => 'n', + '𝙤' => 'o', + '𝙥' => 'p', + '𝙦' => 'q', + '𝙧' => 'r', + '𝙨' => 's', + '𝙩' => 't', + '𝙪' => 'u', + '𝙫' => 'v', + '𝙬' => 'w', + '𝙭' => 'x', + '𝙮' => 'y', + '𝙯' => 'z', + '𝙰' => 'A', + '𝙱' => 'B', + '𝙲' => 'C', + '𝙳' => 'D', + '𝙴' => 'E', + '𝙵' => 'F', + '𝙶' => 'G', + '𝙷' => 'H', + '𝙸' => 'I', + '𝙹' => 'J', + '𝙺' => 'K', + '𝙻' => 'L', + '𝙼' => 'M', + '𝙽' => 'N', + '𝙾' => 'O', + '𝙿' => 'P', + '𝚀' => 'Q', + '𝚁' => 'R', + '𝚂' => 'S', + '𝚃' => 'T', + '𝚄' => 'U', + '𝚅' => 'V', + '𝚆' => 'W', + '𝚇' => 'X', + '𝚈' => 'Y', + '𝚉' => 'Z', + '𝚊' => 'a', + '𝚋' => 'b', + '𝚌' => 'c', + '𝚍' => 'd', + '𝚎' => 'e', + '𝚏' => 'f', + '𝚐' => 'g', + '𝚑' => 'h', + '𝚒' => 'i', + '𝚓' => 'j', + '𝚔' => 'k', + '𝚕' => 'l', + '𝚖' => 'm', + '𝚗' => 'n', + '𝚘' => 'o', + '𝚙' => 'p', + '𝚚' => 'q', + '𝚛' => 'r', + '𝚜' => 's', + '𝚝' => 't', + '𝚞' => 'u', + '𝚟' => 'v', + '𝚠' => 'w', + '𝚡' => 'x', + '𝚢' => 'y', + '𝚣' => 'z', + '𝚤' => 'ı', + '𝚥' => 'ȷ', + '𝚨' => 'Α', + '𝚩' => 'Β', + '𝚪' => 'Γ', + '𝚫' => 'Δ', + '𝚬' => 'Ε', + '𝚭' => 'Ζ', + '𝚮' => 'Η', + '𝚯' => 'Θ', + '𝚰' => 'Ι', + '𝚱' => 'Κ', + '𝚲' => 'Λ', + '𝚳' => 'Μ', + '𝚴' => 'Ν', + '𝚵' => 'Ξ', + '𝚶' => 'Ο', + '𝚷' => 'Π', + '𝚸' => 'Ρ', + '𝚹' => 'ϴ', + '𝚺' => 'Σ', + '𝚻' => 'Τ', + '𝚼' => 'Υ', + '𝚽' => 'Φ', + '𝚾' => 'Χ', + '𝚿' => 'Ψ', + '𝛀' => 'Ω', + '𝛁' => '∇', + '𝛂' => 'α', + '𝛃' => 'β', + '𝛄' => 'γ', + '𝛅' => 'δ', + '𝛆' => 'ε', + '𝛇' => 'ζ', + '𝛈' => 'η', + '𝛉' => 'θ', + '𝛊' => 'ι', + '𝛋' => 'κ', + '𝛌' => 'λ', + '𝛍' => 'μ', + '𝛎' => 'ν', + '𝛏' => 'ξ', + '𝛐' => 'ο', + '𝛑' => 'π', + '𝛒' => 'ρ', + '𝛓' => 'ς', + '𝛔' => 'σ', + '𝛕' => 'τ', + '𝛖' => 'υ', + '𝛗' => 'φ', + '𝛘' => 'χ', + '𝛙' => 'ψ', + '𝛚' => 'ω', + '𝛛' => '∂', + '𝛜' => 'ϵ', + '𝛝' => 'ϑ', + '𝛞' => 'ϰ', + '𝛟' => 'ϕ', + '𝛠' => 'ϱ', + '𝛡' => 'ϖ', + '𝛢' => 'Α', + '𝛣' => 'Β', + '𝛤' => 'Γ', + '𝛥' => 'Δ', + '𝛦' => 'Ε', + '𝛧' => 'Ζ', + '𝛨' => 'Η', + '𝛩' => 'Θ', + '𝛪' => 'Ι', + '𝛫' => 'Κ', + '𝛬' => 'Λ', + '𝛭' => 'Μ', + '𝛮' => 'Ν', + '𝛯' => 'Ξ', + '𝛰' => 'Ο', + '𝛱' => 'Π', + '𝛲' => 'Ρ', + '𝛳' => 'ϴ', + '𝛴' => 'Σ', + '𝛵' => 'Τ', + '𝛶' => 'Υ', + '𝛷' => 'Φ', + '𝛸' => 'Χ', + '𝛹' => 'Ψ', + '𝛺' => 'Ω', + '𝛻' => '∇', + '𝛼' => 'α', + '𝛽' => 'β', + '𝛾' => 'γ', + '𝛿' => 'δ', + '𝜀' => 'ε', + '𝜁' => 'ζ', + '𝜂' => 'η', + '𝜃' => 'θ', + '𝜄' => 'ι', + '𝜅' => 'κ', + '𝜆' => 'λ', + '𝜇' => 'μ', + '𝜈' => 'ν', + '𝜉' => 'ξ', + '𝜊' => 'ο', + '𝜋' => 'π', + '𝜌' => 'ρ', + '𝜍' => 'ς', + '𝜎' => 'σ', + '𝜏' => 'τ', + '𝜐' => 'υ', + '𝜑' => 'φ', + '𝜒' => 'χ', + '𝜓' => 'ψ', + '𝜔' => 'ω', + '𝜕' => '∂', + '𝜖' => 'ϵ', + '𝜗' => 'ϑ', + '𝜘' => 'ϰ', + '𝜙' => 'ϕ', + '𝜚' => 'ϱ', + '𝜛' => 'ϖ', + '𝜜' => 'Α', + '𝜝' => 'Β', + '𝜞' => 'Γ', + '𝜟' => 'Δ', + '𝜠' => 'Ε', + '𝜡' => 'Ζ', + '𝜢' => 'Η', + '𝜣' => 'Θ', + '𝜤' => 'Ι', + '𝜥' => 'Κ', + '𝜦' => 'Λ', + '𝜧' => 'Μ', + '𝜨' => 'Ν', + '𝜩' => 'Ξ', + '𝜪' => 'Ο', + '𝜫' => 'Π', + '𝜬' => 'Ρ', + '𝜭' => 'ϴ', + '𝜮' => 'Σ', + '𝜯' => 'Τ', + '𝜰' => 'Υ', + '𝜱' => 'Φ', + '𝜲' => 'Χ', + '𝜳' => 'Ψ', + '𝜴' => 'Ω', + '𝜵' => '∇', + '𝜶' => 'α', + '𝜷' => 'β', + '𝜸' => 'γ', + '𝜹' => 'δ', + '𝜺' => 'ε', + '𝜻' => 'ζ', + '𝜼' => 'η', + '𝜽' => 'θ', + '𝜾' => 'ι', + '𝜿' => 'κ', + '𝝀' => 'λ', + '𝝁' => 'μ', + '𝝂' => 'ν', + '𝝃' => 'ξ', + '𝝄' => 'ο', + '𝝅' => 'π', + '𝝆' => 'ρ', + '𝝇' => 'ς', + '𝝈' => 'σ', + '𝝉' => 'τ', + '𝝊' => 'υ', + '𝝋' => 'φ', + '𝝌' => 'χ', + '𝝍' => 'ψ', + '𝝎' => 'ω', + '𝝏' => '∂', + '𝝐' => 'ϵ', + '𝝑' => 'ϑ', + '𝝒' => 'ϰ', + '𝝓' => 'ϕ', + '𝝔' => 'ϱ', + '𝝕' => 'ϖ', + '𝝖' => 'Α', + '𝝗' => 'Β', + '𝝘' => 'Γ', + '𝝙' => 'Δ', + '𝝚' => 'Ε', + '𝝛' => 'Ζ', + '𝝜' => 'Η', + '𝝝' => 'Θ', + '𝝞' => 'Ι', + '𝝟' => 'Κ', + '𝝠' => 'Λ', + '𝝡' => 'Μ', + '𝝢' => 'Ν', + '𝝣' => 'Ξ', + '𝝤' => 'Ο', + '𝝥' => 'Π', + '𝝦' => 'Ρ', + '𝝧' => 'ϴ', + '𝝨' => 'Σ', + '𝝩' => 'Τ', + '𝝪' => 'Υ', + '𝝫' => 'Φ', + '𝝬' => 'Χ', + '𝝭' => 'Ψ', + '𝝮' => 'Ω', + '𝝯' => '∇', + '𝝰' => 'α', + '𝝱' => 'β', + '𝝲' => 'γ', + '𝝳' => 'δ', + '𝝴' => 'ε', + '𝝵' => 'ζ', + '𝝶' => 'η', + '𝝷' => 'θ', + '𝝸' => 'ι', + '𝝹' => 'κ', + '𝝺' => 'λ', + '𝝻' => 'μ', + '𝝼' => 'ν', + '𝝽' => 'ξ', + '𝝾' => 'ο', + '𝝿' => 'π', + '𝞀' => 'ρ', + '𝞁' => 'ς', + '𝞂' => 'σ', + '𝞃' => 'τ', + '𝞄' => 'υ', + '𝞅' => 'φ', + '𝞆' => 'χ', + '𝞇' => 'ψ', + '𝞈' => 'ω', + '𝞉' => '∂', + '𝞊' => 'ϵ', + '𝞋' => 'ϑ', + '𝞌' => 'ϰ', + '𝞍' => 'ϕ', + '𝞎' => 'ϱ', + '𝞏' => 'ϖ', + '𝞐' => 'Α', + '𝞑' => 'Β', + '𝞒' => 'Γ', + '𝞓' => 'Δ', + '𝞔' => 'Ε', + '𝞕' => 'Ζ', + '𝞖' => 'Η', + '𝞗' => 'Θ', + '𝞘' => 'Ι', + '𝞙' => 'Κ', + '𝞚' => 'Λ', + '𝞛' => 'Μ', + '𝞜' => 'Ν', + '𝞝' => 'Ξ', + '𝞞' => 'Ο', + '𝞟' => 'Π', + '𝞠' => 'Ρ', + '𝞡' => 'ϴ', + '𝞢' => 'Σ', + '𝞣' => 'Τ', + '𝞤' => 'Υ', + '𝞥' => 'Φ', + '𝞦' => 'Χ', + '𝞧' => 'Ψ', + '𝞨' => 'Ω', + '𝞩' => '∇', + '𝞪' => 'α', + '𝞫' => 'β', + '𝞬' => 'γ', + '𝞭' => 'δ', + '𝞮' => 'ε', + '𝞯' => 'ζ', + '𝞰' => 'η', + '𝞱' => 'θ', + '𝞲' => 'ι', + '𝞳' => 'κ', + '𝞴' => 'λ', + '𝞵' => 'μ', + '𝞶' => 'ν', + '𝞷' => 'ξ', + '𝞸' => 'ο', + '𝞹' => 'π', + '𝞺' => 'ρ', + '𝞻' => 'ς', + '𝞼' => 'σ', + '𝞽' => 'τ', + '𝞾' => 'υ', + '𝞿' => 'φ', + '𝟀' => 'χ', + '𝟁' => 'ψ', + '𝟂' => 'ω', + '𝟃' => '∂', + '𝟄' => 'ϵ', + '𝟅' => 'ϑ', + '𝟆' => 'ϰ', + '𝟇' => 'ϕ', + '𝟈' => 'ϱ', + '𝟉' => 'ϖ', + '𝟊' => 'Ϝ', + '𝟋' => 'ϝ', + '𝟎' => '0', + '𝟏' => '1', + '𝟐' => '2', + '𝟑' => '3', + '𝟒' => '4', + '𝟓' => '5', + '𝟔' => '6', + '𝟕' => '7', + '𝟖' => '8', + '𝟗' => '9', + '𝟘' => '0', + '𝟙' => '1', + '𝟚' => '2', + '𝟛' => '3', + '𝟜' => '4', + '𝟝' => '5', + '𝟞' => '6', + '𝟟' => '7', + '𝟠' => '8', + '𝟡' => '9', + '𝟢' => '0', + '𝟣' => '1', + '𝟤' => '2', + '𝟥' => '3', + '𝟦' => '4', + '𝟧' => '5', + '𝟨' => '6', + '𝟩' => '7', + '𝟪' => '8', + '𝟫' => '9', + '𝟬' => '0', + '𝟭' => '1', + '𝟮' => '2', + '𝟯' => '3', + '𝟰' => '4', + '𝟱' => '5', + '𝟲' => '6', + '𝟳' => '7', + '𝟴' => '8', + '𝟵' => '9', + '𝟶' => '0', + '𝟷' => '1', + '𝟸' => '2', + '𝟹' => '3', + '𝟺' => '4', + '𝟻' => '5', + '𝟼' => '6', + '𝟽' => '7', + '𝟾' => '8', + '𝟿' => '9', + '𞸀' => 'ا', + '𞸁' => 'ب', + '𞸂' => 'ج', + '𞸃' => 'د', + '𞸅' => 'و', + '𞸆' => 'ز', + '𞸇' => 'ح', + '𞸈' => 'ط', + '𞸉' => 'ي', + '𞸊' => 'ك', + '𞸋' => 'ل', + '𞸌' => 'م', + '𞸍' => 'ن', + '𞸎' => 'س', + '𞸏' => 'ع', + '𞸐' => 'ف', + '𞸑' => 'ص', + '𞸒' => 'ق', + '𞸓' => 'ر', + '𞸔' => 'ش', + '𞸕' => 'ت', + '𞸖' => 'ث', + '𞸗' => 'خ', + '𞸘' => 'ذ', + '𞸙' => 'ض', + '𞸚' => 'ظ', + '𞸛' => 'غ', + '𞸜' => 'ٮ', + '𞸝' => 'ں', + '𞸞' => 'ڡ', + '𞸟' => 'ٯ', + '𞸡' => 'ب', + '𞸢' => 'ج', + '𞸤' => 'ه', + '𞸧' => 'ح', + '𞸩' => 'ي', + '𞸪' => 'ك', + '𞸫' => 'ل', + '𞸬' => 'م', + '𞸭' => 'ن', + '𞸮' => 'س', + '𞸯' => 'ع', + '𞸰' => 'ف', + '𞸱' => 'ص', + '𞸲' => 'ق', + '𞸴' => 'ش', + '𞸵' => 'ت', + '𞸶' => 'ث', + '𞸷' => 'خ', + '𞸹' => 'ض', + '𞸻' => 'غ', + '𞹂' => 'ج', + '𞹇' => 'ح', + '𞹉' => 'ي', + '𞹋' => 'ل', + '𞹍' => 'ن', + '𞹎' => 'س', + '𞹏' => 'ع', + '𞹑' => 'ص', + '𞹒' => 'ق', + '𞹔' => 'ش', + '𞹗' => 'خ', + '𞹙' => 'ض', + '𞹛' => 'غ', + '𞹝' => 'ں', + '𞹟' => 'ٯ', + '𞹡' => 'ب', + '𞹢' => 'ج', + '𞹤' => 'ه', + '𞹧' => 'ح', + '𞹨' => 'ط', + '𞹩' => 'ي', + '𞹪' => 'ك', + '𞹬' => 'م', + '𞹭' => 'ن', + '𞹮' => 'س', + '𞹯' => 'ع', + '𞹰' => 'ف', + '𞹱' => 'ص', + '𞹲' => 'ق', + '𞹴' => 'ش', + '𞹵' => 'ت', + '𞹶' => 'ث', + '𞹷' => 'خ', + '𞹹' => 'ض', + '𞹺' => 'ظ', + '𞹻' => 'غ', + '𞹼' => 'ٮ', + '𞹾' => 'ڡ', + '𞺀' => 'ا', + '𞺁' => 'ب', + '𞺂' => 'ج', + '𞺃' => 'د', + '𞺄' => 'ه', + '𞺅' => 'و', + '𞺆' => 'ز', + '𞺇' => 'ح', + '𞺈' => 'ط', + '𞺉' => 'ي', + '𞺋' => 'ل', + '𞺌' => 'م', + '𞺍' => 'ن', + '𞺎' => 'س', + '𞺏' => 'ع', + '𞺐' => 'ف', + '𞺑' => 'ص', + '𞺒' => 'ق', + '𞺓' => 'ر', + '𞺔' => 'ش', + '𞺕' => 'ت', + '𞺖' => 'ث', + '𞺗' => 'خ', + '𞺘' => 'ذ', + '𞺙' => 'ض', + '𞺚' => 'ظ', + '𞺛' => 'غ', + '𞺡' => 'ب', + '𞺢' => 'ج', + '𞺣' => 'د', + '𞺥' => 'و', + '𞺦' => 'ز', + '𞺧' => 'ح', + '𞺨' => 'ط', + '𞺩' => 'ي', + '𞺫' => 'ل', + '𞺬' => 'م', + '𞺭' => 'ن', + '𞺮' => 'س', + '𞺯' => 'ع', + '𞺰' => 'ف', + '𞺱' => 'ص', + '𞺲' => 'ق', + '𞺳' => 'ر', + '𞺴' => 'ش', + '𞺵' => 'ت', + '𞺶' => 'ث', + '𞺷' => 'خ', + '𞺸' => 'ذ', + '𞺹' => 'ض', + '𞺺' => 'ظ', + '𞺻' => 'غ', + '🄀' => '0.', + '🄁' => '0,', + '🄂' => '1,', + '🄃' => '2,', + '🄄' => '3,', + '🄅' => '4,', + '🄆' => '5,', + '🄇' => '6,', + '🄈' => '7,', + '🄉' => '8,', + '🄊' => '9,', + '🄐' => '(A)', + '🄑' => '(B)', + '🄒' => '(C)', + '🄓' => '(D)', + '🄔' => '(E)', + '🄕' => '(F)', + '🄖' => '(G)', + '🄗' => '(H)', + '🄘' => '(I)', + '🄙' => '(J)', + '🄚' => '(K)', + '🄛' => '(L)', + '🄜' => '(M)', + '🄝' => '(N)', + '🄞' => '(O)', + '🄟' => '(P)', + '🄠' => '(Q)', + '🄡' => '(R)', + '🄢' => '(S)', + '🄣' => '(T)', + '🄤' => '(U)', + '🄥' => '(V)', + '🄦' => '(W)', + '🄧' => '(X)', + '🄨' => '(Y)', + '🄩' => '(Z)', + '🄪' => '〔S〕', + '🄫' => '(C)', + '🄬' => '(R)', + '🄭' => '(CD)', + '🄮' => '(WZ)', + '🄰' => 'A', + '🄱' => 'B', + '🄲' => 'C', + '🄳' => 'D', + '🄴' => 'E', + '🄵' => 'F', + '🄶' => 'G', + '🄷' => 'H', + '🄸' => 'I', + '🄹' => 'J', + '🄺' => 'K', + '🄻' => 'L', + '🄼' => 'M', + '🄽' => 'N', + '🄾' => 'O', + '🄿' => 'P', + '🅀' => 'Q', + '🅁' => 'R', + '🅂' => 'S', + '🅃' => 'T', + '🅄' => 'U', + '🅅' => 'V', + '🅆' => 'W', + '🅇' => 'X', + '🅈' => 'Y', + '🅉' => 'Z', + '🅊' => 'HV', + '🅋' => 'MV', + '🅌' => 'SD', + '🅍' => 'SS', + '🅎' => 'PPV', + '🅏' => 'WC', + '🆐' => 'DJ', + '🈀' => 'ほか', + '🈁' => 'ココ', + '🈂' => 'サ', + '🈐' => '手', + '🈑' => '字', + '🈒' => '双', + '🈓' => 'デ', + '🈔' => '二', + '🈕' => '多', + '🈖' => '解', + '🈗' => '天', + '🈘' => '交', + '🈙' => '映', + '🈚' => '無', + '🈛' => '料', + '🈜' => '前', + '🈝' => '後', + '🈞' => '再', + '🈟' => '新', + '🈠' => '初', + '🈡' => '終', + '🈢' => '生', + '🈣' => '販', + '🈤' => '声', + '🈥' => '吹', + '🈦' => '演', + '🈧' => '投', + '🈨' => '捕', + '🈩' => '一', + '🈪' => '三', + '🈫' => '遊', + '🈬' => '左', + '🈭' => '中', + '🈮' => '右', + '🈯' => '指', + '🈰' => '走', + '🈱' => '打', + '🈲' => '禁', + '🈳' => '空', + '🈴' => '合', + '🈵' => '満', + '🈶' => '有', + '🈷' => '月', + '🈸' => '申', + '🈹' => '割', + '🈺' => '営', + '🉀' => '〔本〕', + '🉁' => '〔三〕', + '🉂' => '〔二〕', + '🉃' => '〔安〕', + '🉄' => '〔点〕', + '🉅' => '〔打〕', + '🉆' => '〔盗〕', + '🉇' => '〔勝〕', + '🉈' => '〔敗〕', + '🉐' => '(得)', + '🉑' => '(可)', + '丽' => '丽', + '丸' => '丸', + '乁' => '乁', + '𠄢' => '𠄢', + '你' => '你', + '侮' => '侮', + '侻' => '侻', + '倂' => '倂', + '偺' => '偺', + '備' => '備', + '僧' => '僧', + '像' => '像', + '㒞' => '㒞', + '𠘺' => '𠘺', + '免' => '免', + '兔' => '兔', + '兤' => '兤', + '具' => '具', + '𠔜' => '𠔜', + '㒹' => '㒹', + '內' => '內', + '再' => '再', + '𠕋' => '𠕋', + '冗' => '冗', + '冤' => '冤', + '仌' => '仌', + '冬' => '冬', + '况' => '况', + '𩇟' => '𩇟', + '凵' => '凵', + '刃' => '刃', + '㓟' => '㓟', + '刻' => '刻', + '剆' => '剆', + '割' => '割', + '剷' => '剷', + '㔕' => '㔕', + '勇' => '勇', + '勉' => '勉', + '勤' => '勤', + '勺' => '勺', + '包' => '包', + '匆' => '匆', + '北' => '北', + '卉' => '卉', + '卑' => '卑', + '博' => '博', + '即' => '即', + '卽' => '卽', + '卿' => '卿', + '卿' => '卿', + '卿' => '卿', + '𠨬' => '𠨬', + '灰' => '灰', + '及' => '及', + '叟' => '叟', + '𠭣' => '𠭣', + '叫' => '叫', + '叱' => '叱', + '吆' => '吆', + '咞' => '咞', + '吸' => '吸', + '呈' => '呈', + '周' => '周', + '咢' => '咢', + '哶' => '哶', + '唐' => '唐', + '啓' => '啓', + '啣' => '啣', + '善' => '善', + '善' => '善', + '喙' => '喙', + '喫' => '喫', + '喳' => '喳', + '嗂' => '嗂', + '圖' => '圖', + '嘆' => '嘆', + '圗' => '圗', + '噑' => '噑', + '噴' => '噴', + '切' => '切', + '壮' => '壮', + '城' => '城', + '埴' => '埴', + '堍' => '堍', + '型' => '型', + '堲' => '堲', + '報' => '報', + '墬' => '墬', + '𡓤' => '𡓤', + '売' => '売', + '壷' => '壷', + '夆' => '夆', + '多' => '多', + '夢' => '夢', + '奢' => '奢', + '𡚨' => '𡚨', + '𡛪' => '𡛪', + '姬' => '姬', + '娛' => '娛', + '娧' => '娧', + '姘' => '姘', + '婦' => '婦', + '㛮' => '㛮', + '㛼' => '㛼', + '嬈' => '嬈', + '嬾' => '嬾', + '嬾' => '嬾', + '𡧈' => '𡧈', + '寃' => '寃', + '寘' => '寘', + '寧' => '寧', + '寳' => '寳', + '𡬘' => '𡬘', + '寿' => '寿', + '将' => '将', + '当' => '当', + '尢' => '尢', + '㞁' => '㞁', + '屠' => '屠', + '屮' => '屮', + '峀' => '峀', + '岍' => '岍', + '𡷤' => '𡷤', + '嵃' => '嵃', + '𡷦' => '𡷦', + '嵮' => '嵮', + '嵫' => '嵫', + '嵼' => '嵼', + '巡' => '巡', + '巢' => '巢', + '㠯' => '㠯', + '巽' => '巽', + '帨' => '帨', + '帽' => '帽', + '幩' => '幩', + '㡢' => '㡢', + '𢆃' => '𢆃', + '㡼' => '㡼', + '庰' => '庰', + '庳' => '庳', + '庶' => '庶', + '廊' => '廊', + '𪎒' => '𪎒', + '廾' => '廾', + '𢌱' => '𢌱', + '𢌱' => '𢌱', + '舁' => '舁', + '弢' => '弢', + '弢' => '弢', + '㣇' => '㣇', + '𣊸' => '𣊸', + '𦇚' => '𦇚', + '形' => '形', + '彫' => '彫', + '㣣' => '㣣', + '徚' => '徚', + '忍' => '忍', + '志' => '志', + '忹' => '忹', + '悁' => '悁', + '㤺' => '㤺', + '㤜' => '㤜', + '悔' => '悔', + '𢛔' => '𢛔', + '惇' => '惇', + '慈' => '慈', + '慌' => '慌', + '慎' => '慎', + '慌' => '慌', + '慺' => '慺', + '憎' => '憎', + '憲' => '憲', + '憤' => '憤', + '憯' => '憯', + '懞' => '懞', + '懲' => '懲', + '懶' => '懶', + '成' => '成', + '戛' => '戛', + '扝' => '扝', + '抱' => '抱', + '拔' => '拔', + '捐' => '捐', + '𢬌' => '𢬌', + '挽' => '挽', + '拼' => '拼', + '捨' => '捨', + '掃' => '掃', + '揤' => '揤', + '𢯱' => '𢯱', + '搢' => '搢', + '揅' => '揅', + '掩' => '掩', + '㨮' => '㨮', + '摩' => '摩', + '摾' => '摾', + '撝' => '撝', + '摷' => '摷', + '㩬' => '㩬', + '敏' => '敏', + '敬' => '敬', + '𣀊' => '𣀊', + '旣' => '旣', + '書' => '書', + '晉' => '晉', + '㬙' => '㬙', + '暑' => '暑', + '㬈' => '㬈', + '㫤' => '㫤', + '冒' => '冒', + '冕' => '冕', + '最' => '最', + '暜' => '暜', + '肭' => '肭', + '䏙' => '䏙', + '朗' => '朗', + '望' => '望', + '朡' => '朡', + '杞' => '杞', + '杓' => '杓', + '𣏃' => '𣏃', + '㭉' => '㭉', + '柺' => '柺', + '枅' => '枅', + '桒' => '桒', + '梅' => '梅', + '𣑭' => '𣑭', + '梎' => '梎', + '栟' => '栟', + '椔' => '椔', + '㮝' => '㮝', + '楂' => '楂', + '榣' => '榣', + '槪' => '槪', + '檨' => '檨', + '𣚣' => '𣚣', + '櫛' => '櫛', + '㰘' => '㰘', + '次' => '次', + '𣢧' => '𣢧', + '歔' => '歔', + '㱎' => '㱎', + '歲' => '歲', + '殟' => '殟', + '殺' => '殺', + '殻' => '殻', + '𣪍' => '𣪍', + '𡴋' => '𡴋', + '𣫺' => '𣫺', + '汎' => '汎', + '𣲼' => '𣲼', + '沿' => '沿', + '泍' => '泍', + '汧' => '汧', + '洖' => '洖', + '派' => '派', + '海' => '海', + '流' => '流', + '浩' => '浩', + '浸' => '浸', + '涅' => '涅', + '𣴞' => '𣴞', + '洴' => '洴', + '港' => '港', + '湮' => '湮', + '㴳' => '㴳', + '滋' => '滋', + '滇' => '滇', + '𣻑' => '𣻑', + '淹' => '淹', + '潮' => '潮', + '𣽞' => '𣽞', + '𣾎' => '𣾎', + '濆' => '濆', + '瀹' => '瀹', + '瀞' => '瀞', + '瀛' => '瀛', + '㶖' => '㶖', + '灊' => '灊', + '災' => '災', + '灷' => '灷', + '炭' => '炭', + '𠔥' => '𠔥', + '煅' => '煅', + '𤉣' => '𤉣', + '熜' => '熜', + '𤎫' => '𤎫', + '爨' => '爨', + '爵' => '爵', + '牐' => '牐', + '𤘈' => '𤘈', + '犀' => '犀', + '犕' => '犕', + '𤜵' => '𤜵', + '𤠔' => '𤠔', + '獺' => '獺', + '王' => '王', + '㺬' => '㺬', + '玥' => '玥', + '㺸' => '㺸', + '㺸' => '㺸', + '瑇' => '瑇', + '瑜' => '瑜', + '瑱' => '瑱', + '璅' => '璅', + '瓊' => '瓊', + '㼛' => '㼛', + '甤' => '甤', + '𤰶' => '𤰶', + '甾' => '甾', + '𤲒' => '𤲒', + '異' => '異', + '𢆟' => '𢆟', + '瘐' => '瘐', + '𤾡' => '𤾡', + '𤾸' => '𤾸', + '𥁄' => '𥁄', + '㿼' => '㿼', + '䀈' => '䀈', + '直' => '直', + '𥃳' => '𥃳', + '𥃲' => '𥃲', + '𥄙' => '𥄙', + '𥄳' => '𥄳', + '眞' => '眞', + '真' => '真', + '真' => '真', + '睊' => '睊', + '䀹' => '䀹', + '瞋' => '瞋', + '䁆' => '䁆', + '䂖' => '䂖', + '𥐝' => '𥐝', + '硎' => '硎', + '碌' => '碌', + '磌' => '磌', + '䃣' => '䃣', + '𥘦' => '𥘦', + '祖' => '祖', + '𥚚' => '𥚚', + '𥛅' => '𥛅', + '福' => '福', + '秫' => '秫', + '䄯' => '䄯', + '穀' => '穀', + '穊' => '穊', + '穏' => '穏', + '𥥼' => '𥥼', + '𥪧' => '𥪧', + '𥪧' => '𥪧', + '竮' => '竮', + '䈂' => '䈂', + '𥮫' => '𥮫', + '篆' => '篆', + '築' => '築', + '䈧' => '䈧', + '𥲀' => '𥲀', + '糒' => '糒', + '䊠' => '䊠', + '糨' => '糨', + '糣' => '糣', + '紀' => '紀', + '𥾆' => '𥾆', + '絣' => '絣', + '䌁' => '䌁', + '緇' => '緇', + '縂' => '縂', + '繅' => '繅', + '䌴' => '䌴', + '𦈨' => '𦈨', + '𦉇' => '𦉇', + '䍙' => '䍙', + '𦋙' => '𦋙', + '罺' => '罺', + '𦌾' => '𦌾', + '羕' => '羕', + '翺' => '翺', + '者' => '者', + '𦓚' => '𦓚', + '𦔣' => '𦔣', + '聠' => '聠', + '𦖨' => '𦖨', + '聰' => '聰', + '𣍟' => '𣍟', + '䏕' => '䏕', + '育' => '育', + '脃' => '脃', + '䐋' => '䐋', + '脾' => '脾', + '媵' => '媵', + '𦞧' => '𦞧', + '𦞵' => '𦞵', + '𣎓' => '𣎓', + '𣎜' => '𣎜', + '舁' => '舁', + '舄' => '舄', + '辞' => '辞', + '䑫' => '䑫', + '芑' => '芑', + '芋' => '芋', + '芝' => '芝', + '劳' => '劳', + '花' => '花', + '芳' => '芳', + '芽' => '芽', + '苦' => '苦', + '𦬼' => '𦬼', + '若' => '若', + '茝' => '茝', + '荣' => '荣', + '莭' => '莭', + '茣' => '茣', + '莽' => '莽', + '菧' => '菧', + '著' => '著', + '荓' => '荓', + '菊' => '菊', + '菌' => '菌', + '菜' => '菜', + '𦰶' => '𦰶', + '𦵫' => '𦵫', + '𦳕' => '𦳕', + '䔫' => '䔫', + '蓱' => '蓱', + '蓳' => '蓳', + '蔖' => '蔖', + '𧏊' => '𧏊', + '蕤' => '蕤', + '𦼬' => '𦼬', + '䕝' => '䕝', + '䕡' => '䕡', + '𦾱' => '𦾱', + '𧃒' => '𧃒', + '䕫' => '䕫', + '虐' => '虐', + '虜' => '虜', + '虧' => '虧', + '虩' => '虩', + '蚩' => '蚩', + '蚈' => '蚈', + '蜎' => '蜎', + '蛢' => '蛢', + '蝹' => '蝹', + '蜨' => '蜨', + '蝫' => '蝫', + '螆' => '螆', + '䗗' => '䗗', + '蟡' => '蟡', + '蠁' => '蠁', + '䗹' => '䗹', + '衠' => '衠', + '衣' => '衣', + '𧙧' => '𧙧', + '裗' => '裗', + '裞' => '裞', + '䘵' => '䘵', + '裺' => '裺', + '㒻' => '㒻', + '𧢮' => '𧢮', + '𧥦' => '𧥦', + '䚾' => '䚾', + '䛇' => '䛇', + '誠' => '誠', + '諭' => '諭', + '變' => '變', + '豕' => '豕', + '𧲨' => '𧲨', + '貫' => '貫', + '賁' => '賁', + '贛' => '贛', + '起' => '起', + '𧼯' => '𧼯', + '𠠄' => '𠠄', + '跋' => '跋', + '趼' => '趼', + '跰' => '跰', + '𠣞' => '𠣞', + '軔' => '軔', + '輸' => '輸', + '𨗒' => '𨗒', + '𨗭' => '𨗭', + '邔' => '邔', + '郱' => '郱', + '鄑' => '鄑', + '𨜮' => '𨜮', + '鄛' => '鄛', + '鈸' => '鈸', + '鋗' => '鋗', + '鋘' => '鋘', + '鉼' => '鉼', + '鏹' => '鏹', + '鐕' => '鐕', + '𨯺' => '𨯺', + '開' => '開', + '䦕' => '䦕', + '閷' => '閷', + '𨵷' => '𨵷', + '䧦' => '䧦', + '雃' => '雃', + '嶲' => '嶲', + '霣' => '霣', + '𩅅' => '𩅅', + '𩈚' => '𩈚', + '䩮' => '䩮', + '䩶' => '䩶', + '韠' => '韠', + '𩐊' => '𩐊', + '䪲' => '䪲', + '𩒖' => '𩒖', + '頋' => '頋', + '頋' => '頋', + '頩' => '頩', + '𩖶' => '𩖶', + '飢' => '飢', + '䬳' => '䬳', + '餩' => '餩', + '馧' => '馧', + '駂' => '駂', + '駾' => '駾', + '䯎' => '䯎', + '𩬰' => '𩬰', + '鬒' => '鬒', + '鱀' => '鱀', + '鳽' => '鳽', + '䳎' => '䳎', + '䳭' => '䳭', + '鵧' => '鵧', + '𪃎' => '𪃎', + '䳸' => '䳸', + '𪄅' => '𪄅', + '𪈎' => '𪈎', + '𪊑' => '𪊑', + '麻' => '麻', + '䵖' => '䵖', + '黹' => '黹', + '黾' => '黾', + '鼅' => '鼅', + '鼏' => '鼏', + '鼖' => '鼖', + '鼻' => '鼻', + '𪘀' => '𪘀', + 'Æ' => 'AE', + 'Ð' => 'D', + 'Ø' => 'O', + 'Þ' => 'TH', + 'ß' => 'ss', + 'æ' => 'ae', + 'ð' => 'd', + 'ø' => 'o', + 'þ' => 'th', + 'Đ' => 'D', + 'đ' => 'd', + 'Ħ' => 'H', + 'ħ' => 'h', + 'ı' => 'i', + 'ĸ' => 'q', + 'Ł' => 'L', + 'ł' => 'l', + 'Ŋ' => 'N', + 'ŋ' => 'n', + 'Œ' => 'OE', + 'œ' => 'oe', + 'Ŧ' => 'T', + 'ŧ' => 't', + 'ƀ' => 'b', + 'Ɓ' => 'B', + 'Ƃ' => 'B', + 'ƃ' => 'b', + 'Ƈ' => 'C', + 'ƈ' => 'c', + 'Ɖ' => 'D', + 'Ɗ' => 'D', + 'Ƌ' => 'D', + 'ƌ' => 'd', + 'Ɛ' => 'E', + 'Ƒ' => 'F', + 'ƒ' => 'f', + 'Ɠ' => 'G', + 'ƕ' => 'hv', + 'Ɩ' => 'I', + 'Ɨ' => 'I', + 'Ƙ' => 'K', + 'ƙ' => 'k', + 'ƚ' => 'l', + 'Ɲ' => 'N', + 'ƞ' => 'n', + 'Ƣ' => 'OI', + 'ƣ' => 'oi', + 'Ƥ' => 'P', + 'ƥ' => 'p', + 'ƫ' => 't', + 'Ƭ' => 'T', + 'ƭ' => 't', + 'Ʈ' => 'T', + 'Ʋ' => 'V', + 'Ƴ' => 'Y', + 'ƴ' => 'y', + 'Ƶ' => 'Z', + 'ƶ' => 'z', + 'Ǥ' => 'G', + 'ǥ' => 'g', + 'ȡ' => 'd', + 'Ȥ' => 'Z', + 'ȥ' => 'z', + 'ȴ' => 'l', + 'ȵ' => 'n', + 'ȶ' => 't', + 'ȷ' => 'j', + 'ȸ' => 'db', + 'ȹ' => 'qp', + 'Ⱥ' => 'A', + 'Ȼ' => 'C', + 'ȼ' => 'c', + 'Ƚ' => 'L', + 'Ⱦ' => 'T', + 'ȿ' => 's', + 'ɀ' => 'z', + 'Ƀ' => 'B', + 'Ʉ' => 'U', + 'Ɇ' => 'E', + 'ɇ' => 'e', + 'Ɉ' => 'J', + 'ɉ' => 'j', + 'Ɍ' => 'R', + 'ɍ' => 'r', + 'Ɏ' => 'Y', + 'ɏ' => 'y', + 'ɓ' => 'b', + 'ɕ' => 'c', + 'ɖ' => 'd', + 'ɗ' => 'd', + 'ɛ' => 'e', + 'ɟ' => 'j', + 'ɠ' => 'g', + 'ɡ' => 'g', + 'ɢ' => 'G', + 'ɦ' => 'h', + 'ɧ' => 'h', + 'ɨ' => 'i', + 'ɪ' => 'I', + 'ɫ' => 'l', + 'ɬ' => 'l', + 'ɭ' => 'l', + 'ɱ' => 'm', + 'ɲ' => 'n', + 'ɳ' => 'n', + 'ɴ' => 'N', + 'ɶ' => 'OE', + 'ɼ' => 'r', + 'ɽ' => 'r', + 'ɾ' => 'r', + 'ʀ' => 'R', + 'ʂ' => 's', + 'ʈ' => 't', + 'ʉ' => 'u', + 'ʋ' => 'v', + 'ʏ' => 'Y', + 'ʐ' => 'z', + 'ʑ' => 'z', + 'ʙ' => 'B', + 'ʛ' => 'G', + 'ʜ' => 'H', + 'ʝ' => 'j', + 'ʟ' => 'L', + 'ʠ' => 'q', + 'ʣ' => 'dz', + 'ʥ' => 'dz', + 'ʦ' => 'ts', + 'ʪ' => 'ls', + 'ʫ' => 'lz', + 'ᴀ' => 'A', + 'ᴁ' => 'AE', + 'ᴃ' => 'B', + 'ᴄ' => 'C', + 'ᴅ' => 'D', + 'ᴆ' => 'D', + 'ᴇ' => 'E', + 'ᴊ' => 'J', + 'ᴋ' => 'K', + 'ᴌ' => 'L', + 'ᴍ' => 'M', + 'ᴏ' => 'O', + 'ᴘ' => 'P', + 'ᴛ' => 'T', + 'ᴜ' => 'U', + 'ᴠ' => 'V', + 'ᴡ' => 'W', + 'ᴢ' => 'Z', + 'ᵫ' => 'ue', + 'ᵬ' => 'b', + 'ᵭ' => 'd', + 'ᵮ' => 'f', + 'ᵯ' => 'm', + 'ᵰ' => 'n', + 'ᵱ' => 'p', + 'ᵲ' => 'r', + 'ᵳ' => 'r', + 'ᵴ' => 's', + 'ᵵ' => 't', + 'ᵶ' => 'z', + 'ᵺ' => 'th', + 'ᵻ' => 'I', + 'ᵽ' => 'p', + 'ᵾ' => 'U', + 'ᶀ' => 'b', + 'ᶁ' => 'd', + 'ᶂ' => 'f', + 'ᶃ' => 'g', + 'ᶄ' => 'k', + 'ᶅ' => 'l', + 'ᶆ' => 'm', + 'ᶇ' => 'n', + 'ᶈ' => 'p', + 'ᶉ' => 'r', + 'ᶊ' => 's', + 'ᶌ' => 'v', + 'ᶍ' => 'x', + 'ᶎ' => 'z', + 'ᶏ' => 'a', + 'ᶑ' => 'd', + 'ᶒ' => 'e', + 'ᶓ' => 'e', + 'ᶖ' => 'i', + 'ᶙ' => 'u', + 'ẜ' => 's', + 'ẝ' => 's', + 'ẞ' => 'SS', + 'Ỻ' => 'LL', + 'ỻ' => 'll', + 'Ỽ' => 'V', + 'ỽ' => 'v', + 'Ỿ' => 'Y', + 'ỿ' => 'y', + '©' => '(C)', + '®' => '(R)', + '₠' => 'CE', + '₢' => 'Cr', + '₣' => 'Fr.', + '₤' => 'L.', + '₧' => 'Pts', + '₺' => 'TL', + '₹' => 'Rs', + '℞' => 'Rx', + '〇' => '0', + '‘' => '\'', + '’' => '\'', + '‚' => ',', + '‛' => '\'', + '“' => '"', + '”' => '"', + '„' => ',,', + '‟' => '"', + '′' => '\'', + '〝' => '"', + '〞' => '"', + '«' => '<<', + '»' => '>>', + '‹' => '<', + '›' => '>', + '‐' => '-', + '‑' => '-', + '‒' => '-', + '–' => '-', + '—' => '-', + '―' => '-', + '︱' => '-', + '︲' => '-', + '‖' => '||', + '⁄' => '/', + '⁅' => '[', + '⁆' => ']', + '⁎' => '*', + '、' => ',', + '。' => '.', + '〈' => '<', + '〉' => '>', + '《' => '<<', + '》' => '>>', + '〔' => '[', + '〕' => ']', + '〘' => '[', + '〙' => ']', + '〚' => '[', + '〛' => ']', + '︐' => ',', + '︑' => ',', + '︒' => '.', + '︓' => ':', + '︔' => ';', + '︕' => '!', + '︖' => '?', + '︙' => '...', + '︰' => '..', + '︵' => '(', + '︶' => ')', + '︷' => '{', + '︸' => '}', + '︹' => '[', + '︺' => ']', + '︽' => '<<', + '︾' => '>>', + '︿' => '<', + '﹀' => '>', + '﹇' => '[', + '﹈' => ']', + '×' => '*', + '÷' => '/', + '−' => '-', + '∕' => '/', + '∖' => '\\', + '∣' => '|', + '∥' => '||', + '≪' => '<<', + '≫' => '>>', + '⦅' => '((', + '⦆' => '))', +); + +$result =& $data; +unset($data); + +return $result; diff --git a/vendor/symfony/polyfill-iconv/bootstrap.php b/vendor/symfony/polyfill-iconv/bootstrap.php new file mode 100644 index 0000000..5274732 --- /dev/null +++ b/vendor/symfony/polyfill-iconv/bootstrap.php @@ -0,0 +1,44 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Iconv as p; + +if (!function_exists('iconv')) { + define('ICONV_IMPL', 'Symfony'); + define('ICONV_VERSION', '1.0'); + define('ICONV_MIME_DECODE_STRICT', 1); + define('ICONV_MIME_DECODE_CONTINUE_ON_ERROR', 2); + + function iconv($from, $to, $s) { return p\Iconv::iconv($from, $to, $s); } + function iconv_get_encoding($type = 'all') { return p\Iconv::iconv_get_encoding($type); } + function iconv_set_encoding($type, $charset) { return p\Iconv::iconv_set_encoding($type, $charset); } + function iconv_mime_encode($name, $value, $pref = null) { return p\Iconv::iconv_mime_encode($name, $value, $pref); } + function iconv_mime_decode_headers($encodedHeaders, $mode = 0, $enc = null) { return p\Iconv::iconv_mime_decode_headers($encodedHeaders, $mode, $enc); } + + if (extension_loaded('mbstring')) { + function iconv_strlen($s, $enc = null) { null === $enc and $enc = p\Iconv::$internalEncoding; return mb_strlen($s, $enc); } + function iconv_strpos($s, $needle, $offset = 0, $enc = null) { null === $enc and $enc = p\Iconv::$internalEncoding; return mb_strpos($s, $needle, $offset, $enc); } + function iconv_strrpos($s, $needle, $enc = null) { null === $enc and $enc = p\Iconv::$internalEncoding; return mb_strrpos($s, $needle, 0, $enc); } + function iconv_substr($s, $start, $length = 2147483647, $enc = null) { null === $enc and $enc = p\Iconv::$internalEncoding; return mb_substr($s, $start, $length, $enc); } + function iconv_mime_decode($encodedHeaders, $mode = 0, $enc = null) { null === $enc and $enc = p\Iconv::$internalEncoding; return mb_decode_mimeheader($encodedHeaders, $mode, $enc); } + } else { + if (extension_loaded('xml')) { + function iconv_strlen($s, $enc = null) { return p\Iconv::strlen1($s, $enc); } + } else { + function iconv_strlen($s, $enc = null) { return p\Iconv::strlen2($s, $enc); } + } + + function iconv_strpos($s, $needle, $offset = 0, $enc = null) { return p\Iconv::iconv_strpos($s, $needle, $offset, $enc); } + function iconv_strrpos($s, $needle, $enc = null) { return p\Iconv::iconv_strrpos($s, $needle, $enc); } + function iconv_substr($s, $start, $length = 2147483647, $enc = null) { return p\Iconv::iconv_substr($s, $start, $length, $enc); } + function iconv_mime_decode($encodedHeaders, $mode = 0, $enc = null) { return p\Iconv::iconv_mime_decode($encodedHeaders, $mode, $enc); } + } +} diff --git a/vendor/symfony/polyfill-iconv/composer.json b/vendor/symfony/polyfill-iconv/composer.json new file mode 100644 index 0000000..816e6bd --- /dev/null +++ b/vendor/symfony/polyfill-iconv/composer.json @@ -0,0 +1,34 @@ +{ + "name": "symfony/polyfill-iconv", + "type": "library", + "description": "Symfony polyfill for the Iconv extension", + "keywords": ["polyfill", "shim", "compatibility", "portable", "iconv"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=5.3.3" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Iconv\\": "" }, + "files": [ "bootstrap.php" ] + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + } +} diff --git a/vendor/symfony/polyfill-intl-idn/Idn.php b/vendor/symfony/polyfill-intl-idn/Idn.php new file mode 100644 index 0000000..f205f39 --- /dev/null +++ b/vendor/symfony/polyfill-intl-idn/Idn.php @@ -0,0 +1,280 @@ + + * @author Sebastian Kroczek + * @author Dmitry Lukashin + * @author Laurent Bassin + * + * @internal + */ +final class Idn +{ + private static $encodeTable = array( + 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', + 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', + 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', + ); + + private static $decodeTable = array( + 'a' => 0, 'b' => 1, 'c' => 2, 'd' => 3, 'e' => 4, 'f' => 5, + 'g' => 6, 'h' => 7, 'i' => 8, 'j' => 9, 'k' => 10, 'l' => 11, + 'm' => 12, 'n' => 13, 'o' => 14, 'p' => 15, 'q' => 16, 'r' => 17, + 's' => 18, 't' => 19, 'u' => 20, 'v' => 21, 'w' => 22, 'x' => 23, + 'y' => 24, 'z' => 25, '0' => 26, '1' => 27, '2' => 28, '3' => 29, + '4' => 30, '5' => 31, '6' => 32, '7' => 33, '8' => 34, '9' => 35, + ); + + public static function idn_to_ascii($domain, $options, $variant, &$idna_info = array()) + { + if (\PHP_VERSION_ID >= 70200 && INTL_IDNA_VARIANT_2003 === $variant) { + @trigger_error('idn_to_ascii(): INTL_IDNA_VARIANT_2003 is deprecated', E_USER_DEPRECATED); + } + + if (INTL_IDNA_VARIANT_UTS46 === $variant) { + $domain = mb_strtolower($domain, 'utf-8'); + } + + $parts = explode('.', $domain); + + foreach ($parts as &$part) { + if ('' === $part) { + return false; + } + if (false === $part = self::encodePart($part)) { + return false; + } + } + + $output = implode('.', $parts); + + $idna_info = array( + 'result' => \strlen($output) > 255 ? false : $output, + 'isTransitionalDifferent' => false, + 'errors' => 0, + ); + + return $idna_info['result']; + } + + public static function idn_to_utf8($domain, $options, $variant, &$idna_info = array()) + { + if (\PHP_VERSION_ID >= 70200 && INTL_IDNA_VARIANT_2003 === $variant) { + @trigger_error('idn_to_utf8(): INTL_IDNA_VARIANT_2003 is deprecated', E_USER_DEPRECATED); + } + + $parts = explode('.', $domain); + + foreach ($parts as &$part) { + $length = \strlen($part); + if ($length < 1 || 63 < $length) { + continue; + } + if (0 !== strpos($part, 'xn--')) { + continue; + } + + $part = substr($part, 4); + $part = self::decodePart($part); + } + + $output = implode('.', $parts); + + $idna_info = array( + 'result' => \strlen($output) > 255 ? false : $output, + 'isTransitionalDifferent' => false, + 'errors' => 0, + ); + + return $idna_info['result']; + } + + private static function encodePart($input) + { + $codePoints = self::listCodePoints($input); + + $n = 128; + $bias = 72; + $delta = 0; + $h = $b = \count($codePoints['basic']); + + $output = ''; + foreach ($codePoints['basic'] as $code) { + $output .= mb_chr($code, 'utf-8'); + } + if ($input === $output) { + return $output; + } + if ($b > 0) { + $output .= '-'; + } + + $codePoints['nonBasic'] = array_unique($codePoints['nonBasic']); + sort($codePoints['nonBasic']); + + $i = 0; + $length = mb_strlen($input, 'utf-8'); + while ($h < $length) { + $m = $codePoints['nonBasic'][$i++]; + $delta += ($m - $n) * ($h + 1); + $n = $m; + + foreach ($codePoints['all'] as $c) { + if ($c < $n || $c < 128) { + ++$delta; + } + if ($c === $n) { + $q = $delta; + for ($k = 36;; $k += 36) { + $t = self::calculateThreshold($k, $bias); + if ($q < $t) { + break; + } + + $code = $t + (($q - $t) % (36 - $t)); + $output .= self::$encodeTable[$code]; + + $q = ($q - $t) / (36 - $t); + } + + $output .= self::$encodeTable[$q]; + $bias = self::adapt($delta, $h + 1, ($h === $b)); + $delta = 0; + ++$h; + } + } + + ++$delta; + ++$n; + } + + $output = 'xn--'.$output; + + return \strlen($output) < 1 || 63 < \strlen($output) ? false : strtolower($output); + } + + private static function listCodePoints($input) + { + $codePoints = array( + 'all' => array(), + 'basic' => array(), + 'nonBasic' => array(), + ); + + $length = mb_strlen($input, 'utf-8'); + for ($i = 0; $i < $length; ++$i) { + $char = mb_substr($input, $i, 1, 'utf-8'); + $code = mb_ord($char, 'utf-8'); + if ($code < 128) { + $codePoints['all'][] = $codePoints['basic'][] = $code; + } else { + $codePoints['all'][] = $codePoints['nonBasic'][] = $code; + } + } + + return $codePoints; + } + + private static function calculateThreshold($k, $bias) + { + if ($k <= $bias + 1) { + return 1; + } + if ($k >= $bias + 26) { + return 26; + } + + return $k - $bias; + } + + private static function adapt($delta, $numPoints, $firstTime) + { + $delta = (int) ($firstTime ? $delta / 700 : $delta / 2); + $delta += (int) ($delta / $numPoints); + + $k = 0; + while ($delta > 35 * 13) { + $delta = (int) ($delta / 35); + $k = $k + 36; + } + + return $k + (int) (36 * $delta / ($delta + 38)); + } + + private static function decodePart($input) + { + $n = 128; + $i = 0; + $bias = 72; + $output = ''; + + $pos = strrpos($input, '-'); + if (false !== $pos) { + $output = substr($input, 0, $pos++); + } else { + $pos = 0; + } + + $outputLength = \strlen($output); + $inputLength = \strlen($input); + + while ($pos < $inputLength) { + $oldi = $i; + $w = 1; + + for ($k = 36;; $k += 36) { + $digit = self::$decodeTable[$input[$pos++]]; + $i += $digit * $w; + $t = self::calculateThreshold($k, $bias); + + if ($digit < $t) { + break; + } + + $w *= 36 - $t; + } + + $bias = self::adapt($i - $oldi, ++$outputLength, 0 === $oldi); + $n = $n + (int) ($i / $outputLength); + $i = $i % $outputLength; + $output = mb_substr($output, 0, $i, 'utf-8').mb_chr($n, 'utf-8').mb_substr($output, $i, $outputLength - 1, 'utf-8'); + + ++$i; + } + + return $output; + } +} diff --git a/vendor/symfony/polyfill-intl-idn/LICENSE b/vendor/symfony/polyfill-intl-idn/LICENSE new file mode 100644 index 0000000..ad399a7 --- /dev/null +++ b/vendor/symfony/polyfill-intl-idn/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2018 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/symfony/polyfill-intl-idn/README.md b/vendor/symfony/polyfill-intl-idn/README.md new file mode 100644 index 0000000..5fd8c6e --- /dev/null +++ b/vendor/symfony/polyfill-intl-idn/README.md @@ -0,0 +1,12 @@ +Symfony Polyfill / Intl: Idn +============================ + +This component provides `idn_to_ascii` and `idn_to_utf8` functions to users who run php versions without the intl extension. + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/vendor/symfony/polyfill-intl-idn/bootstrap.php b/vendor/symfony/polyfill-intl-idn/bootstrap.php new file mode 100644 index 0000000..c6e3921 --- /dev/null +++ b/vendor/symfony/polyfill-intl-idn/bootstrap.php @@ -0,0 +1,59 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Intl\Idn as p; + +if (!function_exists('idn_to_ascii')) { + define('U_IDNA_PROHIBITED_ERROR', 66560); + define('U_IDNA_ERROR_START', 66560); + define('U_IDNA_UNASSIGNED_ERROR', 66561); + define('U_IDNA_CHECK_BIDI_ERROR', 66562); + define('U_IDNA_STD3_ASCII_RULES_ERROR', 66563); + define('U_IDNA_ACE_PREFIX_ERROR', 66564); + define('U_IDNA_VERIFICATION_ERROR', 66565); + define('U_IDNA_LABEL_TOO_LONG_ERROR', 66566); + define('U_IDNA_ZERO_LENGTH_LABEL_ERROR', 66567); + define('U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR', 66568); + define('U_IDNA_ERROR_LIMIT', 66569); + define('U_STRINGPREP_PROHIBITED_ERROR', 66560); + define('U_STRINGPREP_UNASSIGNED_ERROR', 66561); + define('U_STRINGPREP_CHECK_BIDI_ERROR', 66562); + define('IDNA_DEFAULT', 0); + define('IDNA_ALLOW_UNASSIGNED', 1); + define('IDNA_USE_STD3_RULES', 2); + define('IDNA_CHECK_BIDI', 4); + define('IDNA_CHECK_CONTEXTJ', 8); + define('IDNA_NONTRANSITIONAL_TO_ASCII', 16); + define('IDNA_NONTRANSITIONAL_TO_UNICODE', 32); + define('INTL_IDNA_VARIANT_2003', 0); + define('INTL_IDNA_VARIANT_UTS46', 1); + define('IDNA_ERROR_EMPTY_LABEL', 1); + define('IDNA_ERROR_LABEL_TOO_LONG', 2); + define('IDNA_ERROR_DOMAIN_NAME_TOO_LONG', 4); + define('IDNA_ERROR_LEADING_HYPHEN', 8); + define('IDNA_ERROR_TRAILING_HYPHEN', 16); + define('IDNA_ERROR_HYPHEN_3_4', 32); + define('IDNA_ERROR_LEADING_COMBINING_MARK', 64); + define('IDNA_ERROR_DISALLOWED', 128); + define('IDNA_ERROR_PUNYCODE', 256); + define('IDNA_ERROR_LABEL_HAS_DOT', 512); + define('IDNA_ERROR_INVALID_ACE_LABEL', 1024); + define('IDNA_ERROR_BIDI', 2048); + define('IDNA_ERROR_CONTEXTJ', 4096); + + if (PHP_VERSION_ID < 70400) { + function idn_to_ascii($domain, $options = IDNA_DEFAULT, $variant = INTL_IDNA_VARIANT_2003, &$idna_info = array()) { return p\Idn::idn_to_ascii($domain, $options, $variant, $idna_info); } + function idn_to_utf8($domain, $options = IDNA_DEFAULT, $variant = INTL_IDNA_VARIANT_2003, &$idna_info = array()) { return p\Idn::idn_to_utf8($domain, $options, $variant, $idna_info); } + } else { + function idn_to_ascii($domain, $options = IDNA_DEFAULT, $variant = INTL_IDNA_VARIANT_UTS46, &$idna_info = array()) { return p\Idn::idn_to_ascii($domain, $options, $variant, $idna_info); } + function idn_to_utf8($domain, $options = IDNA_DEFAULT, $variant = INTL_IDNA_VARIANT_UTS46, &$idna_info = array()) { return p\Idn::idn_to_utf8($domain, $options, $variant, $idna_info); } + } +} diff --git a/vendor/symfony/polyfill-intl-idn/composer.json b/vendor/symfony/polyfill-intl-idn/composer.json new file mode 100644 index 0000000..8f46fbd --- /dev/null +++ b/vendor/symfony/polyfill-intl-idn/composer.json @@ -0,0 +1,36 @@ +{ + "name": "symfony/polyfill-intl-idn", + "type": "library", + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "keywords": ["polyfill", "shim", "compatibility", "portable", "intl", "idn"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=5.3.3", + "symfony/polyfill-mbstring": "^1.3", + "symfony/polyfill-php72": "^1.9" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Intl\\Idn\\": "" }, + "files": [ "bootstrap.php" ] + }, + "suggest": { + "ext-intl": "For best performance" + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + } +} diff --git a/vendor/symfony/polyfill-mbstring/LICENSE b/vendor/symfony/polyfill-mbstring/LICENSE new file mode 100644 index 0000000..24fa32c --- /dev/null +++ b/vendor/symfony/polyfill-mbstring/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015-2018 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/symfony/polyfill-mbstring/Mbstring.php b/vendor/symfony/polyfill-mbstring/Mbstring.php new file mode 100644 index 0000000..a5e4a8f --- /dev/null +++ b/vendor/symfony/polyfill-mbstring/Mbstring.php @@ -0,0 +1,800 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Mbstring; + +/** + * Partial mbstring implementation in PHP, iconv based, UTF-8 centric. + * + * Implemented: + * - mb_chr - Returns a specific character from its Unicode code point + * - mb_convert_encoding - Convert character encoding + * - mb_convert_variables - Convert character code in variable(s) + * - mb_decode_mimeheader - Decode string in MIME header field + * - mb_encode_mimeheader - Encode string for MIME header XXX NATIVE IMPLEMENTATION IS REALLY BUGGED + * - mb_decode_numericentity - Decode HTML numeric string reference to character + * - mb_encode_numericentity - Encode character to HTML numeric string reference + * - mb_convert_case - Perform case folding on a string + * - mb_detect_encoding - Detect character encoding + * - mb_get_info - Get internal settings of mbstring + * - mb_http_input - Detect HTTP input character encoding + * - mb_http_output - Set/Get HTTP output character encoding + * - mb_internal_encoding - Set/Get internal character encoding + * - mb_list_encodings - Returns an array of all supported encodings + * - mb_ord - Returns the Unicode code point of a character + * - mb_output_handler - Callback function converts character encoding in output buffer + * - mb_scrub - Replaces ill-formed byte sequences with substitute characters + * - mb_strlen - Get string length + * - mb_strpos - Find position of first occurrence of string in a string + * - mb_strrpos - Find position of last occurrence of a string in a string + * - mb_strtolower - Make a string lowercase + * - mb_strtoupper - Make a string uppercase + * - mb_substitute_character - Set/Get substitution character + * - mb_substr - Get part of string + * - mb_stripos - Finds position of first occurrence of a string within another, case insensitive + * - mb_stristr - Finds first occurrence of a string within another, case insensitive + * - mb_strrchr - Finds the last occurrence of a character in a string within another + * - mb_strrichr - Finds the last occurrence of a character in a string within another, case insensitive + * - mb_strripos - Finds position of last occurrence of a string within another, case insensitive + * - mb_strstr - Finds first occurrence of a string within another + * - mb_strwidth - Return width of string + * - mb_substr_count - Count the number of substring occurrences + * + * Not implemented: + * - mb_convert_kana - Convert "kana" one from another ("zen-kaku", "han-kaku" and more) + * - mb_ereg_* - Regular expression with multibyte support + * - mb_parse_str - Parse GET/POST/COOKIE data and set global variable + * - mb_preferred_mime_name - Get MIME charset string + * - mb_regex_encoding - Returns current encoding for multibyte regex as string + * - mb_regex_set_options - Set/Get the default options for mbregex functions + * - mb_send_mail - Send encoded mail + * - mb_split - Split multibyte string using regular expression + * - mb_strcut - Get part of string + * - mb_strimwidth - Get truncated string with specified width + * + * @author Nicolas Grekas + * + * @internal + */ +final class Mbstring +{ + const MB_CASE_FOLD = PHP_INT_MAX; + + private static $encodingList = array('ASCII', 'UTF-8'); + private static $language = 'neutral'; + private static $internalEncoding = 'UTF-8'; + private static $caseFold = array( + array('µ', 'ſ', "\xCD\x85", 'ς', "\xCF\x90", "\xCF\x91", "\xCF\x95", "\xCF\x96", "\xCF\xB0", "\xCF\xB1", "\xCF\xB5", "\xE1\xBA\x9B", "\xE1\xBE\xBE"), + array('μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', "\xE1\xB9\xA1", 'ι'), + ); + + public static function mb_convert_encoding($s, $toEncoding, $fromEncoding = null) + { + if (\is_array($fromEncoding) || false !== strpos($fromEncoding, ',')) { + $fromEncoding = self::mb_detect_encoding($s, $fromEncoding); + } else { + $fromEncoding = self::getEncoding($fromEncoding); + } + + $toEncoding = self::getEncoding($toEncoding); + + if ('BASE64' === $fromEncoding) { + $s = base64_decode($s); + $fromEncoding = $toEncoding; + } + + if ('BASE64' === $toEncoding) { + return base64_encode($s); + } + + if ('HTML-ENTITIES' === $toEncoding || 'HTML' === $toEncoding) { + if ('HTML-ENTITIES' === $fromEncoding || 'HTML' === $fromEncoding) { + $fromEncoding = 'Windows-1252'; + } + if ('UTF-8' !== $fromEncoding) { + $s = iconv($fromEncoding, 'UTF-8//IGNORE', $s); + } + + return preg_replace_callback('/[\x80-\xFF]+/', array(__CLASS__, 'html_encoding_callback'), $s); + } + + if ('HTML-ENTITIES' === $fromEncoding) { + $s = html_entity_decode($s, ENT_COMPAT, 'UTF-8'); + $fromEncoding = 'UTF-8'; + } + + return iconv($fromEncoding, $toEncoding.'//IGNORE', $s); + } + + public static function mb_convert_variables($toEncoding, $fromEncoding, &$a = null, &$b = null, &$c = null, &$d = null, &$e = null, &$f = null) + { + $vars = array(&$a, &$b, &$c, &$d, &$e, &$f); + + $ok = true; + array_walk_recursive($vars, function (&$v) use (&$ok, $toEncoding, $fromEncoding) { + if (false === $v = Mbstring::mb_convert_encoding($v, $toEncoding, $fromEncoding)) { + $ok = false; + } + }); + + return $ok ? $fromEncoding : false; + } + + public static function mb_decode_mimeheader($s) + { + return iconv_mime_decode($s, 2, self::$internalEncoding); + } + + public static function mb_encode_mimeheader($s, $charset = null, $transferEncoding = null, $linefeed = null, $indent = null) + { + trigger_error('mb_encode_mimeheader() is bugged. Please use iconv_mime_encode() instead', E_USER_WARNING); + } + + public static function mb_decode_numericentity($s, $convmap, $encoding = null) + { + if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) { + trigger_error('mb_decode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING); + + return null; + } + + if (!\is_array($convmap) || !$convmap) { + return false; + } + + if (null !== $encoding && !\is_scalar($encoding)) { + trigger_error('mb_decode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING); + + return ''; // Instead of null (cf. mb_encode_numericentity). + } + + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + $cnt = floor(\count($convmap) / 4) * 4; + + for ($i = 0; $i < $cnt; $i += 4) { + // collector_decode_htmlnumericentity ignores $convmap[$i + 3] + $convmap[$i] += $convmap[$i + 2]; + $convmap[$i + 1] += $convmap[$i + 2]; + } + + $s = preg_replace_callback('/&#(?:0*([0-9]+)|x0*([0-9a-fA-F]+))(?!&);?/', function (array $m) use ($cnt, $convmap) { + $c = isset($m[2]) ? (int) hexdec($m[2]) : $m[1]; + for ($i = 0; $i < $cnt; $i += 4) { + if ($c >= $convmap[$i] && $c <= $convmap[$i + 1]) { + return Mbstring::mb_chr($c - $convmap[$i + 2]); + } + } + + return $m[0]; + }, $s); + + if (null === $encoding) { + return $s; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $s); + } + + public static function mb_encode_numericentity($s, $convmap, $encoding = null, $is_hex = false) + { + if (null !== $s && !\is_scalar($s) && !(\is_object($s) && \method_exists($s, '__toString'))) { + trigger_error('mb_encode_numericentity() expects parameter 1 to be string, '.\gettype($s).' given', E_USER_WARNING); + + return null; + } + + if (!\is_array($convmap) || !$convmap) { + return false; + } + + if (null !== $encoding && !\is_scalar($encoding)) { + trigger_error('mb_encode_numericentity() expects parameter 3 to be string, '.\gettype($s).' given', E_USER_WARNING); + + return null; // Instead of '' (cf. mb_decode_numericentity). + } + + if (null !== $is_hex && !\is_scalar($is_hex)) { + trigger_error('mb_encode_numericentity() expects parameter 4 to be boolean, '.\gettype($s).' given', E_USER_WARNING); + + return null; + } + + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4); + + $cnt = floor(\count($convmap) / 4) * 4; + $i = 0; + $len = \strlen($s); + $result = ''; + + while ($i < $len) { + $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; + $uchr = substr($s, $i, $ulen); + $i += $ulen; + $c = self::mb_ord($uchr); + + for ($j = 0; $j < $cnt; $j += 4) { + if ($c >= $convmap[$j] && $c <= $convmap[$j + 1]) { + $cOffset = ($c + $convmap[$j + 2]) & $convmap[$j + 3]; + $result .= $is_hex ? sprintf('&#x%X;', $cOffset) : '&#'.$cOffset.';'; + continue 2; + } + } + $result .= $uchr; + } + + if (null === $encoding) { + return $result; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $result); + } + + public static function mb_convert_case($s, $mode, $encoding = null) + { + $s = (string) $s; + if ('' === $s) { + return ''; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding) { + $encoding = null; + if (!preg_match('//u', $s)) { + $s = @iconv('UTF-8', 'UTF-8//IGNORE', $s); + } + } else { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + if (MB_CASE_TITLE == $mode) { + static $titleRegexp = null; + if (null === $titleRegexp) { + $titleRegexp = self::getData('titleCaseRegexp'); + } + $s = preg_replace_callback($titleRegexp, array(__CLASS__, 'title_case'), $s); + } else { + if (MB_CASE_UPPER == $mode) { + static $upper = null; + if (null === $upper) { + $upper = self::getData('upperCase'); + } + $map = $upper; + } else { + if (self::MB_CASE_FOLD === $mode) { + $s = str_replace(self::$caseFold[0], self::$caseFold[1], $s); + } + + static $lower = null; + if (null === $lower) { + $lower = self::getData('lowerCase'); + } + $map = $lower; + } + + static $ulenMask = array("\xC0" => 2, "\xD0" => 2, "\xE0" => 3, "\xF0" => 4); + + $i = 0; + $len = \strlen($s); + + while ($i < $len) { + $ulen = $s[$i] < "\x80" ? 1 : $ulenMask[$s[$i] & "\xF0"]; + $uchr = substr($s, $i, $ulen); + $i += $ulen; + + if (isset($map[$uchr])) { + $uchr = $map[$uchr]; + $nlen = \strlen($uchr); + + if ($nlen == $ulen) { + $nlen = $i; + do { + $s[--$nlen] = $uchr[--$ulen]; + } while ($ulen); + } else { + $s = substr_replace($s, $uchr, $i - $ulen, $ulen); + $len += $nlen - $ulen; + $i += $nlen - $ulen; + } + } + } + } + + if (null === $encoding) { + return $s; + } + + return iconv('UTF-8', $encoding.'//IGNORE', $s); + } + + public static function mb_internal_encoding($encoding = null) + { + if (null === $encoding) { + return self::$internalEncoding; + } + + $encoding = self::getEncoding($encoding); + + if ('UTF-8' === $encoding || false !== @iconv($encoding, $encoding, ' ')) { + self::$internalEncoding = $encoding; + + return true; + } + + return false; + } + + public static function mb_language($lang = null) + { + if (null === $lang) { + return self::$language; + } + + switch ($lang = strtolower($lang)) { + case 'uni': + case 'neutral': + self::$language = $lang; + + return true; + } + + return false; + } + + public static function mb_list_encodings() + { + return array('UTF-8'); + } + + public static function mb_encoding_aliases($encoding) + { + switch (strtoupper($encoding)) { + case 'UTF8': + case 'UTF-8': + return array('utf8'); + } + + return false; + } + + public static function mb_check_encoding($var = null, $encoding = null) + { + if (null === $encoding) { + if (null === $var) { + return false; + } + $encoding = self::$internalEncoding; + } + + return self::mb_detect_encoding($var, array($encoding)) || false !== @iconv($encoding, $encoding, $var); + } + + public static function mb_detect_encoding($str, $encodingList = null, $strict = false) + { + if (null === $encodingList) { + $encodingList = self::$encodingList; + } else { + if (!\is_array($encodingList)) { + $encodingList = array_map('trim', explode(',', $encodingList)); + } + $encodingList = array_map('strtoupper', $encodingList); + } + + foreach ($encodingList as $enc) { + switch ($enc) { + case 'ASCII': + if (!preg_match('/[\x80-\xFF]/', $str)) { + return $enc; + } + break; + + case 'UTF8': + case 'UTF-8': + if (preg_match('//u', $str)) { + return 'UTF-8'; + } + break; + + default: + if (0 === strncmp($enc, 'ISO-8859-', 9)) { + return $enc; + } + } + } + + return false; + } + + public static function mb_detect_order($encodingList = null) + { + if (null === $encodingList) { + return self::$encodingList; + } + + if (!\is_array($encodingList)) { + $encodingList = array_map('trim', explode(',', $encodingList)); + } + $encodingList = array_map('strtoupper', $encodingList); + + foreach ($encodingList as $enc) { + switch ($enc) { + default: + if (strncmp($enc, 'ISO-8859-', 9)) { + return false; + } + // no break + case 'ASCII': + case 'UTF8': + case 'UTF-8': + } + } + + self::$encodingList = $encodingList; + + return true; + } + + public static function mb_strlen($s, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return \strlen($s); + } + + return @iconv_strlen($s, $encoding); + } + + public static function mb_strpos($haystack, $needle, $offset = 0, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return strpos($haystack, $needle, $offset); + } + + $needle = (string) $needle; + if ('' === $needle) { + trigger_error(__METHOD__.': Empty delimiter', E_USER_WARNING); + + return false; + } + + return iconv_strpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_strrpos($haystack, $needle, $offset = 0, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return strrpos($haystack, $needle, $offset); + } + + if ($offset != (int) $offset) { + $offset = 0; + } elseif ($offset = (int) $offset) { + if ($offset < 0) { + $haystack = self::mb_substr($haystack, 0, $offset, $encoding); + $offset = 0; + } else { + $haystack = self::mb_substr($haystack, $offset, 2147483647, $encoding); + } + } + + $pos = iconv_strrpos($haystack, $needle, $encoding); + + return false !== $pos ? $offset + $pos : false; + } + + public static function mb_strtolower($s, $encoding = null) + { + return self::mb_convert_case($s, MB_CASE_LOWER, $encoding); + } + + public static function mb_strtoupper($s, $encoding = null) + { + return self::mb_convert_case($s, MB_CASE_UPPER, $encoding); + } + + public static function mb_substitute_character($c = null) + { + if (0 === strcasecmp($c, 'none')) { + return true; + } + + return null !== $c ? false : 'none'; + } + + public static function mb_substr($s, $start, $length = null, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return substr($s, $start, null === $length ? 2147483647 : $length); + } + + if ($start < 0) { + $start = iconv_strlen($s, $encoding) + $start; + if ($start < 0) { + $start = 0; + } + } + + if (null === $length) { + $length = 2147483647; + } elseif ($length < 0) { + $length = iconv_strlen($s, $encoding) + $length - $start; + if ($length < 0) { + return ''; + } + } + + return (string) iconv_substr($s, $start, $length, $encoding); + } + + public static function mb_stripos($haystack, $needle, $offset = 0, $encoding = null) + { + $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); + $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); + + return self::mb_strpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_stristr($haystack, $needle, $part = false, $encoding = null) + { + $pos = self::mb_stripos($haystack, $needle, 0, $encoding); + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strrchr($haystack, $needle, $part = false, $encoding = null) + { + $encoding = self::getEncoding($encoding); + if ('CP850' === $encoding || 'ASCII' === $encoding) { + return strrchr($haystack, $needle, $part); + } + $needle = self::mb_substr($needle, 0, 1, $encoding); + $pos = iconv_strrpos($haystack, $needle, $encoding); + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strrichr($haystack, $needle, $part = false, $encoding = null) + { + $needle = self::mb_substr($needle, 0, 1, $encoding); + $pos = self::mb_strripos($haystack, $needle, $encoding); + + return self::getSubpart($pos, $part, $haystack, $encoding); + } + + public static function mb_strripos($haystack, $needle, $offset = 0, $encoding = null) + { + $haystack = self::mb_convert_case($haystack, self::MB_CASE_FOLD, $encoding); + $needle = self::mb_convert_case($needle, self::MB_CASE_FOLD, $encoding); + + return self::mb_strrpos($haystack, $needle, $offset, $encoding); + } + + public static function mb_strstr($haystack, $needle, $part = false, $encoding = null) + { + $pos = strpos($haystack, $needle); + if (false === $pos) { + return false; + } + if ($part) { + return substr($haystack, 0, $pos); + } + + return substr($haystack, $pos); + } + + public static function mb_get_info($type = 'all') + { + $info = array( + 'internal_encoding' => self::$internalEncoding, + 'http_output' => 'pass', + 'http_output_conv_mimetypes' => '^(text/|application/xhtml\+xml)', + 'func_overload' => 0, + 'func_overload_list' => 'no overload', + 'mail_charset' => 'UTF-8', + 'mail_header_encoding' => 'BASE64', + 'mail_body_encoding' => 'BASE64', + 'illegal_chars' => 0, + 'encoding_translation' => 'Off', + 'language' => self::$language, + 'detect_order' => self::$encodingList, + 'substitute_character' => 'none', + 'strict_detection' => 'Off', + ); + + if ('all' === $type) { + return $info; + } + if (isset($info[$type])) { + return $info[$type]; + } + + return false; + } + + public static function mb_http_input($type = '') + { + return false; + } + + public static function mb_http_output($encoding = null) + { + return null !== $encoding ? 'pass' === $encoding : 'pass'; + } + + public static function mb_strwidth($s, $encoding = null) + { + $encoding = self::getEncoding($encoding); + + if ('UTF-8' !== $encoding) { + $s = iconv($encoding, 'UTF-8//IGNORE', $s); + } + + $s = preg_replace('/[\x{1100}-\x{115F}\x{2329}\x{232A}\x{2E80}-\x{303E}\x{3040}-\x{A4CF}\x{AC00}-\x{D7A3}\x{F900}-\x{FAFF}\x{FE10}-\x{FE19}\x{FE30}-\x{FE6F}\x{FF00}-\x{FF60}\x{FFE0}-\x{FFE6}\x{20000}-\x{2FFFD}\x{30000}-\x{3FFFD}]/u', '', $s, -1, $wide); + + return ($wide << 1) + iconv_strlen($s, 'UTF-8'); + } + + public static function mb_substr_count($haystack, $needle, $encoding = null) + { + return substr_count($haystack, $needle); + } + + public static function mb_output_handler($contents, $status) + { + return $contents; + } + + public static function mb_chr($code, $encoding = null) + { + if (0x80 > $code %= 0x200000) { + $s = \chr($code); + } elseif (0x800 > $code) { + $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F); + } elseif (0x10000 > $code) { + $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } else { + $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } + + if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { + $s = mb_convert_encoding($s, $encoding, 'UTF-8'); + } + + return $s; + } + + public static function mb_ord($s, $encoding = null) + { + if ('UTF-8' !== $encoding = self::getEncoding($encoding)) { + $s = mb_convert_encoding($s, 'UTF-8', $encoding); + } + + if (1 === \strlen($s)) { + return \ord($s); + } + + $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0; + if (0xF0 <= $code) { + return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80; + } + if (0xE0 <= $code) { + return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80; + } + if (0xC0 <= $code) { + return (($code - 0xC0) << 6) + $s[2] - 0x80; + } + + return $code; + } + + private static function getSubpart($pos, $part, $haystack, $encoding) + { + if (false === $pos) { + return false; + } + if ($part) { + return self::mb_substr($haystack, 0, $pos, $encoding); + } + + return self::mb_substr($haystack, $pos, null, $encoding); + } + + private static function html_encoding_callback(array $m) + { + $i = 1; + $entities = ''; + $m = unpack('C*', htmlentities($m[0], ENT_COMPAT, 'UTF-8')); + + while (isset($m[$i])) { + if (0x80 > $m[$i]) { + $entities .= \chr($m[$i++]); + continue; + } + if (0xF0 <= $m[$i]) { + $c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; + } elseif (0xE0 <= $m[$i]) { + $c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80; + } else { + $c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80; + } + + $entities .= '&#'.$c.';'; + } + + return $entities; + } + + private static function title_case(array $s) + { + return self::mb_convert_case($s[1], MB_CASE_UPPER, 'UTF-8').self::mb_convert_case($s[2], MB_CASE_LOWER, 'UTF-8'); + } + + private static function getData($file) + { + if (file_exists($file = __DIR__.'/Resources/unidata/'.$file.'.php')) { + return require $file; + } + + return false; + } + + private static function getEncoding($encoding) + { + if (null === $encoding) { + return self::$internalEncoding; + } + + $encoding = strtoupper($encoding); + + if ('8BIT' === $encoding || 'BINARY' === $encoding) { + return 'CP850'; + } + if ('UTF8' === $encoding) { + return 'UTF-8'; + } + + return $encoding; + } +} diff --git a/vendor/symfony/polyfill-mbstring/README.md b/vendor/symfony/polyfill-mbstring/README.md new file mode 100644 index 0000000..342e828 --- /dev/null +++ b/vendor/symfony/polyfill-mbstring/README.md @@ -0,0 +1,13 @@ +Symfony Polyfill / Mbstring +=========================== + +This component provides a partial, native PHP implementation for the +[Mbstring](http://php.net/mbstring) extension. + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php b/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php new file mode 100644 index 0000000..e6fbfa6 --- /dev/null +++ b/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php @@ -0,0 +1,1096 @@ + 'a', + 'B' => 'b', + 'C' => 'c', + 'D' => 'd', + 'E' => 'e', + 'F' => 'f', + 'G' => 'g', + 'H' => 'h', + 'I' => 'i', + 'J' => 'j', + 'K' => 'k', + 'L' => 'l', + 'M' => 'm', + 'N' => 'n', + 'O' => 'o', + 'P' => 'p', + 'Q' => 'q', + 'R' => 'r', + 'S' => 's', + 'T' => 't', + 'U' => 'u', + 'V' => 'v', + 'W' => 'w', + 'X' => 'x', + 'Y' => 'y', + 'Z' => 'z', + 'À' => 'à', + 'Á' => 'á', + 'Â' => 'â', + 'Ã' => 'ã', + 'Ä' => 'ä', + 'Å' => 'å', + 'Æ' => 'æ', + 'Ç' => 'ç', + 'È' => 'è', + 'É' => 'é', + 'Ê' => 'ê', + 'Ë' => 'ë', + 'Ì' => 'ì', + 'Í' => 'í', + 'Î' => 'î', + 'Ï' => 'ï', + 'Ð' => 'ð', + 'Ñ' => 'ñ', + 'Ò' => 'ò', + 'Ó' => 'ó', + 'Ô' => 'ô', + 'Õ' => 'õ', + 'Ö' => 'ö', + 'Ø' => 'ø', + 'Ù' => 'ù', + 'Ú' => 'ú', + 'Û' => 'û', + 'Ü' => 'ü', + 'Ý' => 'ý', + 'Þ' => 'þ', + 'Ā' => 'ā', + 'Ă' => 'ă', + 'Ą' => 'ą', + 'Ć' => 'ć', + 'Ĉ' => 'ĉ', + 'Ċ' => 'ċ', + 'Č' => 'č', + 'Ď' => 'ď', + 'Đ' => 'đ', + 'Ē' => 'ē', + 'Ĕ' => 'ĕ', + 'Ė' => 'ė', + 'Ę' => 'ę', + 'Ě' => 'ě', + 'Ĝ' => 'ĝ', + 'Ğ' => 'ğ', + 'Ġ' => 'ġ', + 'Ģ' => 'ģ', + 'Ĥ' => 'ĥ', + 'Ħ' => 'ħ', + 'Ĩ' => 'ĩ', + 'Ī' => 'ī', + 'Ĭ' => 'ĭ', + 'Į' => 'į', + 'İ' => 'i', + 'IJ' => 'ij', + 'Ĵ' => 'ĵ', + 'Ķ' => 'ķ', + 'Ĺ' => 'ĺ', + 'Ļ' => 'ļ', + 'Ľ' => 'ľ', + 'Ŀ' => 'ŀ', + 'Ł' => 'ł', + 'Ń' => 'ń', + 'Ņ' => 'ņ', + 'Ň' => 'ň', + 'Ŋ' => 'ŋ', + 'Ō' => 'ō', + 'Ŏ' => 'ŏ', + 'Ő' => 'ő', + 'Œ' => 'œ', + 'Ŕ' => 'ŕ', + 'Ŗ' => 'ŗ', + 'Ř' => 'ř', + 'Ś' => 'ś', + 'Ŝ' => 'ŝ', + 'Ş' => 'ş', + 'Š' => 'š', + 'Ţ' => 'ţ', + 'Ť' => 'ť', + 'Ŧ' => 'ŧ', + 'Ũ' => 'ũ', + 'Ū' => 'ū', + 'Ŭ' => 'ŭ', + 'Ů' => 'ů', + 'Ű' => 'ű', + 'Ų' => 'ų', + 'Ŵ' => 'ŵ', + 'Ŷ' => 'ŷ', + 'Ÿ' => 'ÿ', + 'Ź' => 'ź', + 'Ż' => 'ż', + 'Ž' => 'ž', + 'Ɓ' => 'ɓ', + 'Ƃ' => 'ƃ', + 'Ƅ' => 'ƅ', + 'Ɔ' => 'ɔ', + 'Ƈ' => 'ƈ', + 'Ɖ' => 'ɖ', + 'Ɗ' => 'ɗ', + 'Ƌ' => 'ƌ', + 'Ǝ' => 'ǝ', + 'Ə' => 'ə', + 'Ɛ' => 'ɛ', + 'Ƒ' => 'ƒ', + 'Ɠ' => 'ɠ', + 'Ɣ' => 'ɣ', + 'Ɩ' => 'ɩ', + 'Ɨ' => 'ɨ', + 'Ƙ' => 'ƙ', + 'Ɯ' => 'ɯ', + 'Ɲ' => 'ɲ', + 'Ɵ' => 'ɵ', + 'Ơ' => 'ơ', + 'Ƣ' => 'ƣ', + 'Ƥ' => 'ƥ', + 'Ʀ' => 'ʀ', + 'Ƨ' => 'ƨ', + 'Ʃ' => 'ʃ', + 'Ƭ' => 'ƭ', + 'Ʈ' => 'ʈ', + 'Ư' => 'ư', + 'Ʊ' => 'ʊ', + 'Ʋ' => 'ʋ', + 'Ƴ' => 'ƴ', + 'Ƶ' => 'ƶ', + 'Ʒ' => 'ʒ', + 'Ƹ' => 'ƹ', + 'Ƽ' => 'ƽ', + 'DŽ' => 'dž', + 'Dž' => 'dž', + 'LJ' => 'lj', + 'Lj' => 'lj', + 'NJ' => 'nj', + 'Nj' => 'nj', + 'Ǎ' => 'ǎ', + 'Ǐ' => 'ǐ', + 'Ǒ' => 'ǒ', + 'Ǔ' => 'ǔ', + 'Ǖ' => 'ǖ', + 'Ǘ' => 'ǘ', + 'Ǚ' => 'ǚ', + 'Ǜ' => 'ǜ', + 'Ǟ' => 'ǟ', + 'Ǡ' => 'ǡ', + 'Ǣ' => 'ǣ', + 'Ǥ' => 'ǥ', + 'Ǧ' => 'ǧ', + 'Ǩ' => 'ǩ', + 'Ǫ' => 'ǫ', + 'Ǭ' => 'ǭ', + 'Ǯ' => 'ǯ', + 'DZ' => 'dz', + 'Dz' => 'dz', + 'Ǵ' => 'ǵ', + 'Ƕ' => 'ƕ', + 'Ƿ' => 'ƿ', + 'Ǹ' => 'ǹ', + 'Ǻ' => 'ǻ', + 'Ǽ' => 'ǽ', + 'Ǿ' => 'ǿ', + 'Ȁ' => 'ȁ', + 'Ȃ' => 'ȃ', + 'Ȅ' => 'ȅ', + 'Ȇ' => 'ȇ', + 'Ȉ' => 'ȉ', + 'Ȋ' => 'ȋ', + 'Ȍ' => 'ȍ', + 'Ȏ' => 'ȏ', + 'Ȑ' => 'ȑ', + 'Ȓ' => 'ȓ', + 'Ȕ' => 'ȕ', + 'Ȗ' => 'ȗ', + 'Ș' => 'ș', + 'Ț' => 'ț', + 'Ȝ' => 'ȝ', + 'Ȟ' => 'ȟ', + 'Ƞ' => 'ƞ', + 'Ȣ' => 'ȣ', + 'Ȥ' => 'ȥ', + 'Ȧ' => 'ȧ', + 'Ȩ' => 'ȩ', + 'Ȫ' => 'ȫ', + 'Ȭ' => 'ȭ', + 'Ȯ' => 'ȯ', + 'Ȱ' => 'ȱ', + 'Ȳ' => 'ȳ', + 'Ⱥ' => 'ⱥ', + 'Ȼ' => 'ȼ', + 'Ƚ' => 'ƚ', + 'Ⱦ' => 'ⱦ', + 'Ɂ' => 'ɂ', + 'Ƀ' => 'ƀ', + 'Ʉ' => 'ʉ', + 'Ʌ' => 'ʌ', + 'Ɇ' => 'ɇ', + 'Ɉ' => 'ɉ', + 'Ɋ' => 'ɋ', + 'Ɍ' => 'ɍ', + 'Ɏ' => 'ɏ', + 'Ͱ' => 'ͱ', + 'Ͳ' => 'ͳ', + 'Ͷ' => 'ͷ', + 'Ϳ' => 'ϳ', + 'Ά' => 'ά', + 'Έ' => 'έ', + 'Ή' => 'ή', + 'Ί' => 'ί', + 'Ό' => 'ό', + 'Ύ' => 'ύ', + 'Ώ' => 'ώ', + 'Α' => 'α', + 'Β' => 'β', + 'Γ' => 'γ', + 'Δ' => 'δ', + 'Ε' => 'ε', + 'Ζ' => 'ζ', + 'Η' => 'η', + 'Θ' => 'θ', + 'Ι' => 'ι', + 'Κ' => 'κ', + 'Λ' => 'λ', + 'Μ' => 'μ', + 'Ν' => 'ν', + 'Ξ' => 'ξ', + 'Ο' => 'ο', + 'Π' => 'π', + 'Ρ' => 'ρ', + 'Σ' => 'σ', + 'Τ' => 'τ', + 'Υ' => 'υ', + 'Φ' => 'φ', + 'Χ' => 'χ', + 'Ψ' => 'ψ', + 'Ω' => 'ω', + 'Ϊ' => 'ϊ', + 'Ϋ' => 'ϋ', + 'Ϗ' => 'ϗ', + 'Ϙ' => 'ϙ', + 'Ϛ' => 'ϛ', + 'Ϝ' => 'ϝ', + 'Ϟ' => 'ϟ', + 'Ϡ' => 'ϡ', + 'Ϣ' => 'ϣ', + 'Ϥ' => 'ϥ', + 'Ϧ' => 'ϧ', + 'Ϩ' => 'ϩ', + 'Ϫ' => 'ϫ', + 'Ϭ' => 'ϭ', + 'Ϯ' => 'ϯ', + 'ϴ' => 'θ', + 'Ϸ' => 'ϸ', + 'Ϲ' => 'ϲ', + 'Ϻ' => 'ϻ', + 'Ͻ' => 'ͻ', + 'Ͼ' => 'ͼ', + 'Ͽ' => 'ͽ', + 'Ѐ' => 'ѐ', + 'Ё' => 'ё', + 'Ђ' => 'ђ', + 'Ѓ' => 'ѓ', + 'Є' => 'є', + 'Ѕ' => 'ѕ', + 'І' => 'і', + 'Ї' => 'ї', + 'Ј' => 'ј', + 'Љ' => 'љ', + 'Њ' => 'њ', + 'Ћ' => 'ћ', + 'Ќ' => 'ќ', + 'Ѝ' => 'ѝ', + 'Ў' => 'ў', + 'Џ' => 'џ', + 'А' => 'а', + 'Б' => 'б', + 'В' => 'в', + 'Г' => 'г', + 'Д' => 'д', + 'Е' => 'е', + 'Ж' => 'ж', + 'З' => 'з', + 'И' => 'и', + 'Й' => 'й', + 'К' => 'к', + 'Л' => 'л', + 'М' => 'м', + 'Н' => 'н', + 'О' => 'о', + 'П' => 'п', + 'Р' => 'р', + 'С' => 'с', + 'Т' => 'т', + 'У' => 'у', + 'Ф' => 'ф', + 'Х' => 'х', + 'Ц' => 'ц', + 'Ч' => 'ч', + 'Ш' => 'ш', + 'Щ' => 'щ', + 'Ъ' => 'ъ', + 'Ы' => 'ы', + 'Ь' => 'ь', + 'Э' => 'э', + 'Ю' => 'ю', + 'Я' => 'я', + 'Ѡ' => 'ѡ', + 'Ѣ' => 'ѣ', + 'Ѥ' => 'ѥ', + 'Ѧ' => 'ѧ', + 'Ѩ' => 'ѩ', + 'Ѫ' => 'ѫ', + 'Ѭ' => 'ѭ', + 'Ѯ' => 'ѯ', + 'Ѱ' => 'ѱ', + 'Ѳ' => 'ѳ', + 'Ѵ' => 'ѵ', + 'Ѷ' => 'ѷ', + 'Ѹ' => 'ѹ', + 'Ѻ' => 'ѻ', + 'Ѽ' => 'ѽ', + 'Ѿ' => 'ѿ', + 'Ҁ' => 'ҁ', + 'Ҋ' => 'ҋ', + 'Ҍ' => 'ҍ', + 'Ҏ' => 'ҏ', + 'Ґ' => 'ґ', + 'Ғ' => 'ғ', + 'Ҕ' => 'ҕ', + 'Җ' => 'җ', + 'Ҙ' => 'ҙ', + 'Қ' => 'қ', + 'Ҝ' => 'ҝ', + 'Ҟ' => 'ҟ', + 'Ҡ' => 'ҡ', + 'Ң' => 'ң', + 'Ҥ' => 'ҥ', + 'Ҧ' => 'ҧ', + 'Ҩ' => 'ҩ', + 'Ҫ' => 'ҫ', + 'Ҭ' => 'ҭ', + 'Ү' => 'ү', + 'Ұ' => 'ұ', + 'Ҳ' => 'ҳ', + 'Ҵ' => 'ҵ', + 'Ҷ' => 'ҷ', + 'Ҹ' => 'ҹ', + 'Һ' => 'һ', + 'Ҽ' => 'ҽ', + 'Ҿ' => 'ҿ', + 'Ӏ' => 'ӏ', + 'Ӂ' => 'ӂ', + 'Ӄ' => 'ӄ', + 'Ӆ' => 'ӆ', + 'Ӈ' => 'ӈ', + 'Ӊ' => 'ӊ', + 'Ӌ' => 'ӌ', + 'Ӎ' => 'ӎ', + 'Ӑ' => 'ӑ', + 'Ӓ' => 'ӓ', + 'Ӕ' => 'ӕ', + 'Ӗ' => 'ӗ', + 'Ә' => 'ә', + 'Ӛ' => 'ӛ', + 'Ӝ' => 'ӝ', + 'Ӟ' => 'ӟ', + 'Ӡ' => 'ӡ', + 'Ӣ' => 'ӣ', + 'Ӥ' => 'ӥ', + 'Ӧ' => 'ӧ', + 'Ө' => 'ө', + 'Ӫ' => 'ӫ', + 'Ӭ' => 'ӭ', + 'Ӯ' => 'ӯ', + 'Ӱ' => 'ӱ', + 'Ӳ' => 'ӳ', + 'Ӵ' => 'ӵ', + 'Ӷ' => 'ӷ', + 'Ӹ' => 'ӹ', + 'Ӻ' => 'ӻ', + 'Ӽ' => 'ӽ', + 'Ӿ' => 'ӿ', + 'Ԁ' => 'ԁ', + 'Ԃ' => 'ԃ', + 'Ԅ' => 'ԅ', + 'Ԇ' => 'ԇ', + 'Ԉ' => 'ԉ', + 'Ԋ' => 'ԋ', + 'Ԍ' => 'ԍ', + 'Ԏ' => 'ԏ', + 'Ԑ' => 'ԑ', + 'Ԓ' => 'ԓ', + 'Ԕ' => 'ԕ', + 'Ԗ' => 'ԗ', + 'Ԙ' => 'ԙ', + 'Ԛ' => 'ԛ', + 'Ԝ' => 'ԝ', + 'Ԟ' => 'ԟ', + 'Ԡ' => 'ԡ', + 'Ԣ' => 'ԣ', + 'Ԥ' => 'ԥ', + 'Ԧ' => 'ԧ', + 'Ԩ' => 'ԩ', + 'Ԫ' => 'ԫ', + 'Ԭ' => 'ԭ', + 'Ԯ' => 'ԯ', + 'Ա' => 'ա', + 'Բ' => 'բ', + 'Գ' => 'գ', + 'Դ' => 'դ', + 'Ե' => 'ե', + 'Զ' => 'զ', + 'Է' => 'է', + 'Ը' => 'ը', + 'Թ' => 'թ', + 'Ժ' => 'ժ', + 'Ի' => 'ի', + 'Լ' => 'լ', + 'Խ' => 'խ', + 'Ծ' => 'ծ', + 'Կ' => 'կ', + 'Հ' => 'հ', + 'Ձ' => 'ձ', + 'Ղ' => 'ղ', + 'Ճ' => 'ճ', + 'Մ' => 'մ', + 'Յ' => 'յ', + 'Ն' => 'ն', + 'Շ' => 'շ', + 'Ո' => 'ո', + 'Չ' => 'չ', + 'Պ' => 'պ', + 'Ջ' => 'ջ', + 'Ռ' => 'ռ', + 'Ս' => 'ս', + 'Վ' => 'վ', + 'Տ' => 'տ', + 'Ր' => 'ր', + 'Ց' => 'ց', + 'Ւ' => 'ւ', + 'Փ' => 'փ', + 'Ք' => 'ք', + 'Օ' => 'օ', + 'Ֆ' => 'ֆ', + 'Ⴀ' => 'ⴀ', + 'Ⴁ' => 'ⴁ', + 'Ⴂ' => 'ⴂ', + 'Ⴃ' => 'ⴃ', + 'Ⴄ' => 'ⴄ', + 'Ⴅ' => 'ⴅ', + 'Ⴆ' => 'ⴆ', + 'Ⴇ' => 'ⴇ', + 'Ⴈ' => 'ⴈ', + 'Ⴉ' => 'ⴉ', + 'Ⴊ' => 'ⴊ', + 'Ⴋ' => 'ⴋ', + 'Ⴌ' => 'ⴌ', + 'Ⴍ' => 'ⴍ', + 'Ⴎ' => 'ⴎ', + 'Ⴏ' => 'ⴏ', + 'Ⴐ' => 'ⴐ', + 'Ⴑ' => 'ⴑ', + 'Ⴒ' => 'ⴒ', + 'Ⴓ' => 'ⴓ', + 'Ⴔ' => 'ⴔ', + 'Ⴕ' => 'ⴕ', + 'Ⴖ' => 'ⴖ', + 'Ⴗ' => 'ⴗ', + 'Ⴘ' => 'ⴘ', + 'Ⴙ' => 'ⴙ', + 'Ⴚ' => 'ⴚ', + 'Ⴛ' => 'ⴛ', + 'Ⴜ' => 'ⴜ', + 'Ⴝ' => 'ⴝ', + 'Ⴞ' => 'ⴞ', + 'Ⴟ' => 'ⴟ', + 'Ⴠ' => 'ⴠ', + 'Ⴡ' => 'ⴡ', + 'Ⴢ' => 'ⴢ', + 'Ⴣ' => 'ⴣ', + 'Ⴤ' => 'ⴤ', + 'Ⴥ' => 'ⴥ', + 'Ⴧ' => 'ⴧ', + 'Ⴭ' => 'ⴭ', + 'Ḁ' => 'ḁ', + 'Ḃ' => 'ḃ', + 'Ḅ' => 'ḅ', + 'Ḇ' => 'ḇ', + 'Ḉ' => 'ḉ', + 'Ḋ' => 'ḋ', + 'Ḍ' => 'ḍ', + 'Ḏ' => 'ḏ', + 'Ḑ' => 'ḑ', + 'Ḓ' => 'ḓ', + 'Ḕ' => 'ḕ', + 'Ḗ' => 'ḗ', + 'Ḙ' => 'ḙ', + 'Ḛ' => 'ḛ', + 'Ḝ' => 'ḝ', + 'Ḟ' => 'ḟ', + 'Ḡ' => 'ḡ', + 'Ḣ' => 'ḣ', + 'Ḥ' => 'ḥ', + 'Ḧ' => 'ḧ', + 'Ḩ' => 'ḩ', + 'Ḫ' => 'ḫ', + 'Ḭ' => 'ḭ', + 'Ḯ' => 'ḯ', + 'Ḱ' => 'ḱ', + 'Ḳ' => 'ḳ', + 'Ḵ' => 'ḵ', + 'Ḷ' => 'ḷ', + 'Ḹ' => 'ḹ', + 'Ḻ' => 'ḻ', + 'Ḽ' => 'ḽ', + 'Ḿ' => 'ḿ', + 'Ṁ' => 'ṁ', + 'Ṃ' => 'ṃ', + 'Ṅ' => 'ṅ', + 'Ṇ' => 'ṇ', + 'Ṉ' => 'ṉ', + 'Ṋ' => 'ṋ', + 'Ṍ' => 'ṍ', + 'Ṏ' => 'ṏ', + 'Ṑ' => 'ṑ', + 'Ṓ' => 'ṓ', + 'Ṕ' => 'ṕ', + 'Ṗ' => 'ṗ', + 'Ṙ' => 'ṙ', + 'Ṛ' => 'ṛ', + 'Ṝ' => 'ṝ', + 'Ṟ' => 'ṟ', + 'Ṡ' => 'ṡ', + 'Ṣ' => 'ṣ', + 'Ṥ' => 'ṥ', + 'Ṧ' => 'ṧ', + 'Ṩ' => 'ṩ', + 'Ṫ' => 'ṫ', + 'Ṭ' => 'ṭ', + 'Ṯ' => 'ṯ', + 'Ṱ' => 'ṱ', + 'Ṳ' => 'ṳ', + 'Ṵ' => 'ṵ', + 'Ṷ' => 'ṷ', + 'Ṹ' => 'ṹ', + 'Ṻ' => 'ṻ', + 'Ṽ' => 'ṽ', + 'Ṿ' => 'ṿ', + 'Ẁ' => 'ẁ', + 'Ẃ' => 'ẃ', + 'Ẅ' => 'ẅ', + 'Ẇ' => 'ẇ', + 'Ẉ' => 'ẉ', + 'Ẋ' => 'ẋ', + 'Ẍ' => 'ẍ', + 'Ẏ' => 'ẏ', + 'Ẑ' => 'ẑ', + 'Ẓ' => 'ẓ', + 'Ẕ' => 'ẕ', + 'ẞ' => 'ß', + 'Ạ' => 'ạ', + 'Ả' => 'ả', + 'Ấ' => 'ấ', + 'Ầ' => 'ầ', + 'Ẩ' => 'ẩ', + 'Ẫ' => 'ẫ', + 'Ậ' => 'ậ', + 'Ắ' => 'ắ', + 'Ằ' => 'ằ', + 'Ẳ' => 'ẳ', + 'Ẵ' => 'ẵ', + 'Ặ' => 'ặ', + 'Ẹ' => 'ẹ', + 'Ẻ' => 'ẻ', + 'Ẽ' => 'ẽ', + 'Ế' => 'ế', + 'Ề' => 'ề', + 'Ể' => 'ể', + 'Ễ' => 'ễ', + 'Ệ' => 'ệ', + 'Ỉ' => 'ỉ', + 'Ị' => 'ị', + 'Ọ' => 'ọ', + 'Ỏ' => 'ỏ', + 'Ố' => 'ố', + 'Ồ' => 'ồ', + 'Ổ' => 'ổ', + 'Ỗ' => 'ỗ', + 'Ộ' => 'ộ', + 'Ớ' => 'ớ', + 'Ờ' => 'ờ', + 'Ở' => 'ở', + 'Ỡ' => 'ỡ', + 'Ợ' => 'ợ', + 'Ụ' => 'ụ', + 'Ủ' => 'ủ', + 'Ứ' => 'ứ', + 'Ừ' => 'ừ', + 'Ử' => 'ử', + 'Ữ' => 'ữ', + 'Ự' => 'ự', + 'Ỳ' => 'ỳ', + 'Ỵ' => 'ỵ', + 'Ỷ' => 'ỷ', + 'Ỹ' => 'ỹ', + 'Ỻ' => 'ỻ', + 'Ỽ' => 'ỽ', + 'Ỿ' => 'ỿ', + 'Ἀ' => 'ἀ', + 'Ἁ' => 'ἁ', + 'Ἂ' => 'ἂ', + 'Ἃ' => 'ἃ', + 'Ἄ' => 'ἄ', + 'Ἅ' => 'ἅ', + 'Ἆ' => 'ἆ', + 'Ἇ' => 'ἇ', + 'Ἐ' => 'ἐ', + 'Ἑ' => 'ἑ', + 'Ἒ' => 'ἒ', + 'Ἓ' => 'ἓ', + 'Ἔ' => 'ἔ', + 'Ἕ' => 'ἕ', + 'Ἠ' => 'ἠ', + 'Ἡ' => 'ἡ', + 'Ἢ' => 'ἢ', + 'Ἣ' => 'ἣ', + 'Ἤ' => 'ἤ', + 'Ἥ' => 'ἥ', + 'Ἦ' => 'ἦ', + 'Ἧ' => 'ἧ', + 'Ἰ' => 'ἰ', + 'Ἱ' => 'ἱ', + 'Ἲ' => 'ἲ', + 'Ἳ' => 'ἳ', + 'Ἴ' => 'ἴ', + 'Ἵ' => 'ἵ', + 'Ἶ' => 'ἶ', + 'Ἷ' => 'ἷ', + 'Ὀ' => 'ὀ', + 'Ὁ' => 'ὁ', + 'Ὂ' => 'ὂ', + 'Ὃ' => 'ὃ', + 'Ὄ' => 'ὄ', + 'Ὅ' => 'ὅ', + 'Ὑ' => 'ὑ', + 'Ὓ' => 'ὓ', + 'Ὕ' => 'ὕ', + 'Ὗ' => 'ὗ', + 'Ὠ' => 'ὠ', + 'Ὡ' => 'ὡ', + 'Ὢ' => 'ὢ', + 'Ὣ' => 'ὣ', + 'Ὤ' => 'ὤ', + 'Ὥ' => 'ὥ', + 'Ὦ' => 'ὦ', + 'Ὧ' => 'ὧ', + 'ᾈ' => 'ᾀ', + 'ᾉ' => 'ᾁ', + 'ᾊ' => 'ᾂ', + 'ᾋ' => 'ᾃ', + 'ᾌ' => 'ᾄ', + 'ᾍ' => 'ᾅ', + 'ᾎ' => 'ᾆ', + 'ᾏ' => 'ᾇ', + 'ᾘ' => 'ᾐ', + 'ᾙ' => 'ᾑ', + 'ᾚ' => 'ᾒ', + 'ᾛ' => 'ᾓ', + 'ᾜ' => 'ᾔ', + 'ᾝ' => 'ᾕ', + 'ᾞ' => 'ᾖ', + 'ᾟ' => 'ᾗ', + 'ᾨ' => 'ᾠ', + 'ᾩ' => 'ᾡ', + 'ᾪ' => 'ᾢ', + 'ᾫ' => 'ᾣ', + 'ᾬ' => 'ᾤ', + 'ᾭ' => 'ᾥ', + 'ᾮ' => 'ᾦ', + 'ᾯ' => 'ᾧ', + 'Ᾰ' => 'ᾰ', + 'Ᾱ' => 'ᾱ', + 'Ὰ' => 'ὰ', + 'Ά' => 'ά', + 'ᾼ' => 'ᾳ', + 'Ὲ' => 'ὲ', + 'Έ' => 'έ', + 'Ὴ' => 'ὴ', + 'Ή' => 'ή', + 'ῌ' => 'ῃ', + 'Ῐ' => 'ῐ', + 'Ῑ' => 'ῑ', + 'Ὶ' => 'ὶ', + 'Ί' => 'ί', + 'Ῠ' => 'ῠ', + 'Ῡ' => 'ῡ', + 'Ὺ' => 'ὺ', + 'Ύ' => 'ύ', + 'Ῥ' => 'ῥ', + 'Ὸ' => 'ὸ', + 'Ό' => 'ό', + 'Ὼ' => 'ὼ', + 'Ώ' => 'ώ', + 'ῼ' => 'ῳ', + 'Ω' => 'ω', + 'K' => 'k', + 'Å' => 'å', + 'Ⅎ' => 'ⅎ', + 'Ⅰ' => 'ⅰ', + 'Ⅱ' => 'ⅱ', + 'Ⅲ' => 'ⅲ', + 'Ⅳ' => 'ⅳ', + 'Ⅴ' => 'ⅴ', + 'Ⅵ' => 'ⅵ', + 'Ⅶ' => 'ⅶ', + 'Ⅷ' => 'ⅷ', + 'Ⅸ' => 'ⅸ', + 'Ⅹ' => 'ⅹ', + 'Ⅺ' => 'ⅺ', + 'Ⅻ' => 'ⅻ', + 'Ⅼ' => 'ⅼ', + 'Ⅽ' => 'ⅽ', + 'Ⅾ' => 'ⅾ', + 'Ⅿ' => 'ⅿ', + 'Ↄ' => 'ↄ', + 'Ⓐ' => 'ⓐ', + 'Ⓑ' => 'ⓑ', + 'Ⓒ' => 'ⓒ', + 'Ⓓ' => 'ⓓ', + 'Ⓔ' => 'ⓔ', + 'Ⓕ' => 'ⓕ', + 'Ⓖ' => 'ⓖ', + 'Ⓗ' => 'ⓗ', + 'Ⓘ' => 'ⓘ', + 'Ⓙ' => 'ⓙ', + 'Ⓚ' => 'ⓚ', + 'Ⓛ' => 'ⓛ', + 'Ⓜ' => 'ⓜ', + 'Ⓝ' => 'ⓝ', + 'Ⓞ' => 'ⓞ', + 'Ⓟ' => 'ⓟ', + 'Ⓠ' => 'ⓠ', + 'Ⓡ' => 'ⓡ', + 'Ⓢ' => 'ⓢ', + 'Ⓣ' => 'ⓣ', + 'Ⓤ' => 'ⓤ', + 'Ⓥ' => 'ⓥ', + 'Ⓦ' => 'ⓦ', + 'Ⓧ' => 'ⓧ', + 'Ⓨ' => 'ⓨ', + 'Ⓩ' => 'ⓩ', + 'Ⰰ' => 'ⰰ', + 'Ⰱ' => 'ⰱ', + 'Ⰲ' => 'ⰲ', + 'Ⰳ' => 'ⰳ', + 'Ⰴ' => 'ⰴ', + 'Ⰵ' => 'ⰵ', + 'Ⰶ' => 'ⰶ', + 'Ⰷ' => 'ⰷ', + 'Ⰸ' => 'ⰸ', + 'Ⰹ' => 'ⰹ', + 'Ⰺ' => 'ⰺ', + 'Ⰻ' => 'ⰻ', + 'Ⰼ' => 'ⰼ', + 'Ⰽ' => 'ⰽ', + 'Ⰾ' => 'ⰾ', + 'Ⰿ' => 'ⰿ', + 'Ⱀ' => 'ⱀ', + 'Ⱁ' => 'ⱁ', + 'Ⱂ' => 'ⱂ', + 'Ⱃ' => 'ⱃ', + 'Ⱄ' => 'ⱄ', + 'Ⱅ' => 'ⱅ', + 'Ⱆ' => 'ⱆ', + 'Ⱇ' => 'ⱇ', + 'Ⱈ' => 'ⱈ', + 'Ⱉ' => 'ⱉ', + 'Ⱊ' => 'ⱊ', + 'Ⱋ' => 'ⱋ', + 'Ⱌ' => 'ⱌ', + 'Ⱍ' => 'ⱍ', + 'Ⱎ' => 'ⱎ', + 'Ⱏ' => 'ⱏ', + 'Ⱐ' => 'ⱐ', + 'Ⱑ' => 'ⱑ', + 'Ⱒ' => 'ⱒ', + 'Ⱓ' => 'ⱓ', + 'Ⱔ' => 'ⱔ', + 'Ⱕ' => 'ⱕ', + 'Ⱖ' => 'ⱖ', + 'Ⱗ' => 'ⱗ', + 'Ⱘ' => 'ⱘ', + 'Ⱙ' => 'ⱙ', + 'Ⱚ' => 'ⱚ', + 'Ⱛ' => 'ⱛ', + 'Ⱜ' => 'ⱜ', + 'Ⱝ' => 'ⱝ', + 'Ⱞ' => 'ⱞ', + 'Ⱡ' => 'ⱡ', + 'Ɫ' => 'ɫ', + 'Ᵽ' => 'ᵽ', + 'Ɽ' => 'ɽ', + 'Ⱨ' => 'ⱨ', + 'Ⱪ' => 'ⱪ', + 'Ⱬ' => 'ⱬ', + 'Ɑ' => 'ɑ', + 'Ɱ' => 'ɱ', + 'Ɐ' => 'ɐ', + 'Ɒ' => 'ɒ', + 'Ⱳ' => 'ⱳ', + 'Ⱶ' => 'ⱶ', + 'Ȿ' => 'ȿ', + 'Ɀ' => 'ɀ', + 'Ⲁ' => 'ⲁ', + 'Ⲃ' => 'ⲃ', + 'Ⲅ' => 'ⲅ', + 'Ⲇ' => 'ⲇ', + 'Ⲉ' => 'ⲉ', + 'Ⲋ' => 'ⲋ', + 'Ⲍ' => 'ⲍ', + 'Ⲏ' => 'ⲏ', + 'Ⲑ' => 'ⲑ', + 'Ⲓ' => 'ⲓ', + 'Ⲕ' => 'ⲕ', + 'Ⲗ' => 'ⲗ', + 'Ⲙ' => 'ⲙ', + 'Ⲛ' => 'ⲛ', + 'Ⲝ' => 'ⲝ', + 'Ⲟ' => 'ⲟ', + 'Ⲡ' => 'ⲡ', + 'Ⲣ' => 'ⲣ', + 'Ⲥ' => 'ⲥ', + 'Ⲧ' => 'ⲧ', + 'Ⲩ' => 'ⲩ', + 'Ⲫ' => 'ⲫ', + 'Ⲭ' => 'ⲭ', + 'Ⲯ' => 'ⲯ', + 'Ⲱ' => 'ⲱ', + 'Ⲳ' => 'ⲳ', + 'Ⲵ' => 'ⲵ', + 'Ⲷ' => 'ⲷ', + 'Ⲹ' => 'ⲹ', + 'Ⲻ' => 'ⲻ', + 'Ⲽ' => 'ⲽ', + 'Ⲿ' => 'ⲿ', + 'Ⳁ' => 'ⳁ', + 'Ⳃ' => 'ⳃ', + 'Ⳅ' => 'ⳅ', + 'Ⳇ' => 'ⳇ', + 'Ⳉ' => 'ⳉ', + 'Ⳋ' => 'ⳋ', + 'Ⳍ' => 'ⳍ', + 'Ⳏ' => 'ⳏ', + 'Ⳑ' => 'ⳑ', + 'Ⳓ' => 'ⳓ', + 'Ⳕ' => 'ⳕ', + 'Ⳗ' => 'ⳗ', + 'Ⳙ' => 'ⳙ', + 'Ⳛ' => 'ⳛ', + 'Ⳝ' => 'ⳝ', + 'Ⳟ' => 'ⳟ', + 'Ⳡ' => 'ⳡ', + 'Ⳣ' => 'ⳣ', + 'Ⳬ' => 'ⳬ', + 'Ⳮ' => 'ⳮ', + 'Ⳳ' => 'ⳳ', + 'Ꙁ' => 'ꙁ', + 'Ꙃ' => 'ꙃ', + 'Ꙅ' => 'ꙅ', + 'Ꙇ' => 'ꙇ', + 'Ꙉ' => 'ꙉ', + 'Ꙋ' => 'ꙋ', + 'Ꙍ' => 'ꙍ', + 'Ꙏ' => 'ꙏ', + 'Ꙑ' => 'ꙑ', + 'Ꙓ' => 'ꙓ', + 'Ꙕ' => 'ꙕ', + 'Ꙗ' => 'ꙗ', + 'Ꙙ' => 'ꙙ', + 'Ꙛ' => 'ꙛ', + 'Ꙝ' => 'ꙝ', + 'Ꙟ' => 'ꙟ', + 'Ꙡ' => 'ꙡ', + 'Ꙣ' => 'ꙣ', + 'Ꙥ' => 'ꙥ', + 'Ꙧ' => 'ꙧ', + 'Ꙩ' => 'ꙩ', + 'Ꙫ' => 'ꙫ', + 'Ꙭ' => 'ꙭ', + 'Ꚁ' => 'ꚁ', + 'Ꚃ' => 'ꚃ', + 'Ꚅ' => 'ꚅ', + 'Ꚇ' => 'ꚇ', + 'Ꚉ' => 'ꚉ', + 'Ꚋ' => 'ꚋ', + 'Ꚍ' => 'ꚍ', + 'Ꚏ' => 'ꚏ', + 'Ꚑ' => 'ꚑ', + 'Ꚓ' => 'ꚓ', + 'Ꚕ' => 'ꚕ', + 'Ꚗ' => 'ꚗ', + 'Ꚙ' => 'ꚙ', + 'Ꚛ' => 'ꚛ', + 'Ꜣ' => 'ꜣ', + 'Ꜥ' => 'ꜥ', + 'Ꜧ' => 'ꜧ', + 'Ꜩ' => 'ꜩ', + 'Ꜫ' => 'ꜫ', + 'Ꜭ' => 'ꜭ', + 'Ꜯ' => 'ꜯ', + 'Ꜳ' => 'ꜳ', + 'Ꜵ' => 'ꜵ', + 'Ꜷ' => 'ꜷ', + 'Ꜹ' => 'ꜹ', + 'Ꜻ' => 'ꜻ', + 'Ꜽ' => 'ꜽ', + 'Ꜿ' => 'ꜿ', + 'Ꝁ' => 'ꝁ', + 'Ꝃ' => 'ꝃ', + 'Ꝅ' => 'ꝅ', + 'Ꝇ' => 'ꝇ', + 'Ꝉ' => 'ꝉ', + 'Ꝋ' => 'ꝋ', + 'Ꝍ' => 'ꝍ', + 'Ꝏ' => 'ꝏ', + 'Ꝑ' => 'ꝑ', + 'Ꝓ' => 'ꝓ', + 'Ꝕ' => 'ꝕ', + 'Ꝗ' => 'ꝗ', + 'Ꝙ' => 'ꝙ', + 'Ꝛ' => 'ꝛ', + 'Ꝝ' => 'ꝝ', + 'Ꝟ' => 'ꝟ', + 'Ꝡ' => 'ꝡ', + 'Ꝣ' => 'ꝣ', + 'Ꝥ' => 'ꝥ', + 'Ꝧ' => 'ꝧ', + 'Ꝩ' => 'ꝩ', + 'Ꝫ' => 'ꝫ', + 'Ꝭ' => 'ꝭ', + 'Ꝯ' => 'ꝯ', + 'Ꝺ' => 'ꝺ', + 'Ꝼ' => 'ꝼ', + 'Ᵹ' => 'ᵹ', + 'Ꝿ' => 'ꝿ', + 'Ꞁ' => 'ꞁ', + 'Ꞃ' => 'ꞃ', + 'Ꞅ' => 'ꞅ', + 'Ꞇ' => 'ꞇ', + 'Ꞌ' => 'ꞌ', + 'Ɥ' => 'ɥ', + 'Ꞑ' => 'ꞑ', + 'Ꞓ' => 'ꞓ', + 'Ꞗ' => 'ꞗ', + 'Ꞙ' => 'ꞙ', + 'Ꞛ' => 'ꞛ', + 'Ꞝ' => 'ꞝ', + 'Ꞟ' => 'ꞟ', + 'Ꞡ' => 'ꞡ', + 'Ꞣ' => 'ꞣ', + 'Ꞥ' => 'ꞥ', + 'Ꞧ' => 'ꞧ', + 'Ꞩ' => 'ꞩ', + 'Ɦ' => 'ɦ', + 'Ɜ' => 'ɜ', + 'Ɡ' => 'ɡ', + 'Ɬ' => 'ɬ', + 'Ʞ' => 'ʞ', + 'Ʇ' => 'ʇ', + 'A' => 'a', + 'B' => 'b', + 'C' => 'c', + 'D' => 'd', + 'E' => 'e', + 'F' => 'f', + 'G' => 'g', + 'H' => 'h', + 'I' => 'i', + 'J' => 'j', + 'K' => 'k', + 'L' => 'l', + 'M' => 'm', + 'N' => 'n', + 'O' => 'o', + 'P' => 'p', + 'Q' => 'q', + 'R' => 'r', + 'S' => 's', + 'T' => 't', + 'U' => 'u', + 'V' => 'v', + 'W' => 'w', + 'X' => 'x', + 'Y' => 'y', + 'Z' => 'z', + '𐐀' => '𐐨', + '𐐁' => '𐐩', + '𐐂' => '𐐪', + '𐐃' => '𐐫', + '𐐄' => '𐐬', + '𐐅' => '𐐭', + '𐐆' => '𐐮', + '𐐇' => '𐐯', + '𐐈' => '𐐰', + '𐐉' => '𐐱', + '𐐊' => '𐐲', + '𐐋' => '𐐳', + '𐐌' => '𐐴', + '𐐍' => '𐐵', + '𐐎' => '𐐶', + '𐐏' => '𐐷', + '𐐐' => '𐐸', + '𐐑' => '𐐹', + '𐐒' => '𐐺', + '𐐓' => '𐐻', + '𐐔' => '𐐼', + '𐐕' => '𐐽', + '𐐖' => '𐐾', + '𐐗' => '𐐿', + '𐐘' => '𐑀', + '𐐙' => '𐑁', + '𐐚' => '𐑂', + '𐐛' => '𐑃', + '𐐜' => '𐑄', + '𐐝' => '𐑅', + '𐐞' => '𐑆', + '𐐟' => '𐑇', + '𐐠' => '𐑈', + '𐐡' => '𐑉', + '𐐢' => '𐑊', + '𐐣' => '𐑋', + '𐐤' => '𐑌', + '𐐥' => '𐑍', + '𐐦' => '𐑎', + '𐐧' => '𐑏', + '𑢠' => '𑣀', + '𑢡' => '𑣁', + '𑢢' => '𑣂', + '𑢣' => '𑣃', + '𑢤' => '𑣄', + '𑢥' => '𑣅', + '𑢦' => '𑣆', + '𑢧' => '𑣇', + '𑢨' => '𑣈', + '𑢩' => '𑣉', + '𑢪' => '𑣊', + '𑢫' => '𑣋', + '𑢬' => '𑣌', + '𑢭' => '𑣍', + '𑢮' => '𑣎', + '𑢯' => '𑣏', + '𑢰' => '𑣐', + '𑢱' => '𑣑', + '𑢲' => '𑣒', + '𑢳' => '𑣓', + '𑢴' => '𑣔', + '𑢵' => '𑣕', + '𑢶' => '𑣖', + '𑢷' => '𑣗', + '𑢸' => '𑣘', + '𑢹' => '𑣙', + '𑢺' => '𑣚', + '𑢻' => '𑣛', + '𑢼' => '𑣜', + '𑢽' => '𑣝', + '𑢾' => '𑣞', + '𑢿' => '𑣟', +); diff --git a/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php b/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php new file mode 100644 index 0000000..2a8f6e7 --- /dev/null +++ b/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php @@ -0,0 +1,5 @@ + 'A', + 'b' => 'B', + 'c' => 'C', + 'd' => 'D', + 'e' => 'E', + 'f' => 'F', + 'g' => 'G', + 'h' => 'H', + 'i' => 'I', + 'j' => 'J', + 'k' => 'K', + 'l' => 'L', + 'm' => 'M', + 'n' => 'N', + 'o' => 'O', + 'p' => 'P', + 'q' => 'Q', + 'r' => 'R', + 's' => 'S', + 't' => 'T', + 'u' => 'U', + 'v' => 'V', + 'w' => 'W', + 'x' => 'X', + 'y' => 'Y', + 'z' => 'Z', + 'µ' => 'Μ', + 'à' => 'À', + 'á' => 'Á', + 'â' => 'Â', + 'ã' => 'Ã', + 'ä' => 'Ä', + 'å' => 'Å', + 'æ' => 'Æ', + 'ç' => 'Ç', + 'è' => 'È', + 'é' => 'É', + 'ê' => 'Ê', + 'ë' => 'Ë', + 'ì' => 'Ì', + 'í' => 'Í', + 'î' => 'Î', + 'ï' => 'Ï', + 'ð' => 'Ð', + 'ñ' => 'Ñ', + 'ò' => 'Ò', + 'ó' => 'Ó', + 'ô' => 'Ô', + 'õ' => 'Õ', + 'ö' => 'Ö', + 'ø' => 'Ø', + 'ù' => 'Ù', + 'ú' => 'Ú', + 'û' => 'Û', + 'ü' => 'Ü', + 'ý' => 'Ý', + 'þ' => 'Þ', + 'ÿ' => 'Ÿ', + 'ā' => 'Ā', + 'ă' => 'Ă', + 'ą' => 'Ą', + 'ć' => 'Ć', + 'ĉ' => 'Ĉ', + 'ċ' => 'Ċ', + 'č' => 'Č', + 'ď' => 'Ď', + 'đ' => 'Đ', + 'ē' => 'Ē', + 'ĕ' => 'Ĕ', + 'ė' => 'Ė', + 'ę' => 'Ę', + 'ě' => 'Ě', + 'ĝ' => 'Ĝ', + 'ğ' => 'Ğ', + 'ġ' => 'Ġ', + 'ģ' => 'Ģ', + 'ĥ' => 'Ĥ', + 'ħ' => 'Ħ', + 'ĩ' => 'Ĩ', + 'ī' => 'Ī', + 'ĭ' => 'Ĭ', + 'į' => 'Į', + 'ı' => 'I', + 'ij' => 'IJ', + 'ĵ' => 'Ĵ', + 'ķ' => 'Ķ', + 'ĺ' => 'Ĺ', + 'ļ' => 'Ļ', + 'ľ' => 'Ľ', + 'ŀ' => 'Ŀ', + 'ł' => 'Ł', + 'ń' => 'Ń', + 'ņ' => 'Ņ', + 'ň' => 'Ň', + 'ŋ' => 'Ŋ', + 'ō' => 'Ō', + 'ŏ' => 'Ŏ', + 'ő' => 'Ő', + 'œ' => 'Œ', + 'ŕ' => 'Ŕ', + 'ŗ' => 'Ŗ', + 'ř' => 'Ř', + 'ś' => 'Ś', + 'ŝ' => 'Ŝ', + 'ş' => 'Ş', + 'š' => 'Š', + 'ţ' => 'Ţ', + 'ť' => 'Ť', + 'ŧ' => 'Ŧ', + 'ũ' => 'Ũ', + 'ū' => 'Ū', + 'ŭ' => 'Ŭ', + 'ů' => 'Ů', + 'ű' => 'Ű', + 'ų' => 'Ų', + 'ŵ' => 'Ŵ', + 'ŷ' => 'Ŷ', + 'ź' => 'Ź', + 'ż' => 'Ż', + 'ž' => 'Ž', + 'ſ' => 'S', + 'ƀ' => 'Ƀ', + 'ƃ' => 'Ƃ', + 'ƅ' => 'Ƅ', + 'ƈ' => 'Ƈ', + 'ƌ' => 'Ƌ', + 'ƒ' => 'Ƒ', + 'ƕ' => 'Ƕ', + 'ƙ' => 'Ƙ', + 'ƚ' => 'Ƚ', + 'ƞ' => 'Ƞ', + 'ơ' => 'Ơ', + 'ƣ' => 'Ƣ', + 'ƥ' => 'Ƥ', + 'ƨ' => 'Ƨ', + 'ƭ' => 'Ƭ', + 'ư' => 'Ư', + 'ƴ' => 'Ƴ', + 'ƶ' => 'Ƶ', + 'ƹ' => 'Ƹ', + 'ƽ' => 'Ƽ', + 'ƿ' => 'Ƿ', + 'Dž' => 'DŽ', + 'dž' => 'DŽ', + 'Lj' => 'LJ', + 'lj' => 'LJ', + 'Nj' => 'NJ', + 'nj' => 'NJ', + 'ǎ' => 'Ǎ', + 'ǐ' => 'Ǐ', + 'ǒ' => 'Ǒ', + 'ǔ' => 'Ǔ', + 'ǖ' => 'Ǖ', + 'ǘ' => 'Ǘ', + 'ǚ' => 'Ǚ', + 'ǜ' => 'Ǜ', + 'ǝ' => 'Ǝ', + 'ǟ' => 'Ǟ', + 'ǡ' => 'Ǡ', + 'ǣ' => 'Ǣ', + 'ǥ' => 'Ǥ', + 'ǧ' => 'Ǧ', + 'ǩ' => 'Ǩ', + 'ǫ' => 'Ǫ', + 'ǭ' => 'Ǭ', + 'ǯ' => 'Ǯ', + 'Dz' => 'DZ', + 'dz' => 'DZ', + 'ǵ' => 'Ǵ', + 'ǹ' => 'Ǹ', + 'ǻ' => 'Ǻ', + 'ǽ' => 'Ǽ', + 'ǿ' => 'Ǿ', + 'ȁ' => 'Ȁ', + 'ȃ' => 'Ȃ', + 'ȅ' => 'Ȅ', + 'ȇ' => 'Ȇ', + 'ȉ' => 'Ȉ', + 'ȋ' => 'Ȋ', + 'ȍ' => 'Ȍ', + 'ȏ' => 'Ȏ', + 'ȑ' => 'Ȑ', + 'ȓ' => 'Ȓ', + 'ȕ' => 'Ȕ', + 'ȗ' => 'Ȗ', + 'ș' => 'Ș', + 'ț' => 'Ț', + 'ȝ' => 'Ȝ', + 'ȟ' => 'Ȟ', + 'ȣ' => 'Ȣ', + 'ȥ' => 'Ȥ', + 'ȧ' => 'Ȧ', + 'ȩ' => 'Ȩ', + 'ȫ' => 'Ȫ', + 'ȭ' => 'Ȭ', + 'ȯ' => 'Ȯ', + 'ȱ' => 'Ȱ', + 'ȳ' => 'Ȳ', + 'ȼ' => 'Ȼ', + 'ȿ' => 'Ȿ', + 'ɀ' => 'Ɀ', + 'ɂ' => 'Ɂ', + 'ɇ' => 'Ɇ', + 'ɉ' => 'Ɉ', + 'ɋ' => 'Ɋ', + 'ɍ' => 'Ɍ', + 'ɏ' => 'Ɏ', + 'ɐ' => 'Ɐ', + 'ɑ' => 'Ɑ', + 'ɒ' => 'Ɒ', + 'ɓ' => 'Ɓ', + 'ɔ' => 'Ɔ', + 'ɖ' => 'Ɖ', + 'ɗ' => 'Ɗ', + 'ə' => 'Ə', + 'ɛ' => 'Ɛ', + 'ɜ' => 'Ɜ', + 'ɠ' => 'Ɠ', + 'ɡ' => 'Ɡ', + 'ɣ' => 'Ɣ', + 'ɥ' => 'Ɥ', + 'ɦ' => 'Ɦ', + 'ɨ' => 'Ɨ', + 'ɩ' => 'Ɩ', + 'ɫ' => 'Ɫ', + 'ɬ' => 'Ɬ', + 'ɯ' => 'Ɯ', + 'ɱ' => 'Ɱ', + 'ɲ' => 'Ɲ', + 'ɵ' => 'Ɵ', + 'ɽ' => 'Ɽ', + 'ʀ' => 'Ʀ', + 'ʃ' => 'Ʃ', + 'ʇ' => 'Ʇ', + 'ʈ' => 'Ʈ', + 'ʉ' => 'Ʉ', + 'ʊ' => 'Ʊ', + 'ʋ' => 'Ʋ', + 'ʌ' => 'Ʌ', + 'ʒ' => 'Ʒ', + 'ʞ' => 'Ʞ', + 'ͅ' => 'Ι', + 'ͱ' => 'Ͱ', + 'ͳ' => 'Ͳ', + 'ͷ' => 'Ͷ', + 'ͻ' => 'Ͻ', + 'ͼ' => 'Ͼ', + 'ͽ' => 'Ͽ', + 'ά' => 'Ά', + 'έ' => 'Έ', + 'ή' => 'Ή', + 'ί' => 'Ί', + 'α' => 'Α', + 'β' => 'Β', + 'γ' => 'Γ', + 'δ' => 'Δ', + 'ε' => 'Ε', + 'ζ' => 'Ζ', + 'η' => 'Η', + 'θ' => 'Θ', + 'ι' => 'Ι', + 'κ' => 'Κ', + 'λ' => 'Λ', + 'μ' => 'Μ', + 'ν' => 'Ν', + 'ξ' => 'Ξ', + 'ο' => 'Ο', + 'π' => 'Π', + 'ρ' => 'Ρ', + 'ς' => 'Σ', + 'σ' => 'Σ', + 'τ' => 'Τ', + 'υ' => 'Υ', + 'φ' => 'Φ', + 'χ' => 'Χ', + 'ψ' => 'Ψ', + 'ω' => 'Ω', + 'ϊ' => 'Ϊ', + 'ϋ' => 'Ϋ', + 'ό' => 'Ό', + 'ύ' => 'Ύ', + 'ώ' => 'Ώ', + 'ϐ' => 'Β', + 'ϑ' => 'Θ', + 'ϕ' => 'Φ', + 'ϖ' => 'Π', + 'ϗ' => 'Ϗ', + 'ϙ' => 'Ϙ', + 'ϛ' => 'Ϛ', + 'ϝ' => 'Ϝ', + 'ϟ' => 'Ϟ', + 'ϡ' => 'Ϡ', + 'ϣ' => 'Ϣ', + 'ϥ' => 'Ϥ', + 'ϧ' => 'Ϧ', + 'ϩ' => 'Ϩ', + 'ϫ' => 'Ϫ', + 'ϭ' => 'Ϭ', + 'ϯ' => 'Ϯ', + 'ϰ' => 'Κ', + 'ϱ' => 'Ρ', + 'ϲ' => 'Ϲ', + 'ϳ' => 'Ϳ', + 'ϵ' => 'Ε', + 'ϸ' => 'Ϸ', + 'ϻ' => 'Ϻ', + 'а' => 'А', + 'б' => 'Б', + 'в' => 'В', + 'г' => 'Г', + 'д' => 'Д', + 'е' => 'Е', + 'ж' => 'Ж', + 'з' => 'З', + 'и' => 'И', + 'й' => 'Й', + 'к' => 'К', + 'л' => 'Л', + 'м' => 'М', + 'н' => 'Н', + 'о' => 'О', + 'п' => 'П', + 'р' => 'Р', + 'с' => 'С', + 'т' => 'Т', + 'у' => 'У', + 'ф' => 'Ф', + 'х' => 'Х', + 'ц' => 'Ц', + 'ч' => 'Ч', + 'ш' => 'Ш', + 'щ' => 'Щ', + 'ъ' => 'Ъ', + 'ы' => 'Ы', + 'ь' => 'Ь', + 'э' => 'Э', + 'ю' => 'Ю', + 'я' => 'Я', + 'ѐ' => 'Ѐ', + 'ё' => 'Ё', + 'ђ' => 'Ђ', + 'ѓ' => 'Ѓ', + 'є' => 'Є', + 'ѕ' => 'Ѕ', + 'і' => 'І', + 'ї' => 'Ї', + 'ј' => 'Ј', + 'љ' => 'Љ', + 'њ' => 'Њ', + 'ћ' => 'Ћ', + 'ќ' => 'Ќ', + 'ѝ' => 'Ѝ', + 'ў' => 'Ў', + 'џ' => 'Џ', + 'ѡ' => 'Ѡ', + 'ѣ' => 'Ѣ', + 'ѥ' => 'Ѥ', + 'ѧ' => 'Ѧ', + 'ѩ' => 'Ѩ', + 'ѫ' => 'Ѫ', + 'ѭ' => 'Ѭ', + 'ѯ' => 'Ѯ', + 'ѱ' => 'Ѱ', + 'ѳ' => 'Ѳ', + 'ѵ' => 'Ѵ', + 'ѷ' => 'Ѷ', + 'ѹ' => 'Ѹ', + 'ѻ' => 'Ѻ', + 'ѽ' => 'Ѽ', + 'ѿ' => 'Ѿ', + 'ҁ' => 'Ҁ', + 'ҋ' => 'Ҋ', + 'ҍ' => 'Ҍ', + 'ҏ' => 'Ҏ', + 'ґ' => 'Ґ', + 'ғ' => 'Ғ', + 'ҕ' => 'Ҕ', + 'җ' => 'Җ', + 'ҙ' => 'Ҙ', + 'қ' => 'Қ', + 'ҝ' => 'Ҝ', + 'ҟ' => 'Ҟ', + 'ҡ' => 'Ҡ', + 'ң' => 'Ң', + 'ҥ' => 'Ҥ', + 'ҧ' => 'Ҧ', + 'ҩ' => 'Ҩ', + 'ҫ' => 'Ҫ', + 'ҭ' => 'Ҭ', + 'ү' => 'Ү', + 'ұ' => 'Ұ', + 'ҳ' => 'Ҳ', + 'ҵ' => 'Ҵ', + 'ҷ' => 'Ҷ', + 'ҹ' => 'Ҹ', + 'һ' => 'Һ', + 'ҽ' => 'Ҽ', + 'ҿ' => 'Ҿ', + 'ӂ' => 'Ӂ', + 'ӄ' => 'Ӄ', + 'ӆ' => 'Ӆ', + 'ӈ' => 'Ӈ', + 'ӊ' => 'Ӊ', + 'ӌ' => 'Ӌ', + 'ӎ' => 'Ӎ', + 'ӏ' => 'Ӏ', + 'ӑ' => 'Ӑ', + 'ӓ' => 'Ӓ', + 'ӕ' => 'Ӕ', + 'ӗ' => 'Ӗ', + 'ә' => 'Ә', + 'ӛ' => 'Ӛ', + 'ӝ' => 'Ӝ', + 'ӟ' => 'Ӟ', + 'ӡ' => 'Ӡ', + 'ӣ' => 'Ӣ', + 'ӥ' => 'Ӥ', + 'ӧ' => 'Ӧ', + 'ө' => 'Ө', + 'ӫ' => 'Ӫ', + 'ӭ' => 'Ӭ', + 'ӯ' => 'Ӯ', + 'ӱ' => 'Ӱ', + 'ӳ' => 'Ӳ', + 'ӵ' => 'Ӵ', + 'ӷ' => 'Ӷ', + 'ӹ' => 'Ӹ', + 'ӻ' => 'Ӻ', + 'ӽ' => 'Ӽ', + 'ӿ' => 'Ӿ', + 'ԁ' => 'Ԁ', + 'ԃ' => 'Ԃ', + 'ԅ' => 'Ԅ', + 'ԇ' => 'Ԇ', + 'ԉ' => 'Ԉ', + 'ԋ' => 'Ԋ', + 'ԍ' => 'Ԍ', + 'ԏ' => 'Ԏ', + 'ԑ' => 'Ԑ', + 'ԓ' => 'Ԓ', + 'ԕ' => 'Ԕ', + 'ԗ' => 'Ԗ', + 'ԙ' => 'Ԙ', + 'ԛ' => 'Ԛ', + 'ԝ' => 'Ԝ', + 'ԟ' => 'Ԟ', + 'ԡ' => 'Ԡ', + 'ԣ' => 'Ԣ', + 'ԥ' => 'Ԥ', + 'ԧ' => 'Ԧ', + 'ԩ' => 'Ԩ', + 'ԫ' => 'Ԫ', + 'ԭ' => 'Ԭ', + 'ԯ' => 'Ԯ', + 'ա' => 'Ա', + 'բ' => 'Բ', + 'գ' => 'Գ', + 'դ' => 'Դ', + 'ե' => 'Ե', + 'զ' => 'Զ', + 'է' => 'Է', + 'ը' => 'Ը', + 'թ' => 'Թ', + 'ժ' => 'Ժ', + 'ի' => 'Ի', + 'լ' => 'Լ', + 'խ' => 'Խ', + 'ծ' => 'Ծ', + 'կ' => 'Կ', + 'հ' => 'Հ', + 'ձ' => 'Ձ', + 'ղ' => 'Ղ', + 'ճ' => 'Ճ', + 'մ' => 'Մ', + 'յ' => 'Յ', + 'ն' => 'Ն', + 'շ' => 'Շ', + 'ո' => 'Ո', + 'չ' => 'Չ', + 'պ' => 'Պ', + 'ջ' => 'Ջ', + 'ռ' => 'Ռ', + 'ս' => 'Ս', + 'վ' => 'Վ', + 'տ' => 'Տ', + 'ր' => 'Ր', + 'ց' => 'Ց', + 'ւ' => 'Ւ', + 'փ' => 'Փ', + 'ք' => 'Ք', + 'օ' => 'Օ', + 'ֆ' => 'Ֆ', + 'ᵹ' => 'Ᵹ', + 'ᵽ' => 'Ᵽ', + 'ḁ' => 'Ḁ', + 'ḃ' => 'Ḃ', + 'ḅ' => 'Ḅ', + 'ḇ' => 'Ḇ', + 'ḉ' => 'Ḉ', + 'ḋ' => 'Ḋ', + 'ḍ' => 'Ḍ', + 'ḏ' => 'Ḏ', + 'ḑ' => 'Ḑ', + 'ḓ' => 'Ḓ', + 'ḕ' => 'Ḕ', + 'ḗ' => 'Ḗ', + 'ḙ' => 'Ḙ', + 'ḛ' => 'Ḛ', + 'ḝ' => 'Ḝ', + 'ḟ' => 'Ḟ', + 'ḡ' => 'Ḡ', + 'ḣ' => 'Ḣ', + 'ḥ' => 'Ḥ', + 'ḧ' => 'Ḧ', + 'ḩ' => 'Ḩ', + 'ḫ' => 'Ḫ', + 'ḭ' => 'Ḭ', + 'ḯ' => 'Ḯ', + 'ḱ' => 'Ḱ', + 'ḳ' => 'Ḳ', + 'ḵ' => 'Ḵ', + 'ḷ' => 'Ḷ', + 'ḹ' => 'Ḹ', + 'ḻ' => 'Ḻ', + 'ḽ' => 'Ḽ', + 'ḿ' => 'Ḿ', + 'ṁ' => 'Ṁ', + 'ṃ' => 'Ṃ', + 'ṅ' => 'Ṅ', + 'ṇ' => 'Ṇ', + 'ṉ' => 'Ṉ', + 'ṋ' => 'Ṋ', + 'ṍ' => 'Ṍ', + 'ṏ' => 'Ṏ', + 'ṑ' => 'Ṑ', + 'ṓ' => 'Ṓ', + 'ṕ' => 'Ṕ', + 'ṗ' => 'Ṗ', + 'ṙ' => 'Ṙ', + 'ṛ' => 'Ṛ', + 'ṝ' => 'Ṝ', + 'ṟ' => 'Ṟ', + 'ṡ' => 'Ṡ', + 'ṣ' => 'Ṣ', + 'ṥ' => 'Ṥ', + 'ṧ' => 'Ṧ', + 'ṩ' => 'Ṩ', + 'ṫ' => 'Ṫ', + 'ṭ' => 'Ṭ', + 'ṯ' => 'Ṯ', + 'ṱ' => 'Ṱ', + 'ṳ' => 'Ṳ', + 'ṵ' => 'Ṵ', + 'ṷ' => 'Ṷ', + 'ṹ' => 'Ṹ', + 'ṻ' => 'Ṻ', + 'ṽ' => 'Ṽ', + 'ṿ' => 'Ṿ', + 'ẁ' => 'Ẁ', + 'ẃ' => 'Ẃ', + 'ẅ' => 'Ẅ', + 'ẇ' => 'Ẇ', + 'ẉ' => 'Ẉ', + 'ẋ' => 'Ẋ', + 'ẍ' => 'Ẍ', + 'ẏ' => 'Ẏ', + 'ẑ' => 'Ẑ', + 'ẓ' => 'Ẓ', + 'ẕ' => 'Ẕ', + 'ẛ' => 'Ṡ', + 'ạ' => 'Ạ', + 'ả' => 'Ả', + 'ấ' => 'Ấ', + 'ầ' => 'Ầ', + 'ẩ' => 'Ẩ', + 'ẫ' => 'Ẫ', + 'ậ' => 'Ậ', + 'ắ' => 'Ắ', + 'ằ' => 'Ằ', + 'ẳ' => 'Ẳ', + 'ẵ' => 'Ẵ', + 'ặ' => 'Ặ', + 'ẹ' => 'Ẹ', + 'ẻ' => 'Ẻ', + 'ẽ' => 'Ẽ', + 'ế' => 'Ế', + 'ề' => 'Ề', + 'ể' => 'Ể', + 'ễ' => 'Ễ', + 'ệ' => 'Ệ', + 'ỉ' => 'Ỉ', + 'ị' => 'Ị', + 'ọ' => 'Ọ', + 'ỏ' => 'Ỏ', + 'ố' => 'Ố', + 'ồ' => 'Ồ', + 'ổ' => 'Ổ', + 'ỗ' => 'Ỗ', + 'ộ' => 'Ộ', + 'ớ' => 'Ớ', + 'ờ' => 'Ờ', + 'ở' => 'Ở', + 'ỡ' => 'Ỡ', + 'ợ' => 'Ợ', + 'ụ' => 'Ụ', + 'ủ' => 'Ủ', + 'ứ' => 'Ứ', + 'ừ' => 'Ừ', + 'ử' => 'Ử', + 'ữ' => 'Ữ', + 'ự' => 'Ự', + 'ỳ' => 'Ỳ', + 'ỵ' => 'Ỵ', + 'ỷ' => 'Ỷ', + 'ỹ' => 'Ỹ', + 'ỻ' => 'Ỻ', + 'ỽ' => 'Ỽ', + 'ỿ' => 'Ỿ', + 'ἀ' => 'Ἀ', + 'ἁ' => 'Ἁ', + 'ἂ' => 'Ἂ', + 'ἃ' => 'Ἃ', + 'ἄ' => 'Ἄ', + 'ἅ' => 'Ἅ', + 'ἆ' => 'Ἆ', + 'ἇ' => 'Ἇ', + 'ἐ' => 'Ἐ', + 'ἑ' => 'Ἑ', + 'ἒ' => 'Ἒ', + 'ἓ' => 'Ἓ', + 'ἔ' => 'Ἔ', + 'ἕ' => 'Ἕ', + 'ἠ' => 'Ἠ', + 'ἡ' => 'Ἡ', + 'ἢ' => 'Ἢ', + 'ἣ' => 'Ἣ', + 'ἤ' => 'Ἤ', + 'ἥ' => 'Ἥ', + 'ἦ' => 'Ἦ', + 'ἧ' => 'Ἧ', + 'ἰ' => 'Ἰ', + 'ἱ' => 'Ἱ', + 'ἲ' => 'Ἲ', + 'ἳ' => 'Ἳ', + 'ἴ' => 'Ἴ', + 'ἵ' => 'Ἵ', + 'ἶ' => 'Ἶ', + 'ἷ' => 'Ἷ', + 'ὀ' => 'Ὀ', + 'ὁ' => 'Ὁ', + 'ὂ' => 'Ὂ', + 'ὃ' => 'Ὃ', + 'ὄ' => 'Ὄ', + 'ὅ' => 'Ὅ', + 'ὑ' => 'Ὑ', + 'ὓ' => 'Ὓ', + 'ὕ' => 'Ὕ', + 'ὗ' => 'Ὗ', + 'ὠ' => 'Ὠ', + 'ὡ' => 'Ὡ', + 'ὢ' => 'Ὢ', + 'ὣ' => 'Ὣ', + 'ὤ' => 'Ὤ', + 'ὥ' => 'Ὥ', + 'ὦ' => 'Ὦ', + 'ὧ' => 'Ὧ', + 'ὰ' => 'Ὰ', + 'ά' => 'Ά', + 'ὲ' => 'Ὲ', + 'έ' => 'Έ', + 'ὴ' => 'Ὴ', + 'ή' => 'Ή', + 'ὶ' => 'Ὶ', + 'ί' => 'Ί', + 'ὸ' => 'Ὸ', + 'ό' => 'Ό', + 'ὺ' => 'Ὺ', + 'ύ' => 'Ύ', + 'ὼ' => 'Ὼ', + 'ώ' => 'Ώ', + 'ᾀ' => 'ᾈ', + 'ᾁ' => 'ᾉ', + 'ᾂ' => 'ᾊ', + 'ᾃ' => 'ᾋ', + 'ᾄ' => 'ᾌ', + 'ᾅ' => 'ᾍ', + 'ᾆ' => 'ᾎ', + 'ᾇ' => 'ᾏ', + 'ᾐ' => 'ᾘ', + 'ᾑ' => 'ᾙ', + 'ᾒ' => 'ᾚ', + 'ᾓ' => 'ᾛ', + 'ᾔ' => 'ᾜ', + 'ᾕ' => 'ᾝ', + 'ᾖ' => 'ᾞ', + 'ᾗ' => 'ᾟ', + 'ᾠ' => 'ᾨ', + 'ᾡ' => 'ᾩ', + 'ᾢ' => 'ᾪ', + 'ᾣ' => 'ᾫ', + 'ᾤ' => 'ᾬ', + 'ᾥ' => 'ᾭ', + 'ᾦ' => 'ᾮ', + 'ᾧ' => 'ᾯ', + 'ᾰ' => 'Ᾰ', + 'ᾱ' => 'Ᾱ', + 'ᾳ' => 'ᾼ', + 'ι' => 'Ι', + 'ῃ' => 'ῌ', + 'ῐ' => 'Ῐ', + 'ῑ' => 'Ῑ', + 'ῠ' => 'Ῠ', + 'ῡ' => 'Ῡ', + 'ῥ' => 'Ῥ', + 'ῳ' => 'ῼ', + 'ⅎ' => 'Ⅎ', + 'ⅰ' => 'Ⅰ', + 'ⅱ' => 'Ⅱ', + 'ⅲ' => 'Ⅲ', + 'ⅳ' => 'Ⅳ', + 'ⅴ' => 'Ⅴ', + 'ⅵ' => 'Ⅵ', + 'ⅶ' => 'Ⅶ', + 'ⅷ' => 'Ⅷ', + 'ⅸ' => 'Ⅸ', + 'ⅹ' => 'Ⅹ', + 'ⅺ' => 'Ⅺ', + 'ⅻ' => 'Ⅻ', + 'ⅼ' => 'Ⅼ', + 'ⅽ' => 'Ⅽ', + 'ⅾ' => 'Ⅾ', + 'ⅿ' => 'Ⅿ', + 'ↄ' => 'Ↄ', + 'ⓐ' => 'Ⓐ', + 'ⓑ' => 'Ⓑ', + 'ⓒ' => 'Ⓒ', + 'ⓓ' => 'Ⓓ', + 'ⓔ' => 'Ⓔ', + 'ⓕ' => 'Ⓕ', + 'ⓖ' => 'Ⓖ', + 'ⓗ' => 'Ⓗ', + 'ⓘ' => 'Ⓘ', + 'ⓙ' => 'Ⓙ', + 'ⓚ' => 'Ⓚ', + 'ⓛ' => 'Ⓛ', + 'ⓜ' => 'Ⓜ', + 'ⓝ' => 'Ⓝ', + 'ⓞ' => 'Ⓞ', + 'ⓟ' => 'Ⓟ', + 'ⓠ' => 'Ⓠ', + 'ⓡ' => 'Ⓡ', + 'ⓢ' => 'Ⓢ', + 'ⓣ' => 'Ⓣ', + 'ⓤ' => 'Ⓤ', + 'ⓥ' => 'Ⓥ', + 'ⓦ' => 'Ⓦ', + 'ⓧ' => 'Ⓧ', + 'ⓨ' => 'Ⓨ', + 'ⓩ' => 'Ⓩ', + 'ⰰ' => 'Ⰰ', + 'ⰱ' => 'Ⰱ', + 'ⰲ' => 'Ⰲ', + 'ⰳ' => 'Ⰳ', + 'ⰴ' => 'Ⰴ', + 'ⰵ' => 'Ⰵ', + 'ⰶ' => 'Ⰶ', + 'ⰷ' => 'Ⰷ', + 'ⰸ' => 'Ⰸ', + 'ⰹ' => 'Ⰹ', + 'ⰺ' => 'Ⰺ', + 'ⰻ' => 'Ⰻ', + 'ⰼ' => 'Ⰼ', + 'ⰽ' => 'Ⰽ', + 'ⰾ' => 'Ⰾ', + 'ⰿ' => 'Ⰿ', + 'ⱀ' => 'Ⱀ', + 'ⱁ' => 'Ⱁ', + 'ⱂ' => 'Ⱂ', + 'ⱃ' => 'Ⱃ', + 'ⱄ' => 'Ⱄ', + 'ⱅ' => 'Ⱅ', + 'ⱆ' => 'Ⱆ', + 'ⱇ' => 'Ⱇ', + 'ⱈ' => 'Ⱈ', + 'ⱉ' => 'Ⱉ', + 'ⱊ' => 'Ⱊ', + 'ⱋ' => 'Ⱋ', + 'ⱌ' => 'Ⱌ', + 'ⱍ' => 'Ⱍ', + 'ⱎ' => 'Ⱎ', + 'ⱏ' => 'Ⱏ', + 'ⱐ' => 'Ⱐ', + 'ⱑ' => 'Ⱑ', + 'ⱒ' => 'Ⱒ', + 'ⱓ' => 'Ⱓ', + 'ⱔ' => 'Ⱔ', + 'ⱕ' => 'Ⱕ', + 'ⱖ' => 'Ⱖ', + 'ⱗ' => 'Ⱗ', + 'ⱘ' => 'Ⱘ', + 'ⱙ' => 'Ⱙ', + 'ⱚ' => 'Ⱚ', + 'ⱛ' => 'Ⱛ', + 'ⱜ' => 'Ⱜ', + 'ⱝ' => 'Ⱝ', + 'ⱞ' => 'Ⱞ', + 'ⱡ' => 'Ⱡ', + 'ⱥ' => 'Ⱥ', + 'ⱦ' => 'Ⱦ', + 'ⱨ' => 'Ⱨ', + 'ⱪ' => 'Ⱪ', + 'ⱬ' => 'Ⱬ', + 'ⱳ' => 'Ⱳ', + 'ⱶ' => 'Ⱶ', + 'ⲁ' => 'Ⲁ', + 'ⲃ' => 'Ⲃ', + 'ⲅ' => 'Ⲅ', + 'ⲇ' => 'Ⲇ', + 'ⲉ' => 'Ⲉ', + 'ⲋ' => 'Ⲋ', + 'ⲍ' => 'Ⲍ', + 'ⲏ' => 'Ⲏ', + 'ⲑ' => 'Ⲑ', + 'ⲓ' => 'Ⲓ', + 'ⲕ' => 'Ⲕ', + 'ⲗ' => 'Ⲗ', + 'ⲙ' => 'Ⲙ', + 'ⲛ' => 'Ⲛ', + 'ⲝ' => 'Ⲝ', + 'ⲟ' => 'Ⲟ', + 'ⲡ' => 'Ⲡ', + 'ⲣ' => 'Ⲣ', + 'ⲥ' => 'Ⲥ', + 'ⲧ' => 'Ⲧ', + 'ⲩ' => 'Ⲩ', + 'ⲫ' => 'Ⲫ', + 'ⲭ' => 'Ⲭ', + 'ⲯ' => 'Ⲯ', + 'ⲱ' => 'Ⲱ', + 'ⲳ' => 'Ⲳ', + 'ⲵ' => 'Ⲵ', + 'ⲷ' => 'Ⲷ', + 'ⲹ' => 'Ⲹ', + 'ⲻ' => 'Ⲻ', + 'ⲽ' => 'Ⲽ', + 'ⲿ' => 'Ⲿ', + 'ⳁ' => 'Ⳁ', + 'ⳃ' => 'Ⳃ', + 'ⳅ' => 'Ⳅ', + 'ⳇ' => 'Ⳇ', + 'ⳉ' => 'Ⳉ', + 'ⳋ' => 'Ⳋ', + 'ⳍ' => 'Ⳍ', + 'ⳏ' => 'Ⳏ', + 'ⳑ' => 'Ⳑ', + 'ⳓ' => 'Ⳓ', + 'ⳕ' => 'Ⳕ', + 'ⳗ' => 'Ⳗ', + 'ⳙ' => 'Ⳙ', + 'ⳛ' => 'Ⳛ', + 'ⳝ' => 'Ⳝ', + 'ⳟ' => 'Ⳟ', + 'ⳡ' => 'Ⳡ', + 'ⳣ' => 'Ⳣ', + 'ⳬ' => 'Ⳬ', + 'ⳮ' => 'Ⳮ', + 'ⳳ' => 'Ⳳ', + 'ⴀ' => 'Ⴀ', + 'ⴁ' => 'Ⴁ', + 'ⴂ' => 'Ⴂ', + 'ⴃ' => 'Ⴃ', + 'ⴄ' => 'Ⴄ', + 'ⴅ' => 'Ⴅ', + 'ⴆ' => 'Ⴆ', + 'ⴇ' => 'Ⴇ', + 'ⴈ' => 'Ⴈ', + 'ⴉ' => 'Ⴉ', + 'ⴊ' => 'Ⴊ', + 'ⴋ' => 'Ⴋ', + 'ⴌ' => 'Ⴌ', + 'ⴍ' => 'Ⴍ', + 'ⴎ' => 'Ⴎ', + 'ⴏ' => 'Ⴏ', + 'ⴐ' => 'Ⴐ', + 'ⴑ' => 'Ⴑ', + 'ⴒ' => 'Ⴒ', + 'ⴓ' => 'Ⴓ', + 'ⴔ' => 'Ⴔ', + 'ⴕ' => 'Ⴕ', + 'ⴖ' => 'Ⴖ', + 'ⴗ' => 'Ⴗ', + 'ⴘ' => 'Ⴘ', + 'ⴙ' => 'Ⴙ', + 'ⴚ' => 'Ⴚ', + 'ⴛ' => 'Ⴛ', + 'ⴜ' => 'Ⴜ', + 'ⴝ' => 'Ⴝ', + 'ⴞ' => 'Ⴞ', + 'ⴟ' => 'Ⴟ', + 'ⴠ' => 'Ⴠ', + 'ⴡ' => 'Ⴡ', + 'ⴢ' => 'Ⴢ', + 'ⴣ' => 'Ⴣ', + 'ⴤ' => 'Ⴤ', + 'ⴥ' => 'Ⴥ', + 'ⴧ' => 'Ⴧ', + 'ⴭ' => 'Ⴭ', + 'ꙁ' => 'Ꙁ', + 'ꙃ' => 'Ꙃ', + 'ꙅ' => 'Ꙅ', + 'ꙇ' => 'Ꙇ', + 'ꙉ' => 'Ꙉ', + 'ꙋ' => 'Ꙋ', + 'ꙍ' => 'Ꙍ', + 'ꙏ' => 'Ꙏ', + 'ꙑ' => 'Ꙑ', + 'ꙓ' => 'Ꙓ', + 'ꙕ' => 'Ꙕ', + 'ꙗ' => 'Ꙗ', + 'ꙙ' => 'Ꙙ', + 'ꙛ' => 'Ꙛ', + 'ꙝ' => 'Ꙝ', + 'ꙟ' => 'Ꙟ', + 'ꙡ' => 'Ꙡ', + 'ꙣ' => 'Ꙣ', + 'ꙥ' => 'Ꙥ', + 'ꙧ' => 'Ꙧ', + 'ꙩ' => 'Ꙩ', + 'ꙫ' => 'Ꙫ', + 'ꙭ' => 'Ꙭ', + 'ꚁ' => 'Ꚁ', + 'ꚃ' => 'Ꚃ', + 'ꚅ' => 'Ꚅ', + 'ꚇ' => 'Ꚇ', + 'ꚉ' => 'Ꚉ', + 'ꚋ' => 'Ꚋ', + 'ꚍ' => 'Ꚍ', + 'ꚏ' => 'Ꚏ', + 'ꚑ' => 'Ꚑ', + 'ꚓ' => 'Ꚓ', + 'ꚕ' => 'Ꚕ', + 'ꚗ' => 'Ꚗ', + 'ꚙ' => 'Ꚙ', + 'ꚛ' => 'Ꚛ', + 'ꜣ' => 'Ꜣ', + 'ꜥ' => 'Ꜥ', + 'ꜧ' => 'Ꜧ', + 'ꜩ' => 'Ꜩ', + 'ꜫ' => 'Ꜫ', + 'ꜭ' => 'Ꜭ', + 'ꜯ' => 'Ꜯ', + 'ꜳ' => 'Ꜳ', + 'ꜵ' => 'Ꜵ', + 'ꜷ' => 'Ꜷ', + 'ꜹ' => 'Ꜹ', + 'ꜻ' => 'Ꜻ', + 'ꜽ' => 'Ꜽ', + 'ꜿ' => 'Ꜿ', + 'ꝁ' => 'Ꝁ', + 'ꝃ' => 'Ꝃ', + 'ꝅ' => 'Ꝅ', + 'ꝇ' => 'Ꝇ', + 'ꝉ' => 'Ꝉ', + 'ꝋ' => 'Ꝋ', + 'ꝍ' => 'Ꝍ', + 'ꝏ' => 'Ꝏ', + 'ꝑ' => 'Ꝑ', + 'ꝓ' => 'Ꝓ', + 'ꝕ' => 'Ꝕ', + 'ꝗ' => 'Ꝗ', + 'ꝙ' => 'Ꝙ', + 'ꝛ' => 'Ꝛ', + 'ꝝ' => 'Ꝝ', + 'ꝟ' => 'Ꝟ', + 'ꝡ' => 'Ꝡ', + 'ꝣ' => 'Ꝣ', + 'ꝥ' => 'Ꝥ', + 'ꝧ' => 'Ꝧ', + 'ꝩ' => 'Ꝩ', + 'ꝫ' => 'Ꝫ', + 'ꝭ' => 'Ꝭ', + 'ꝯ' => 'Ꝯ', + 'ꝺ' => 'Ꝺ', + 'ꝼ' => 'Ꝼ', + 'ꝿ' => 'Ꝿ', + 'ꞁ' => 'Ꞁ', + 'ꞃ' => 'Ꞃ', + 'ꞅ' => 'Ꞅ', + 'ꞇ' => 'Ꞇ', + 'ꞌ' => 'Ꞌ', + 'ꞑ' => 'Ꞑ', + 'ꞓ' => 'Ꞓ', + 'ꞗ' => 'Ꞗ', + 'ꞙ' => 'Ꞙ', + 'ꞛ' => 'Ꞛ', + 'ꞝ' => 'Ꞝ', + 'ꞟ' => 'Ꞟ', + 'ꞡ' => 'Ꞡ', + 'ꞣ' => 'Ꞣ', + 'ꞥ' => 'Ꞥ', + 'ꞧ' => 'Ꞧ', + 'ꞩ' => 'Ꞩ', + 'a' => 'A', + 'b' => 'B', + 'c' => 'C', + 'd' => 'D', + 'e' => 'E', + 'f' => 'F', + 'g' => 'G', + 'h' => 'H', + 'i' => 'I', + 'j' => 'J', + 'k' => 'K', + 'l' => 'L', + 'm' => 'M', + 'n' => 'N', + 'o' => 'O', + 'p' => 'P', + 'q' => 'Q', + 'r' => 'R', + 's' => 'S', + 't' => 'T', + 'u' => 'U', + 'v' => 'V', + 'w' => 'W', + 'x' => 'X', + 'y' => 'Y', + 'z' => 'Z', + '𐐨' => '𐐀', + '𐐩' => '𐐁', + '𐐪' => '𐐂', + '𐐫' => '𐐃', + '𐐬' => '𐐄', + '𐐭' => '𐐅', + '𐐮' => '𐐆', + '𐐯' => '𐐇', + '𐐰' => '𐐈', + '𐐱' => '𐐉', + '𐐲' => '𐐊', + '𐐳' => '𐐋', + '𐐴' => '𐐌', + '𐐵' => '𐐍', + '𐐶' => '𐐎', + '𐐷' => '𐐏', + '𐐸' => '𐐐', + '𐐹' => '𐐑', + '𐐺' => '𐐒', + '𐐻' => '𐐓', + '𐐼' => '𐐔', + '𐐽' => '𐐕', + '𐐾' => '𐐖', + '𐐿' => '𐐗', + '𐑀' => '𐐘', + '𐑁' => '𐐙', + '𐑂' => '𐐚', + '𐑃' => '𐐛', + '𐑄' => '𐐜', + '𐑅' => '𐐝', + '𐑆' => '𐐞', + '𐑇' => '𐐟', + '𐑈' => '𐐠', + '𐑉' => '𐐡', + '𐑊' => '𐐢', + '𐑋' => '𐐣', + '𐑌' => '𐐤', + '𐑍' => '𐐥', + '𐑎' => '𐐦', + '𐑏' => '𐐧', + '𑣀' => '𑢠', + '𑣁' => '𑢡', + '𑣂' => '𑢢', + '𑣃' => '𑢣', + '𑣄' => '𑢤', + '𑣅' => '𑢥', + '𑣆' => '𑢦', + '𑣇' => '𑢧', + '𑣈' => '𑢨', + '𑣉' => '𑢩', + '𑣊' => '𑢪', + '𑣋' => '𑢫', + '𑣌' => '𑢬', + '𑣍' => '𑢭', + '𑣎' => '𑢮', + '𑣏' => '𑢯', + '𑣐' => '𑢰', + '𑣑' => '𑢱', + '𑣒' => '𑢲', + '𑣓' => '𑢳', + '𑣔' => '𑢴', + '𑣕' => '𑢵', + '𑣖' => '𑢶', + '𑣗' => '𑢷', + '𑣘' => '𑢸', + '𑣙' => '𑢹', + '𑣚' => '𑢺', + '𑣛' => '𑢻', + '𑣜' => '𑢼', + '𑣝' => '𑢽', + '𑣞' => '𑢾', + '𑣟' => '𑢿', +); diff --git a/vendor/symfony/polyfill-mbstring/bootstrap.php b/vendor/symfony/polyfill-mbstring/bootstrap.php new file mode 100644 index 0000000..2fdcc5a --- /dev/null +++ b/vendor/symfony/polyfill-mbstring/bootstrap.php @@ -0,0 +1,58 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Mbstring as p; + +if (!function_exists('mb_strlen')) { + define('MB_CASE_UPPER', 0); + define('MB_CASE_LOWER', 1); + define('MB_CASE_TITLE', 2); + + function mb_convert_encoding($s, $to, $from = null) { return p\Mbstring::mb_convert_encoding($s, $to, $from); } + function mb_decode_mimeheader($s) { return p\Mbstring::mb_decode_mimeheader($s); } + function mb_encode_mimeheader($s, $charset = null, $transferEnc = null, $lf = null, $indent = null) { return p\Mbstring::mb_encode_mimeheader($s, $charset, $transferEnc, $lf, $indent); } + function mb_decode_numericentity($s, $convmap, $enc = null) { return p\Mbstring::mb_decode_numericentity($s, $convmap, $enc); } + function mb_encode_numericentity($s, $convmap, $enc = null, $is_hex = false) { return p\Mbstring::mb_encode_numericentity($s, $convmap, $enc, $is_hex); } + function mb_convert_case($s, $mode, $enc = null) { return p\Mbstring::mb_convert_case($s, $mode, $enc); } + function mb_internal_encoding($enc = null) { return p\Mbstring::mb_internal_encoding($enc); } + function mb_language($lang = null) { return p\Mbstring::mb_language($lang); } + function mb_list_encodings() { return p\Mbstring::mb_list_encodings(); } + function mb_encoding_aliases($encoding) { return p\Mbstring::mb_encoding_aliases($encoding); } + function mb_check_encoding($var = null, $encoding = null) { return p\Mbstring::mb_check_encoding($var, $encoding); } + function mb_detect_encoding($str, $encodingList = null, $strict = false) { return p\Mbstring::mb_detect_encoding($str, $encodingList, $strict); } + function mb_detect_order($encodingList = null) { return p\Mbstring::mb_detect_order($encodingList); } + function mb_parse_str($s, &$result = array()) { parse_str($s, $result); } + function mb_strlen($s, $enc = null) { return p\Mbstring::mb_strlen($s, $enc); } + function mb_strpos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strpos($s, $needle, $offset, $enc); } + function mb_strtolower($s, $enc = null) { return p\Mbstring::mb_strtolower($s, $enc); } + function mb_strtoupper($s, $enc = null) { return p\Mbstring::mb_strtoupper($s, $enc); } + function mb_substitute_character($char = null) { return p\Mbstring::mb_substitute_character($char); } + function mb_substr($s, $start, $length = 2147483647, $enc = null) { return p\Mbstring::mb_substr($s, $start, $length, $enc); } + function mb_stripos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_stripos($s, $needle, $offset, $enc); } + function mb_stristr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_stristr($s, $needle, $part, $enc); } + function mb_strrchr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strrchr($s, $needle, $part, $enc); } + function mb_strrichr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strrichr($s, $needle, $part, $enc); } + function mb_strripos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strripos($s, $needle, $offset, $enc); } + function mb_strrpos($s, $needle, $offset = 0, $enc = null) { return p\Mbstring::mb_strrpos($s, $needle, $offset, $enc); } + function mb_strstr($s, $needle, $part = false, $enc = null) { return p\Mbstring::mb_strstr($s, $needle, $part, $enc); } + function mb_get_info($type = 'all') { return p\Mbstring::mb_get_info($type); } + function mb_http_output($enc = null) { return p\Mbstring::mb_http_output($enc); } + function mb_strwidth($s, $enc = null) { return p\Mbstring::mb_strwidth($s, $enc); } + function mb_substr_count($haystack, $needle, $enc = null) { return p\Mbstring::mb_substr_count($haystack, $needle, $enc); } + function mb_output_handler($contents, $status) { return p\Mbstring::mb_output_handler($contents, $status); } + function mb_http_input($type = '') { return p\Mbstring::mb_http_input($type); } + function mb_convert_variables($toEncoding, $fromEncoding, &$a = null, &$b = null, &$c = null, &$d = null, &$e = null, &$f = null) { return p\Mbstring::mb_convert_variables($toEncoding, $fromEncoding, $a, $b, $c, $d, $e, $f); } +} +if (!function_exists('mb_chr')) { + function mb_ord($s, $enc = null) { return p\Mbstring::mb_ord($s, $enc); } + function mb_chr($code, $enc = null) { return p\Mbstring::mb_chr($code, $enc); } + function mb_scrub($s, $enc = null) { $enc = null === $enc ? mb_internal_encoding() : $enc; return mb_convert_encoding($s, $enc, $enc); } +} diff --git a/vendor/symfony/polyfill-mbstring/composer.json b/vendor/symfony/polyfill-mbstring/composer.json new file mode 100644 index 0000000..50ea12f --- /dev/null +++ b/vendor/symfony/polyfill-mbstring/composer.json @@ -0,0 +1,34 @@ +{ + "name": "symfony/polyfill-mbstring", + "type": "library", + "description": "Symfony polyfill for the Mbstring extension", + "keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=5.3.3" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" }, + "files": [ "bootstrap.php" ] + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + } +} diff --git a/vendor/symfony/polyfill-php72/LICENSE b/vendor/symfony/polyfill-php72/LICENSE new file mode 100644 index 0000000..24fa32c --- /dev/null +++ b/vendor/symfony/polyfill-php72/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015-2018 Fabien Potencier + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vendor/symfony/polyfill-php72/Php72.php b/vendor/symfony/polyfill-php72/Php72.php new file mode 100644 index 0000000..d531e84 --- /dev/null +++ b/vendor/symfony/polyfill-php72/Php72.php @@ -0,0 +1,216 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Symfony\Polyfill\Php72; + +/** + * @author Nicolas Grekas + * @author Dariusz Rumiński + * + * @internal + */ +final class Php72 +{ + private static $hashMask; + + public static function utf8_encode($s) + { + $s .= $s; + $len = \strlen($s); + + for ($i = $len >> 1, $j = 0; $i < $len; ++$i, ++$j) { + switch (true) { + case $s[$i] < "\x80": $s[$j] = $s[$i]; break; + case $s[$i] < "\xC0": $s[$j] = "\xC2"; $s[++$j] = $s[$i]; break; + default: $s[$j] = "\xC3"; $s[++$j] = \chr(\ord($s[$i]) - 64); break; + } + } + + return substr($s, 0, $j); + } + + public static function utf8_decode($s) + { + $s = (string) $s; + $len = \strlen($s); + + for ($i = 0, $j = 0; $i < $len; ++$i, ++$j) { + switch ($s[$i] & "\xF0") { + case "\xC0": + case "\xD0": + $c = (\ord($s[$i] & "\x1F") << 6) | \ord($s[++$i] & "\x3F"); + $s[$j] = $c < 256 ? \chr($c) : '?'; + break; + + case "\xF0": + ++$i; + // no break + + case "\xE0": + $s[$j] = '?'; + $i += 2; + break; + + default: + $s[$j] = $s[$i]; + } + } + + return substr($s, 0, $j); + } + + public static function php_os_family() + { + if ('\\' === \DIRECTORY_SEPARATOR) { + return 'Windows'; + } + + $map = array( + 'Darwin' => 'Darwin', + 'DragonFly' => 'BSD', + 'FreeBSD' => 'BSD', + 'NetBSD' => 'BSD', + 'OpenBSD' => 'BSD', + 'Linux' => 'Linux', + 'SunOS' => 'Solaris', + ); + + return isset($map[PHP_OS]) ? $map[PHP_OS] : 'Unknown'; + } + + public static function spl_object_id($object) + { + if (null === self::$hashMask) { + self::initHashMask(); + } + if (null === $hash = spl_object_hash($object)) { + return; + } + + return self::$hashMask ^ hexdec(substr($hash, 16 - \PHP_INT_SIZE, \PHP_INT_SIZE)); + } + + public static function sapi_windows_vt100_support($stream, $enable = null) + { + if (!\is_resource($stream)) { + trigger_error('sapi_windows_vt100_support() expects parameter 1 to be resource, '.\gettype($stream).' given', E_USER_WARNING); + + return false; + } + + $meta = stream_get_meta_data($stream); + + if ('STDIO' !== $meta['stream_type']) { + trigger_error('sapi_windows_vt100_support() was not able to analyze the specified stream', E_USER_WARNING); + + return false; + } + + // We cannot actually disable vt100 support if it is set + if (false === $enable || !self::stream_isatty($stream)) { + return false; + } + + // The native function does not apply to stdin + $meta = array_map('strtolower', $meta); + $stdin = 'php://stdin' === $meta['uri'] || 'php://fd/0' === $meta['uri']; + + return !$stdin + && (false !== getenv('ANSICON') + || 'ON' === getenv('ConEmuANSI') + || 'xterm' === getenv('TERM') + || 'Hyper' === getenv('TERM_PROGRAM')); + } + + public static function stream_isatty($stream) + { + if (!\is_resource($stream)) { + trigger_error('stream_isatty() expects parameter 1 to be resource, '.\gettype($stream).' given', E_USER_WARNING); + + return false; + } + + if ('\\' === \DIRECTORY_SEPARATOR) { + $stat = @fstat($stream); + // Check if formatted mode is S_IFCHR + return $stat ? 0020000 === ($stat['mode'] & 0170000) : false; + } + + return \function_exists('posix_isatty') && @posix_isatty($stream); + } + + private static function initHashMask() + { + $obj = (object) array(); + self::$hashMask = -1; + + // check if we are nested in an output buffering handler to prevent a fatal error with ob_start() below + $obFuncs = array('ob_clean', 'ob_end_clean', 'ob_flush', 'ob_end_flush', 'ob_get_contents', 'ob_get_flush'); + foreach (debug_backtrace(\PHP_VERSION_ID >= 50400 ? DEBUG_BACKTRACE_IGNORE_ARGS : false) as $frame) { + if (isset($frame['function'][0]) && !isset($frame['class']) && 'o' === $frame['function'][0] && \in_array($frame['function'], $obFuncs)) { + $frame['line'] = 0; + break; + } + } + if (!empty($frame['line'])) { + ob_start(); + debug_zval_dump($obj); + self::$hashMask = (int) substr(ob_get_clean(), 17); + } + + self::$hashMask ^= hexdec(substr(spl_object_hash($obj), 16 - \PHP_INT_SIZE, \PHP_INT_SIZE)); + } + + public static function mb_chr($code, $encoding = null) + { + if (0x80 > $code %= 0x200000) { + $s = \chr($code); + } elseif (0x800 > $code) { + $s = \chr(0xC0 | $code >> 6).\chr(0x80 | $code & 0x3F); + } elseif (0x10000 > $code) { + $s = \chr(0xE0 | $code >> 12).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } else { + $s = \chr(0xF0 | $code >> 18).\chr(0x80 | $code >> 12 & 0x3F).\chr(0x80 | $code >> 6 & 0x3F).\chr(0x80 | $code & 0x3F); + } + + if ('UTF-8' !== $encoding) { + $s = mb_convert_encoding($s, $encoding, 'UTF-8'); + } + + return $s; + } + + public static function mb_ord($s, $encoding = null) + { + if (null == $encoding) { + $s = mb_convert_encoding($s, 'UTF-8'); + } elseif ('UTF-8' !== $encoding) { + $s = mb_convert_encoding($s, 'UTF-8', $encoding); + } + + if (1 === \strlen($s)) { + return \ord($s); + } + + $code = ($s = unpack('C*', substr($s, 0, 4))) ? $s[1] : 0; + if (0xF0 <= $code) { + return (($code - 0xF0) << 18) + (($s[2] - 0x80) << 12) + (($s[3] - 0x80) << 6) + $s[4] - 0x80; + } + if (0xE0 <= $code) { + return (($code - 0xE0) << 12) + (($s[2] - 0x80) << 6) + $s[3] - 0x80; + } + if (0xC0 <= $code) { + return (($code - 0xC0) << 6) + $s[2] - 0x80; + } + + return $code; + } +} diff --git a/vendor/symfony/polyfill-php72/README.md b/vendor/symfony/polyfill-php72/README.md new file mode 100644 index 0000000..82c45f7 --- /dev/null +++ b/vendor/symfony/polyfill-php72/README.md @@ -0,0 +1,27 @@ +Symfony Polyfill / Php72 +======================== + +This component provides functions added to PHP 7.2 core: + +- [`spl_object_id`](https://php.net/spl_object_id) +- [`stream_isatty`](https://php.net/stream_isatty) + +On Windows only: + +- [`sapi_windows_vt100_support`](https://php.net/sapi_windows_vt100_support) + +Moved to core since 7.2 (was in the optional XML extension earlier): + +- [`utf8_encode`](https://php.net/utf8_encode) +- [`utf8_decode`](https://php.net/utf8_decode) + +Also, it provides a constant added to PHP 7.2: +- [`PHP_OS_FAMILY`](http://php.net/manual/en/reserved.constants.php#constant.php-os-family) + +More information can be found in the +[main Polyfill README](https://github.com/symfony/polyfill/blob/master/README.md). + +License +======= + +This library is released under the [MIT license](LICENSE). diff --git a/vendor/symfony/polyfill-php72/bootstrap.php b/vendor/symfony/polyfill-php72/bootstrap.php new file mode 100644 index 0000000..519056d --- /dev/null +++ b/vendor/symfony/polyfill-php72/bootstrap.php @@ -0,0 +1,36 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +use Symfony\Polyfill\Php72 as p; + +if (PHP_VERSION_ID < 70200) { + if ('\\' === DIRECTORY_SEPARATOR && !function_exists('sapi_windows_vt100_support')) { + function sapi_windows_vt100_support($stream, $enable = null) { return p\Php72::sapi_windows_vt100_support($stream, $enable); } + } + if (!function_exists('stream_isatty')) { + function stream_isatty($stream) { return p\Php72::stream_isatty($stream); } + } + if (!function_exists('utf8_encode')) { + function utf8_encode($s) { return p\Php72::utf8_encode($s); } + function utf8_decode($s) { return p\Php72::utf8_decode($s); } + } + if (!function_exists('spl_object_id')) { + function spl_object_id($s) { return p\Php72::spl_object_id($s); } + } + if (!defined('PHP_OS_FAMILY')) { + define('PHP_OS_FAMILY', p\Php72::php_os_family()); + } + if (!function_exists('mb_chr')) { + function mb_ord($s, $enc = null) { return p\Php72::mb_ord($s, $enc); } + function mb_chr($code, $enc = null) { return p\Php72::mb_chr($code, $enc); } + function mb_scrub($s, $enc = null) { $enc = null === $enc ? mb_internal_encoding() : $enc; return mb_convert_encoding($s, $enc, $enc); } + } +} diff --git a/vendor/symfony/polyfill-php72/composer.json b/vendor/symfony/polyfill-php72/composer.json new file mode 100644 index 0000000..5d66ef7 --- /dev/null +++ b/vendor/symfony/polyfill-php72/composer.json @@ -0,0 +1,31 @@ +{ + "name": "symfony/polyfill-php72", + "type": "library", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "keywords": ["polyfill", "shim", "compatibility", "portable"], + "homepage": "https://symfony.com", + "license": "MIT", + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "require": { + "php": ">=5.3.3" + }, + "autoload": { + "psr-4": { "Symfony\\Polyfill\\Php72\\": "" }, + "files": [ "bootstrap.php" ] + }, + "minimum-stability": "dev", + "extra": { + "branch-alias": { + "dev-master": "1.9-dev" + } + } +}