Move Twig to prefixed dependencies

Closes #1904
[MAILPOET-1929]
This commit is contained in:
Pavel Dohnal
2019-03-26 10:51:07 +01:00
committed by M. Shull
parent 51de087c01
commit 3d69b3aeec
17 changed files with 544 additions and 204 deletions

View File

@@ -11,7 +11,6 @@
], ],
"require": { "require": {
"php": ">=5.6", "php": ">=5.6",
"twig/twig": "1.*",
"cerdic/css-tidy": "^1.6", "cerdic/css-tidy": "^1.6",
"tburry/pquery": "^1.1.1", "tburry/pquery": "^1.1.1",
"j4mie/paris": "1.5.6", "j4mie/paris": "1.5.6",

250
composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "81e44efee9f040a7e302f96ae2265d93", "content-hash": "ace24c4002870bd939be3fc6625f9216",
"packages": [ "packages": [
{ {
"name": "cerdic/css-tidy", "name": "cerdic/css-tidy",
@@ -431,64 +431,6 @@
}, },
"time": "2018-07-09T16:02:27+00:00" "time": "2018-07-09T16:02:27+00:00"
}, },
{
"name": "symfony/polyfill-ctype",
"version": "v1.10.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "e3d826245268269cd66f8326bd8bc066687b4a19"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/e3d826245268269cd66f8326bd8bc066687b4a19",
"reference": "e3d826245268269cd66f8326bd8bc066687b4a19",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"suggest": {
"ext-ctype": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.9-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Ctype\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
},
{
"name": "Gert de Pagter",
"email": "BackEndTea@gmail.com"
}
],
"description": "Symfony polyfill for ctype functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"ctype",
"polyfill",
"portable"
],
"time": "2018-08-06T14:22:27+00:00"
},
{ {
"name": "symfony/polyfill-mbstring", "name": "symfony/polyfill-mbstring",
"version": "v1.10.0", "version": "v1.10.0",
@@ -718,72 +660,6 @@
"php" "php"
], ],
"time": "2016-01-14T20:55:00+00:00" "time": "2016-01-14T20:55:00+00:00"
},
{
"name": "twig/twig",
"version": "v1.38.0",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "754b8dfc0026585eb8498ec4bf5ff240b6b34db7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/754b8dfc0026585eb8498ec4bf5ff240b6b34db7",
"reference": "754b8dfc0026585eb8498ec4bf5ff240b6b34db7",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
"symfony/polyfill-ctype": "^1.8"
},
"require-dev": {
"psr/container": "^1.0",
"symfony/debug": "^2.7",
"symfony/phpunit-bridge": "^3.4.19|^4.1.8"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.38-dev"
}
},
"autoload": {
"psr-0": {
"Twig_": "lib/"
},
"psr-4": {
"Twig\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com",
"homepage": "http://fabien.potencier.org",
"role": "Lead Developer"
},
{
"name": "Armin Ronacher",
"email": "armin.ronacher@active-4.com",
"role": "Project Founder"
},
{
"name": "Twig Team",
"homepage": "https://twig.symfony.com/contributors",
"role": "Contributors"
}
],
"description": "Twig, the flexible, fast, and secure template language for PHP",
"homepage": "https://twig.symfony.com",
"keywords": [
"templating"
],
"time": "2019-03-12T12:42:04+00:00"
} }
], ],
"packages-dev": [ "packages-dev": [
@@ -6153,6 +6029,64 @@
], ],
"time": "2018-11-11T11:18:13+00:00" "time": "2018-11-11T11:18:13+00:00"
}, },
{
"name": "symfony/polyfill-ctype",
"version": "v1.11.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "82ebae02209c21113908c229e9883c419720738a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a",
"reference": "82ebae02209c21113908c229e9883c419720738a",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"suggest": {
"ext-ctype": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.11-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Ctype\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
},
{
"name": "Gert de Pagter",
"email": "backendtea@gmail.com"
}
],
"description": "Symfony polyfill for ctype functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"ctype",
"polyfill",
"portable"
],
"time": "2019-02-06T07:57:58+00:00"
},
{ {
"name": "symfony/polyfill-intl-icu", "name": "symfony/polyfill-intl-icu",
"version": "v1.10.0", "version": "v1.10.0",
@@ -6593,6 +6527,72 @@
], ],
"time": "2018-12-05T18:34:18+00:00" "time": "2018-12-05T18:34:18+00:00"
}, },
{
"name": "twig/twig",
"version": "v1.38.4",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "7732e9e7017d751313811bd118de61302e9c8b35"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/7732e9e7017d751313811bd118de61302e9c8b35",
"reference": "7732e9e7017d751313811bd118de61302e9c8b35",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
"symfony/polyfill-ctype": "^1.8"
},
"require-dev": {
"psr/container": "^1.0",
"symfony/debug": "^2.7",
"symfony/phpunit-bridge": "^3.4.19|^4.1.8"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.38-dev"
}
},
"autoload": {
"psr-0": {
"Twig_": "lib/"
},
"psr-4": {
"Twig\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com",
"homepage": "http://fabien.potencier.org",
"role": "Lead Developer"
},
{
"name": "Armin Ronacher",
"email": "armin.ronacher@active-4.com",
"role": "Project Founder"
},
{
"name": "Twig Team",
"homepage": "https://twig.symfony.com/contributors",
"role": "Contributors"
}
],
"description": "Twig, the flexible, fast, and secure template language for PHP",
"homepage": "https://twig.symfony.com",
"keywords": [
"templating"
],
"time": "2019-03-23T14:27:19+00:00"
},
{ {
"name": "umpirsky/twig-gettext-extractor", "name": "umpirsky/twig-gettext-extractor",
"version": "1.1.5", "version": "1.1.5",

View File

@@ -3,15 +3,14 @@
namespace MailPoet\Config; namespace MailPoet\Config;
use MailPoet\Twig; use MailPoet\Twig;
use Twig_Environment as TwigEnv; use MailPoetVendor\Twig_Environment as TwigEnv;
use Twig_Lexer as TwigLexer; use MailPoetVendor\Twig_Lexer as TwigLexer;
use Twig_Loader_Filesystem as TwigFileSystem; use MailPoetVendor\Twig_Loader_Filesystem as TwigFileSystem;
use MailPoet\WP\Functions as WPFunctions; use MailPoet\WP\Functions as WPFunctions;
if (!defined('ABSPATH')) exit; if (!defined('ABSPATH')) exit;
class Renderer { class Renderer {
protected $cache_path; protected $cache_path;
protected $caching_enabled; protected $caching_enabled;
@@ -103,7 +102,7 @@ class Renderer {
function setupDebug() { function setupDebug() {
if ($this->debugging_enabled) { if ($this->debugging_enabled) {
$this->renderer->addExtension(new \Twig_Extension_Debug()); $this->renderer->addExtension(new \MailPoetVendor\Twig_Extension_Debug());
} }
} }

View File

@@ -15,17 +15,11 @@ class RequirementsChecker {
const TEST_MBSTRING_EXTENSION = 'MbstringExtension'; const TEST_MBSTRING_EXTENSION = 'MbstringExtension';
const TEST_XML_EXTENSION = 'XmlExtension'; const TEST_XML_EXTENSION = 'XmlExtension';
const TEST_VENDOR_SOURCE = 'VendorSource'; const TEST_VENDOR_SOURCE = 'VendorSource';
const TWIG_SUPPORTED_VERSIONS = '1.26.0-1.34.4';
public $display_error_notice; public $display_error_notice;
public $vendor_classes = array( public $vendor_classes = array(
'\ORM', '\ORM',
'\Model', '\Model',
'\Twig_Environment',
'\Twig_Loader_Filesystem',
'\Twig_Lexer',
'\Twig_Extension',
'\Twig_SimpleFunction',
'\Swift_Mailer', '\Swift_Mailer',
'\Swift_SmtpTransport', '\Swift_SmtpTransport',
'\Swift_Message', '\Swift_Message',
@@ -131,30 +125,13 @@ class RequirementsChecker {
$dependency_path $dependency_path
); );
$return_error = true; return $this->processError($error);
// if a Twig dependency is loaded by another plugin, check for valid version
if (strpos($dependency, '\Twig_') === 0) {
$return_error = ($this->isValidTwigVersion()) ? false : $return_error;
}
if ($return_error) return $this->processError($error);
} }
} }
return true; return true;
} }
function isValidTwigVersion() {
list($minimum_version, $maximum_version) = explode('-', self::TWIG_SUPPORTED_VERSIONS);
return (
class_exists('\Twig_Environment') &&
defined('\Twig_Environment::VERSION') &&
version_compare(\Twig_Environment::VERSION, $minimum_version, '>=') &&
version_compare(\Twig_Environment::VERSION, $maximum_version, '<=')
);
}
private function getDependencyPath($namespaced_class) { private function getDependencyPath($namespaced_class) {
try { try {
$reflector = new \ReflectionClass($namespaced_class); $reflector = new \ReflectionClass($namespaced_class);

View File

@@ -9,27 +9,27 @@ use MailPoet\WooCommerce\Helper as WooCommerceHelper;
if (!defined('ABSPATH')) exit; if (!defined('ABSPATH')) exit;
class Analytics extends \Twig_Extension { class Analytics extends \MailPoetVendor\Twig_Extension {
public function getFunctions() { public function getFunctions() {
$settings = new SettingsController(); $settings = new SettingsController();
$analytics = new AnalyticsGenerator(new Reporter($settings, new WooCommerceHelper), $settings); $analytics = new AnalyticsGenerator(new Reporter($settings, new WooCommerceHelper), $settings);
return array( return array(
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'get_analytics_data', 'get_analytics_data',
array($analytics, 'generateAnalytics'), array($analytics, 'generateAnalytics'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'is_analytics_enabled', 'is_analytics_enabled',
array($analytics, 'isEnabled'), array($analytics, 'isEnabled'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'get_analytics_public_id', 'get_analytics_public_id',
array($analytics, 'getPublicId'), array($analytics, 'getPublicId'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'is_analytics_public_id_new', 'is_analytics_public_id_new',
array($analytics, 'isPublicIdNew'), array($analytics, 'isPublicIdNew'),
array('is_safe' => array('all')) array('is_safe' => array('all'))

View File

@@ -5,7 +5,7 @@ use MailPoet\WP\Functions as WPFunctions;
if (!defined('ABSPATH')) exit; if (!defined('ABSPATH')) exit;
class Assets extends \Twig_Extension { class Assets extends \MailPoetVendor\Twig_Extension {
const CDN_URL = 'https://ps.w.org/mailpoet/'; const CDN_URL = 'https://ps.w.org/mailpoet/';
private $_globals; private $_globals;
@@ -15,22 +15,22 @@ class Assets extends \Twig_Extension {
function getFunctions() { function getFunctions() {
return array( return array(
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'stylesheet', 'stylesheet',
array($this, 'generateStylesheet'), array($this, 'generateStylesheet'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'javascript', 'javascript',
array($this, 'generateJavascript'), array($this, 'generateJavascript'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'image_url', 'image_url',
array($this, 'generateImageUrl'), array($this, 'generateImageUrl'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'cdn_url', 'cdn_url',
array($this, 'generateCdnUrl'), array($this, 'generateCdnUrl'),
array('is_safe' => array('all')) array('is_safe' => array('all'))

View File

@@ -4,7 +4,7 @@ namespace MailPoet\Twig;
if (!defined('ABSPATH')) exit; if (!defined('ABSPATH')) exit;
class Filters extends \Twig_Extension { class Filters extends \MailPoetVendor\Twig_Extension {
function getName() { function getName() {
return 'filters'; return 'filters';
@@ -12,11 +12,11 @@ class Filters extends \Twig_Extension {
function getFilters() { function getFilters() {
return array( return array(
new \Twig_SimpleFilter( new \MailPoetVendor\Twig_SimpleFilter(
'intval', 'intval',
'intval' 'intval'
), ),
new \Twig_SimpleFilter( new \MailPoetVendor\Twig_SimpleFilter(
'replaceLinkTags', 'replaceLinkTags',
'MailPoet\Util\Helpers::replaceLinkTags' 'MailPoet\Util\Helpers::replaceLinkTags'
) )

View File

@@ -10,7 +10,7 @@ use MailPoet\WP\Functions as WPFunctions;
if (!defined('ABSPATH')) exit; if (!defined('ABSPATH')) exit;
class Functions extends \Twig_Extension { class Functions extends \MailPoetVendor\Twig_Extension {
/** @var SettingsController */ /** @var SettingsController */
private $settings; private $settings;
@@ -21,97 +21,97 @@ class Functions extends \Twig_Extension {
function getFunctions() { function getFunctions() {
return array( return array(
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'json_encode', 'json_encode',
'json_encode', 'json_encode',
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'json_decode', 'json_decode',
'json_decode', 'json_decode',
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'wp_nonce_field', 'wp_nonce_field',
'wp_nonce_field', 'wp_nonce_field',
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'params', 'params',
array($this, 'params'), array($this, 'params'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'admin_url', 'admin_url',
'admin_url', 'admin_url',
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'get_option', 'get_option',
'get_option', 'get_option',
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'get_option', 'get_option',
'get_option', 'get_option',
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'sending_frequency', 'sending_frequency',
array($this, 'getSendingFrequency'), array($this, 'getSendingFrequency'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'wp_date_format', 'wp_date_format',
array($this, 'getWPDateFormat'), array($this, 'getWPDateFormat'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'mailpoet_version', 'mailpoet_version',
array($this, 'getMailPoetVersion'), array($this, 'getMailPoetVersion'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'mailpoet_premium_version', 'mailpoet_premium_version',
array($this, 'getMailPoetPremiumVersion'), array($this, 'getMailPoetPremiumVersion'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'mailpoet_has_valid_premium_key', 'mailpoet_has_valid_premium_key',
array($this, 'hasValidPremiumKey'), array($this, 'hasValidPremiumKey'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'wp_time_format', 'wp_time_format',
array($this, 'getWPTimeFormat'), array($this, 'getWPTimeFormat'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'wp_datetime_format', 'wp_datetime_format',
array($this, 'getWPDateTimeFormat'), array($this, 'getWPDateTimeFormat'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'do_action', 'do_action',
'do_action', 'do_action',
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'is_rtl', 'is_rtl',
array($this, 'isRtl'), array($this, 'isRtl'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'number_format_i18n', 'number_format_i18n',
'number_format_i18n', 'number_format_i18n',
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'mailpoet_locale', 'mailpoet_locale',
array($this, 'getTwoLettersLocale'), array($this, 'getTwoLettersLocale'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'mailpoet_free_domains', 'mailpoet_free_domains',
array($this, 'getFreeDomains'), array($this, 'getFreeDomains'),
array('is_safe' => array('all')) array('is_safe' => array('all'))

View File

@@ -4,10 +4,10 @@ namespace MailPoet\Twig;
if (!defined('ABSPATH')) exit; if (!defined('ABSPATH')) exit;
class Handlebars extends \Twig_Extension { class Handlebars extends \MailPoetVendor\Twig_Extension {
public function getFunctions() { public function getFunctions() {
return array( return array(
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'partial', 'partial',
array( array(
$this, $this,
@@ -41,7 +41,7 @@ class Handlebars extends \Twig_Extension {
return; return;
} }
$rendered_template = twig_include($env, $context, $file); $rendered_template = \MailPoetVendor\twig_include($env, $context, $file);
$output = <<<EOL $output = <<<EOL
<script id="$id" type="text/x-handlebars-template"> <script id="$id" type="text/x-handlebars-template">

View File

@@ -4,10 +4,10 @@ namespace MailPoet\Twig;
if (!defined('ABSPATH')) exit; if (!defined('ABSPATH')) exit;
class Helpscout extends \Twig_Extension { class Helpscout extends \MailPoetVendor\Twig_Extension {
public function getFunctions() { public function getFunctions() {
return array( return array(
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'get_helpscout_data', 'get_helpscout_data',
'\MailPoet\Helpscout\Beacon::getData', '\MailPoet\Helpscout\Beacon::getData',
array('is_safe' => array('all')) array('is_safe' => array('all'))

View File

@@ -7,7 +7,7 @@ use MailPoet\WP\Functions as WPFunctions;
if (!defined('ABSPATH')) exit; if (!defined('ABSPATH')) exit;
class I18n extends \Twig_Extension { class I18n extends \MailPoetVendor\Twig_Extension {
private $_text_domain; private $_text_domain;
@@ -30,7 +30,7 @@ class I18n extends \Twig_Extension {
); );
foreach ($functions as $twig_function => $function) { foreach ($functions as $twig_function => $function) {
$twig_functions[] = new \Twig_SimpleFunction( $twig_functions[] = new \MailPoetVendor\Twig_SimpleFunction(
$twig_function, $twig_function,
array($this, $function), array($this, $function),
array('is_safe' => array('all')) array('is_safe' => array('all'))

View File

@@ -6,7 +6,7 @@ use MailPoet\Settings\SettingsController;
if (!defined('ABSPATH')) exit; if (!defined('ABSPATH')) exit;
class Polls extends \Twig_Extension { class Polls extends \MailPoetVendor\Twig_Extension {
/** @var SettingsController */ /** @var SettingsController */
private $settings; private $settings;
@@ -17,12 +17,12 @@ class Polls extends \Twig_Extension {
public function getFunctions() { public function getFunctions() {
return array( return array(
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'get_polls_data', 'get_polls_data',
array($this, 'getPollsData'), array($this, 'getPollsData'),
array('is_safe' => array('all')) array('is_safe' => array('all'))
), ),
new \Twig_SimpleFunction( new \MailPoetVendor\Twig_SimpleFunction(
'get_polls_visiblity', 'get_polls_visiblity',
array($this, 'getPollsVisibility'), array($this, 'getPollsVisibility'),
array('is_safe' => array('all')) array('is_safe' => array('all'))

View File

@@ -3,7 +3,8 @@
"php": ">=5.6", "php": ">=5.6",
"symfony/dependency-injection": "3.4.22", "symfony/dependency-injection": "3.4.22",
"monolog/monolog": "^1.23", "monolog/monolog": "^1.23",
"sabberworm/php-css-parser": "^8.1" "sabberworm/php-css-parser": "^8.1",
"twig/twig": "1.38.4"
}, },
"scripts": { "scripts": {
"post-update-cmd": "@process", "post-update-cmd": "@process",
@@ -12,7 +13,8 @@
"rm -rf ../vendor-prefixed", "rm -rf ../vendor-prefixed",
"mkdir ../vendor-prefixed", "mkdir ../vendor-prefixed",
"../php-scoper.phar add-prefix", "../php-scoper.phar add-prefix",
"mv ./build/* ../vendor-prefixed" "mv ./build/* ../vendor-prefixed",
"php fix-twig.php"
] ]
}, },
"config": { "config": {

126
prefixer/composer.lock generated
View File

@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "5adf957548a314d23d716c2e5959e24b", "content-hash": "0a85a5163c915ee5e4c5e546973aa767",
"packages": [ "packages": [
{ {
"name": "monolog/monolog", "name": "monolog/monolog",
@@ -294,6 +294,130 @@
"description": "Symfony DependencyInjection Component", "description": "Symfony DependencyInjection Component",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"time": "2019-01-30T17:48:51+00:00" "time": "2019-01-30T17:48:51+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.11.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "82ebae02209c21113908c229e9883c419720738a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/82ebae02209c21113908c229e9883c419720738a",
"reference": "82ebae02209c21113908c229e9883c419720738a",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"suggest": {
"ext-ctype": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.11-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Polyfill\\Ctype\\": ""
},
"files": [
"bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
},
{
"name": "Gert de Pagter",
"email": "backendtea@gmail.com"
}
],
"description": "Symfony polyfill for ctype functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"ctype",
"polyfill",
"portable"
],
"time": "2019-02-06T07:57:58+00:00"
},
{
"name": "twig/twig",
"version": "v1.38.4",
"source": {
"type": "git",
"url": "https://github.com/twigphp/Twig.git",
"reference": "7732e9e7017d751313811bd118de61302e9c8b35"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/twigphp/Twig/zipball/7732e9e7017d751313811bd118de61302e9c8b35",
"reference": "7732e9e7017d751313811bd118de61302e9c8b35",
"shasum": ""
},
"require": {
"php": ">=5.4.0",
"symfony/polyfill-ctype": "^1.8"
},
"require-dev": {
"psr/container": "^1.0",
"symfony/debug": "^2.7",
"symfony/phpunit-bridge": "^3.4.19|^4.1.8"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.38-dev"
}
},
"autoload": {
"psr-0": {
"Twig_": "lib/"
},
"psr-4": {
"Twig\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com",
"homepage": "http://fabien.potencier.org",
"role": "Lead Developer"
},
{
"name": "Armin Ronacher",
"email": "armin.ronacher@active-4.com",
"role": "Project Founder"
},
{
"name": "Twig Team",
"homepage": "https://twig.symfony.com/contributors",
"role": "Contributors"
}
],
"description": "Twig, the flexible, fast, and secure template language for PHP",
"homepage": "https://twig.symfony.com",
"keywords": [
"templating"
],
"time": "2019-03-23T14:27:19+00:00"
} }
], ],
"packages-dev": [], "packages-dev": [],

238
prefixer/fix-twig.php Executable file
View File

@@ -0,0 +1,238 @@
<?php
$replacements = [
[
'file' => '../vendor-prefixed/twig/twig/src/ExpressionParser.php',
'find' => [
'\'Twig\\\\Node\\\\Expression\\\\TestExpression\'',
'\'Twig\\\\Node\\\\Expression\\\\FunctionExpression\'',
'\'Twig\\\\Node\\\\Expression\\\\FilterExpression\'',
],
'replace' => [
'\'MailPoetVendor\\\\Twig\\\\Node\\\\Expression\\\\TestExpression\'',
'\'MailPoetVendor\\\\Twig\\\\Node\\\\Expression\\\\FunctionExpression\'',
'\'MailPoetVendor\\\\Twig\\\\Node\\\\Expression\\\\FilterExpression\'',
],
],
[
'file' => '../vendor-prefixed/twig/twig/src/TwigFilter.php',
'find' => [
'\'\\\\Twig\\\\Node\\\\Expression\\\\FilterExpression\'',
],
'replace' => [
'\'\\\\MailPoetVendor\\\\Twig\\\\Node\\\\Expression\\\\FilterExpression\'',
],
],
[
'file' => '../vendor-prefixed/twig/twig/src/TwigFunction.php',
'find' => [
'\'\\\\Twig\\\\Node\\\\Expression\\\\FunctionExpression\'',
],
'replace' => [
'\'\\\\MailPoetVendor\\\\Twig\\\\Node\\\\Expression\\\\FunctionExpression\'',
],
],
[
'file' => '../vendor-prefixed/twig/twig/src/TwigTest.php',
'find' => [
'\'\\\\Twig\\\\Node\\\\Expression\\\\TestExpression\'',
],
'replace' => [
'\'\\\\MailPoetVendor\\\\Twig\\\\Node\\\\Expression\\\\TestExpression\'',
],
],
[
'file' => '../vendor-prefixed/twig/twig/src/Node/Expression/Binary/NotInBinary.php',
'find' => [
'\'!twig_in_filter(\''
],
'replace' => [
'\'!\\\\MailPoetVendor\\\\twig_in_filter(\'',
],
],
[
'file' => '../vendor-prefixed/twig/twig/src/Node/Expression/Binary/InBinary.php',
'find' => [
'\'twig_in_filter(\''
],
'replace' => [
'\'\\\\MailPoetVendor\\\\twig_in_filter(\'',
],
],
[
'file' => '../vendor-prefixed/twig/twig/src/Extension/CoreExtension.php',
'find' => [
'\'twig_date_format_filter\'',
'\'twig_date_modify_filter\'',
'\'twig_replace_filter\'',
'\'twig_number_format_filter\'',
'\'twig_round\'',
'\'twig_urlencode_filter\'',
'\'twig_jsonencode_filter\'',
'\'twig_convert_encoding\'',
'\'twig_title_string_filter\'',
'\'twig_capitalize_string_filter\'',
'\'twig_trim_filter\'',
'\'twig_spaceless\'',
'\'twig_join_filter\'',
'\'twig_split_filter\'',
'\'twig_sort_filter\'',
'\'twig_sort_filter\'',
'\'twig_array_batch\'',
'\'twig_reverse_filter\'',
'\'twig_length_filter\'',
'\'twig_slice\'',
'\'twig_first\'',
'\'twig_last\'',
'\'_twig_default_filter\'',
'\'twig_get_array_keys_filter\'',
'\'twig_escape_filter\'',
'\'twig_upper_filter\'',
'\'twig_lower_filter\'',
'\'twig_escape_filter_is_safe\'',
'\'_twig_escape_js_callback\'',
'\'_twig_escape_css_callback\'',
'\'_twig_escape_html_attr_callback\'',
'\'twig_source\'',
'\'twig_test_empty\'',
'\'_twig_markup2string\'',
'\'twig_test_iterable\'',
'\'twig_random\'',
'\'twig_date_converter\'',
'\'twig_cycle\'',
'\'twig_constant\'',
],
'replace' => [
'\'\\\\MailPoetVendor\\\\twig_date_format_filter\'',
'\'\\\\MailPoetVendor\\\\twig_date_modify_filter\'',
'\'\\\\MailPoetVendor\\\\twig_replace_filter\'',
'\'\\\\MailPoetVendor\\\\twig_number_format_filter\'',
'\'\\\\MailPoetVendor\\\\twig_round\'',
'\'\\\\MailPoetVendor\\\\twig_urlencode_filter\'',
'\'\\\\MailPoetVendor\\\\twig_jsonencode_filter\'',
'\'\\\\MailPoetVendor\\\\twig_convert_encoding\'',
'\'\\\\MailPoetVendor\\\\twig_title_string_filter\'',
'\'\\\\MailPoetVendor\\\\twig_capitalize_string_filter\'',
'\'\\\\MailPoetVendor\\\\twig_trim_filter\'',
'\'\\\\MailPoetVendor\\\\twig_spaceless\'',
'\'\\\\MailPoetVendor\\\\twig_join_filter\'',
'\'\\\\MailPoetVendor\\\\twig_split_filter\'',
'\'\\\\MailPoetVendor\\\\twig_sort_filter\'',
'\'\\\\MailPoetVendor\\\\twig_array_merge\'',
'\'\\\\MailPoetVendor\\\\twig_array_batch\'',
'\'\\\\MailPoetVendor\\\\twig_reverse_filter\'',
'\'\\\\MailPoetVendor\\\\twig_length_filter\'',
'\'\\\\MailPoetVendor\\\\twig_slice\'',
'\'\\\\MailPoetVendor\\\\twig_first\'',
'\'\\\\MailPoetVendor\\\\twig_last\'',
'\'\\\\MailPoetVendor\\\\_twig_default_filter\'',
'\'\\\\MailPoetVendor\\\\twig_get_array_keys_filter\'',
'\'\\\\MailPoetVendor\\\\twig_escape_filter\'',
'\'\\\\MailPoetVendor\\\\twig_upper_filter\'',
'\'\\\\MailPoetVendor\\\\twig_lower_filter\'',
'\'\\\\MailPoetVendor\\\\twig_escape_filter_is_safe\'',
'\'\\\\MailPoetVendor\\\\_twig_escape_js_callback\'',
'\'\\\\MailPoetVendor\\\\_twig_escape_css_callback\'',
'\'\\\\MailPoetVendor\\\\_twig_escape_html_attr_callback\'',
'\'\\\\MailPoetVendor\\\\twig_source\'',
'\'\\\\MailPoetVendor\\\\twig_test_empty\'',
'\'\\\\MailPoetVendor\\\\_twig_markup2string\'',
'\'\\\\MailPoetVendor\\\\twig_test_iterable\'',
'\'\\\\MailPoetVendor\\\\twig_random\'',
'\'\\\\MailPoetVendor\\\\twig_date_converter\'',
'\'\\\\MailPoetVendor\\\\twig_cycle\'',
'\'\\\\MailPoetVendor\\\\twig_constant\'',
],
],
[
'file' => '../vendor-prefixed/twig/twig/src/Node/ForNode.php',
'find' => [
'= twig_ensure_traversable("',
],
'replace' => [
'= \\\\MailPoetVendor\\\\twig_ensure_traversable("',
],
],
[
'file' => '../vendor-prefixed/twig/twig/src/Node/CheckSecurityNode.php',
'find' => [
'\'\\\\Twig\\\\Extension\\\\SandboxExtension\'',
],
'replace' => [
'\'\\\\MailPoetVendor\\\\Twig\\\\Extension\\\\SandboxExtension\'',
],
],
[
'file' => '../vendor-prefixed/twig/twig/src/Node/SandboxedPrintNode.php',
'find' => [
'\'\\\\Twig\\\\Extension\\\\SandboxExtension',
],
'replace' => [
'\'\\\\MailPoetVendor\\\\Twig\\\\Extension\\\\SandboxExtension',
],
],
[
'file' => '../vendor-prefixed/twig/twig/src/Environment.php',
'find' => [
'\'\\\\Twig\\\\Template\'',
'\'Twig_Extension\'',
'\'Twig\\\\Extension\\\\AbstractExtension\'',
],
'replace' => [
'\'\\\\MailPoetVendor\\\\Twig\\\\Template\'',
'\'MailPoetVendor\\\\Twig_Extension\'',
'\'MailPoetVendor\\\\Twig\\\\Extension\\\\AbstractExtension\'',
],
],
[
'file' => '../vendor-prefixed/twig/twig/src/Token.php',
'find' => [
'\'Twig\\\\Token::\'',
],
'replace' => [
'\'MailPoetVendor\\\\Twig\\\\Token::\'',
],
],
[
'file' => '../vendor-prefixed/twig/twig/src/Profiler/Node/EnterProfileNode.php',
'find' => [
'\\\\Twig\\\\Profiler\\\\Profile',
],
'replace' => [
'\\\\MailPoetVendor\\\\Twig\\\\Profiler\\\\Profile',
],
],
[
'file' => '../vendor-prefixed/twig/twig/src/Node/ModuleNode.php',
'find' => [
'"use Twig\\\\Environment;',
'"use Twig\\\\Markup;',
'"use Twig\\\\Source;',
'"use Twig\\\\Template;',
'"use Twig\\\\Error\\\\LoaderError;',
'"use Twig\\\\Error\\\\RuntimeError;',
'"use Twig\\\\Sandbox\\\\SecurityError;',
'"use Twig\\\\Sandbox\\\\SecurityNotAllowedTagError;',
'"use Twig\\\\Sandbox\\\\SecurityNotAllowedFilterError;',
'"use Twig\\\\Sandbox\\\\SecurityNotAllowedFunctionError;',
],
'replace' => [
'"use MailPoetVendor\\\\Twig\\\\Environment;',
'"use MailPoetVendor\\\\Twig\\\\Markup;',
'"use MailPoetVendor\\\\Twig\\\\Source;',
'"use MailPoetVendor\\\\Twig\\\\Template;',
'"use MailPoetVendor\\\\Twig\\\\Error\\\\LoaderError;',
'"use MailPoetVendor\\\\Twig\\\\Error\\\\RuntimeError;',
'"use MailPoetVendor\\\\Twig\\\\Sandbox\\\\SecurityError;',
'"use MailPoetVendor\\\\Twig\\\\Sandbox\\\\SecurityNotAllowedTagError;',
'"use MailPoetVendor\\\\Twig\\\\Sandbox\\\\SecurityNotAllowedFilterError;',
'"use MailPoetVendor\\\\Twig\\\\Sandbox\\\\SecurityNotAllowedFunctionError;',
],
],
];
foreach ($replacements as $single_file) {
$data = file_get_contents($single_file['file']);
$data = str_replace($single_file['find'], $single_file['replace'], $data);
file_put_contents($single_file['file'], $data);
}

View File

@@ -5,6 +5,7 @@ use Codeception\Stub;
use Codeception\Stub\Expected; use Codeception\Stub\Expected;
use MailPoet\Config\Env; use MailPoet\Config\Env;
use MailPoet\Config\Renderer; use MailPoet\Config\Renderer;
use MailPoetVendor\Twig_Environment;
class RendererTest extends \MailPoetTest { class RendererTest extends \MailPoetTest {
function _before() { function _before() {
@@ -75,7 +76,7 @@ class RendererTest extends \MailPoetTest {
$this->renderer, $this->renderer,
array(), array(),
array( array(
'renderer' => Stub::makeEmpty('Twig_Environment', 'renderer' => Stub::makeEmpty(Twig_Environment::class,
array( array(
'render' => Expected::atLeastOnce(function() { 'render' => Expected::atLeastOnce(function() {
return 'test render'; return 'test render';
@@ -95,7 +96,7 @@ class RendererTest extends \MailPoetTest {
$this->renderer, $this->renderer,
array(true, false), array(true, false),
array( array(
'renderer' => Stub::makeEmpty('Twig_Environment', 'renderer' => Stub::makeEmpty(Twig_Environment::class,
array( array(
'render' => Expected::atLeastOnce(function() use ($exception_message) { 'render' => Expected::atLeastOnce(function() use ($exception_message) {
throw new \RuntimeException($exception_message); throw new \RuntimeException($exception_message);

View File

@@ -9,7 +9,7 @@ use MailPoet\WP\Functions as WPFunctions;
class FunctionsTest extends \MailPoetTest { class FunctionsTest extends \MailPoetTest {
function testItExecutesIsRtlFunction() { function testItExecutesIsRtlFunction() {
$template = array('template' => '{% if is_rtl() %}rtl{% endif %}'); $template = array('template' => '{% if is_rtl() %}rtl{% endif %}');
$twig = new \Twig_Environment(new \Twig_Loader_Array($template)); $twig = new \MailPoetVendor\Twig_Environment(new \MailPoetVendor\Twig_Loader_Array($template));
$twig->addExtension(new Functions()); $twig->addExtension(new Functions());
WPFunctions::set(Stub::make(new WPFunctions, [ WPFunctions::set(Stub::make(new WPFunctions, [