Files
piratepoet/prefixer/fix-swiftmailer.php
2019-10-09 10:00:03 +01:00

35 lines
1.9 KiB
PHP
Executable File

<?php
// throw exception if anything fails
set_error_handler(function ($severity, $message, $file, $line) {
throw new ErrorException($message, 0, $severity, $file, $line);
});
// fix Swiftmailer namespaces in string not being correctly prefixed
$iterator = new RecursiveDirectoryIterator(__DIR__ . '/../vendor-prefixed/swiftmailer', RecursiveDirectoryIterator::SKIP_DOTS);
$files = new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::SELF_FIRST);
foreach ($files as $file) {
if (substr($file, -3) === 'php') {
$data = file_get_contents($file);
$data = preg_replace("/'(Swift_[^']*?::)/", "'MailPoetVendor\\\\\\\\$1", $data);
$data = preg_replace("/InstanceOf\('(Swift_[^']*?')/", "InstanceOf('MailPoetVendor\\\\\\\\$1", $data);
$data = preg_replace("/registerAutoload\('(_swift[^']*?')/", "registerAutoload('MailPoetVendor\\\\\\\\$1", $data);
$data = preg_replace("/'(Swift_[^']*?Listener)/", "'MailPoetVendor\\\\\\\\$1", $data);
$data = str_replace("'Swift_CharacterReader_", "'MailPoetVendor\\\\Swift_CharacterReader_", $data);
$data = str_replace('SWIFT_INIT_LOADED', 'MAILPOET_SWIFT_INIT_LOADED', $data);
// require-once 'swift_init.php' in classes since prefixed version won't use Swift's autoloader
if (strpos($file, 'classes') !== false) {
$path = substr($file, strpos($file, 'classes'));
$nesting_level = substr_count(str_replace('\\', '/', $path), '/');
$search = 'namespace MailPoetVendor;';
$require_path = str_repeat('/..', $nesting_level) . '/swift_init.php';
$data = str_replace($search, "$search\n\nrequire_once __DIR__ . '$require_path';", $data);
}
file_put_contents($file, $data);
}
}
# remove unused PHP file that starts with shebang line instead of <?php and causes PHP lint on WP repo to fail
exec('rm -f ' . __DIR__ . '/../vendor-prefixed/swiftmailer/swiftmailer/lib/swiftmailer_generate_mimes_config.php');