MailPoet Newsletters (New) - Version 3.75.0

Version Description

  • 2021-12-13 =
  • Changed: show MailPoet logo in emails when using free MailPoet plan;
  • Fixed: "# of machine opens" segment not working properly.
Download this release

Release Info

Developer MailPoet
Plugin Icon 128x128 MailPoet Newsletters (New)
Version 3.75.0
Comparing to
See all releases

Code changes from version 3.74.3 to 3.75.0

Files changed (95) hide show
  1. generated/FreeCachedContainer.php +3 -25
  2. lang/mailpoet-ar.mo +0 -0
  3. lang/mailpoet-bg_BG.mo +0 -0
  4. lang/mailpoet-ca.mo +0 -0
  5. lang/mailpoet-cs_CZ.mo +0 -0
  6. lang/mailpoet-da_DK.mo +0 -0
  7. lang/mailpoet-de_DE.mo +0 -0
  8. lang/mailpoet-de_DE_formal.mo +0 -0
  9. lang/mailpoet-el.mo +0 -0
  10. lang/mailpoet-en_GB.mo +0 -0
  11. lang/mailpoet-es_ES.mo +0 -0
  12. lang/mailpoet-es_MX.mo +0 -0
  13. lang/mailpoet-fa_IR.mo +0 -0
  14. lang/mailpoet-fr_CA.mo +0 -0
  15. lang/mailpoet-fr_FR.mo +0 -0
  16. lang/mailpoet-he_IL.mo +0 -0
  17. lang/mailpoet-hu_HU.mo +0 -0
  18. lang/mailpoet-it_IT.mo +0 -0
  19. lang/mailpoet-ja.mo +0 -0
  20. lang/mailpoet-nb_NO.mo +0 -0
  21. lang/mailpoet-nl_NL.mo +0 -0
  22. lang/mailpoet-nl_NL_formal.mo +0 -0
  23. lang/mailpoet-pl_PL.mo +0 -0
  24. lang/mailpoet-pt_BR.mo +0 -0
  25. lang/mailpoet-pt_PT.mo +0 -0
  26. lang/mailpoet-ro_RO.mo +0 -0
  27. lang/mailpoet-ru_RU.mo +0 -0
  28. lang/mailpoet-sq.mo +0 -0
  29. lang/mailpoet-sr_RS.mo +0 -0
  30. lang/mailpoet-sv_SE.mo +0 -0
  31. lang/mailpoet-tr_TR.mo +0 -0
  32. lang/mailpoet-zh_CN.mo +0 -0
  33. lib-3rd-party/Idiorm/idiorm.php +19 -10
  34. lib-3rd-party/pquery/IQuery.php +154 -0
  35. lib-3rd-party/pquery/LICENSE +502 -0
  36. lib-3rd-party/pquery/gan_formatter.php +382 -0
  37. lib-3rd-party/pquery/gan_node_html.php +2856 -0
  38. lib-3rd-party/pquery/gan_parser_html.php +840 -0
  39. lib-3rd-party/pquery/gan_selector_html.php +950 -0
  40. lib-3rd-party/pquery/gan_tokenizer.php +567 -0
  41. lib-3rd-party/pquery/gan_xml2array.php +102 -0
  42. lib-3rd-party/pquery/ganon.php +102 -0
  43. {vendor/tburry → lib-3rd-party/pquery}/index.php +0 -0
  44. lib-3rd-party/pquery/pQuery.php +284 -0
  45. {vendor/tburry/pquery → lib-3rd-party/pquery/third_party}/index.php +0 -0
  46. lib-3rd-party/pquery/third_party/jsminplus.php +2091 -0
  47. lib/API/JSON/v1/Subscribers.php +14 -7
  48. lib/API/MP/v1/API.php +18 -6
  49. lib/Config/RequirementsChecker.php +0 -1
  50. lib/Config/ServicesChecker.php +13 -0
  51. lib/DI/ContainerConfigurator.php +0 -2
  52. lib/Form/Block/Date.php +8 -8
  53. lib/Listing/BulkActionController.php +0 -37
  54. lib/Listing/BulkActionFactory.php +0 -33
  55. lib/Listing/Handler.php +10 -28
  56. lib/Mailer/Mailer.php +7 -0
  57. lib/Mailer/MetaInfo.php +2 -2
  58. lib/Newsletter/Editor/StructureTransformer.php +2 -2
  59. lib/Newsletter/Links/Links.php +2 -2
  60. lib/Newsletter/Renderer/Renderer.php +8 -16
  61. lib/Segments/DynamicSegments/FilterFactory.php +2 -1
  62. lib/Segments/SegmentsSimpleListRepository.php +2 -0
  63. lib/Segments/WP.php +15 -2
  64. lib/Subscribers/ConfirmationEmailMailer.php +31 -26
  65. lib/Subscribers/SubscriberActions.php +6 -3
  66. lib/Util/DOM.php +1 -1
  67. lib/Util/License/Features/Subscribers.php +5 -0
  68. lib/Util/pQuery/DomNode.php +11 -2
  69. lib/Util/pQuery/Html5Parser.php +5 -3
  70. lib/Util/pQuery/pQuery.php +5 -3
  71. lib/WooCommerce/Subscription.php +14 -2
  72. mailpoet.php +2 -2
  73. readme.txt +6 -2
  74. vendor-prefixed/autoload.php +1 -1
  75. vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Connection.php +1 -1
  76. vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php +1 -1
  77. vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractException.php +1 -1
  78. vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/DriverManager.php +1 -1
  79. vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php +1 -1
  80. vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MariaDb1027Platform.php +1 -1
  81. vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Portability/Statement.php +1 -1
  82. vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtils.php +1 -1
  83. vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DecimalType.php +1 -1
  84. vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Version.php +1 -1
  85. vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php +1 -1
  86. vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php +1 -1
  87. vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php +1 -1
  88. vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query.php +1 -1
  89. vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php +1 -1
  90. vendor-prefixed/symfony/service-contracts/ServiceSubscriberTrait.php +1 -1
  91. vendor-prefixed/symfony/service-contracts/Test/ServiceLocatorTest.php +1 -1
  92. vendor-prefixed/symfony/translation-contracts/Test/TranslatorTest.php +2 -2
  93. vendor-prefixed/symfony/translation-contracts/TranslatorTrait.php +2 -2
  94. vendor/autoload.php +1 -1
  95. vendor/composer/autoload_classmap.php +1 -1
generated/FreeCachedContainer.php CHANGED
@@ -160,8 +160,6 @@ class FreeCachedContainer extends Container
160
  'MailPoet\\Form\\Util\\CustomFonts' => 'getCustomFontsService',
161
  'MailPoet\\Form\\Util\\FieldNameObfuscator' => 'getFieldNameObfuscatorService',
162
  'MailPoet\\Helpscout\\Beacon' => 'getBeaconService',
163
- 'MailPoet\\Listing\\BulkActionController' => 'getBulkActionControllerService',
164
- 'MailPoet\\Listing\\BulkActionFactory' => 'getBulkActionFactoryService',
165
  'MailPoet\\Listing\\Handler' => 'getHandlerService',
166
  'MailPoet\\Listing\\PageLimit' => 'getPageLimitService',
167
  'MailPoet\\Logging\\LogRepository' => 'getLogRepositoryService',
@@ -733,7 +731,7 @@ class FreeCachedContainer extends Container
733
  */
734
  protected function getAPI2Service()
735
  {
736
- return $this->services['MailPoet\\API\\MP\\v1\\API'] = new \MailPoet\API\MP\v1\API(($this->services['MailPoet\\Subscribers\\NewSubscriberNotificationMailer'] ?? $this->getNewSubscriberNotificationMailerService()), ($this->services['MailPoet\\Subscribers\\ConfirmationEmailMailer'] ?? $this->getConfirmationEmailMailerService()), ($this->services['MailPoet\\Subscribers\\RequiredCustomFieldValidator'] ?? $this->getRequiredCustomFieldValidatorService()), ($this->services['MailPoet\\Newsletter\\Scheduler\\WelcomeScheduler'] ?? $this->getWelcomeSchedulerService()), ($this->services['MailPoet\\API\\MP\\v1\\CustomFields'] ?? $this->getCustomFields2Service()), ($this->services['MailPoet\\Settings\\SettingsController'] ?? $this->getSettingsControllerService()));
737
  }
738
 
739
  /**
@@ -1701,26 +1699,6 @@ class FreeCachedContainer extends Container
1701
  return $this->services['MailPoet\\Helpscout\\Beacon'] = new \MailPoet\Helpscout\Beacon(($this->services['MailPoet\\Settings\\SettingsController'] ?? $this->getSettingsControllerService()), ($this->services['MailPoet\\WP\\Functions'] ?? ($this->services['MailPoet\\WP\\Functions'] = new \MailPoet\WP\Functions())), ($this->services['MailPoet\\Util\\License\\Features\\Subscribers'] ?? $this->getSubscribers3Service()));
1702
  }
1703
 
1704
- /**
1705
- * Gets the public 'MailPoet\Listing\BulkActionController' shared autowired service.
1706
- *
1707
- * @return \MailPoet\Listing\BulkActionController
1708
- */
1709
- protected function getBulkActionControllerService()
1710
- {
1711
- return $this->services['MailPoet\\Listing\\BulkActionController'] = new \MailPoet\Listing\BulkActionController(($this->services['MailPoet\\Listing\\BulkActionFactory'] ?? ($this->services['MailPoet\\Listing\\BulkActionFactory'] = new \MailPoet\Listing\BulkActionFactory())), ($this->services['MailPoet\\Listing\\Handler'] ?? ($this->services['MailPoet\\Listing\\Handler'] = new \MailPoet\Listing\Handler())));
1712
- }
1713
-
1714
- /**
1715
- * Gets the public 'MailPoet\Listing\BulkActionFactory' shared autowired service.
1716
- *
1717
- * @return \MailPoet\Listing\BulkActionFactory
1718
- */
1719
- protected function getBulkActionFactoryService()
1720
- {
1721
- return $this->services['MailPoet\\Listing\\BulkActionFactory'] = new \MailPoet\Listing\BulkActionFactory();
1722
- }
1723
-
1724
  /**
1725
  * Gets the public 'MailPoet\Listing\Handler' shared autowired service.
1726
  *
@@ -1948,7 +1926,7 @@ class FreeCachedContainer extends Container
1948
  */
1949
  protected function getRenderer5Service()
1950
  {
1951
- return $this->services['MailPoet\\Newsletter\\Renderer\\Renderer'] = new \MailPoet\Newsletter\Renderer\Renderer(($this->services['MailPoet\\Newsletter\\Renderer\\Blocks\\Renderer'] ?? $this->getRenderer3Service()), ($this->services['MailPoet\\Newsletter\\Renderer\\Columns\\Renderer'] ?? ($this->services['MailPoet\\Newsletter\\Renderer\\Columns\\Renderer'] = new \MailPoet\Newsletter\Renderer\Columns\Renderer())), ($this->services['MailPoet\\Newsletter\\Renderer\\Preprocessor'] ?? $this->getPreprocessorService()), ($this->services['MailPoetVendor\\CSS'] ?? ($this->services['MailPoetVendor\\CSS'] = new \MailPoetVendor\CSS())), ($this->services['MailPoet\\Services\\Bridge'] ?? $this->getBridgeService()), ($this->services['MailPoet\\Newsletter\\NewslettersRepository'] ?? $this->getNewslettersRepositoryService()), ($this->services['MailPoet\\Util\\License\\License'] ?? ($this->services['MailPoet\\Util\\License\\License'] = new \MailPoet\Util\License\License())));
1952
  }
1953
 
1954
  /**
@@ -2445,7 +2423,7 @@ class FreeCachedContainer extends Container
2445
  */
2446
  protected function getWPService()
2447
  {
2448
- return $this->services['MailPoet\\Segments\\WP'] = new \MailPoet\Segments\WP(($this->services['MailPoet\\WP\\Functions'] ?? ($this->services['MailPoet\\WP\\Functions'] = new \MailPoet\WP\Functions())), ($this->services['MailPoet\\Newsletter\\Scheduler\\WelcomeScheduler'] ?? $this->getWelcomeSchedulerService()), ($this->services['MailPoet\\WooCommerce\\Helper'] ?? ($this->services['MailPoet\\WooCommerce\\Helper'] = new \MailPoet\WooCommerce\Helper())));
2449
  }
2450
 
2451
  /**
160
  'MailPoet\\Form\\Util\\CustomFonts' => 'getCustomFontsService',
161
  'MailPoet\\Form\\Util\\FieldNameObfuscator' => 'getFieldNameObfuscatorService',
162
  'MailPoet\\Helpscout\\Beacon' => 'getBeaconService',
 
 
163
  'MailPoet\\Listing\\Handler' => 'getHandlerService',
164
  'MailPoet\\Listing\\PageLimit' => 'getPageLimitService',
165
  'MailPoet\\Logging\\LogRepository' => 'getLogRepositoryService',
731
  */
732
  protected function getAPI2Service()
733
  {
734
+ return $this->services['MailPoet\\API\\MP\\v1\\API'] = new \MailPoet\API\MP\v1\API(($this->services['MailPoet\\Subscribers\\NewSubscriberNotificationMailer'] ?? $this->getNewSubscriberNotificationMailerService()), ($this->services['MailPoet\\Subscribers\\ConfirmationEmailMailer'] ?? $this->getConfirmationEmailMailerService()), ($this->services['MailPoet\\Subscribers\\RequiredCustomFieldValidator'] ?? $this->getRequiredCustomFieldValidatorService()), ($this->services['MailPoet\\Newsletter\\Scheduler\\WelcomeScheduler'] ?? $this->getWelcomeSchedulerService()), ($this->services['MailPoet\\API\\MP\\v1\\CustomFields'] ?? $this->getCustomFields2Service()), ($this->services['MailPoet\\Settings\\SettingsController'] ?? $this->getSettingsControllerService()), ($this->services['MailPoet\\Subscribers\\SubscribersRepository'] ?? $this->getSubscribersRepositoryService()));
735
  }
736
 
737
  /**
1699
  return $this->services['MailPoet\\Helpscout\\Beacon'] = new \MailPoet\Helpscout\Beacon(($this->services['MailPoet\\Settings\\SettingsController'] ?? $this->getSettingsControllerService()), ($this->services['MailPoet\\WP\\Functions'] ?? ($this->services['MailPoet\\WP\\Functions'] = new \MailPoet\WP\Functions())), ($this->services['MailPoet\\Util\\License\\Features\\Subscribers'] ?? $this->getSubscribers3Service()));
1700
  }
1701
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1702
  /**
1703
  * Gets the public 'MailPoet\Listing\Handler' shared autowired service.
1704
  *
1926
  */
1927
  protected function getRenderer5Service()
1928
  {
1929
+ return $this->services['MailPoet\\Newsletter\\Renderer\\Renderer'] = new \MailPoet\Newsletter\Renderer\Renderer(($this->services['MailPoet\\Newsletter\\Renderer\\Blocks\\Renderer'] ?? $this->getRenderer3Service()), ($this->services['MailPoet\\Newsletter\\Renderer\\Columns\\Renderer'] ?? ($this->services['MailPoet\\Newsletter\\Renderer\\Columns\\Renderer'] = new \MailPoet\Newsletter\Renderer\Columns\Renderer())), ($this->services['MailPoet\\Newsletter\\Renderer\\Preprocessor'] ?? $this->getPreprocessorService()), ($this->services['MailPoetVendor\\CSS'] ?? ($this->services['MailPoetVendor\\CSS'] = new \MailPoetVendor\CSS())), ($this->services['MailPoet\\Newsletter\\NewslettersRepository'] ?? $this->getNewslettersRepositoryService()), ($this->services['MailPoet\\Config\\ServicesChecker'] ?? ($this->services['MailPoet\\Config\\ServicesChecker'] = new \MailPoet\Config\ServicesChecker())));
1930
  }
1931
 
1932
  /**
2423
  */
2424
  protected function getWPService()
2425
  {
2426
+ return $this->services['MailPoet\\Segments\\WP'] = new \MailPoet\Segments\WP(($this->services['MailPoet\\WP\\Functions'] ?? ($this->services['MailPoet\\WP\\Functions'] = new \MailPoet\WP\Functions())), ($this->services['MailPoet\\Newsletter\\Scheduler\\WelcomeScheduler'] ?? $this->getWelcomeSchedulerService()), ($this->services['MailPoet\\WooCommerce\\Helper'] ?? ($this->services['MailPoet\\WooCommerce\\Helper'] = new \MailPoet\WooCommerce\Helper())), ($this->services['MailPoet\\Subscribers\\SubscribersRepository'] ?? $this->getSubscribersRepositoryService()));
2427
  }
2428
 
2429
  /**
lang/mailpoet-ar.mo CHANGED
Binary file
lang/mailpoet-bg_BG.mo CHANGED
Binary file
lang/mailpoet-ca.mo CHANGED
Binary file
lang/mailpoet-cs_CZ.mo CHANGED
Binary file
lang/mailpoet-da_DK.mo CHANGED
Binary file
lang/mailpoet-de_DE.mo CHANGED
Binary file
lang/mailpoet-de_DE_formal.mo CHANGED
Binary file
lang/mailpoet-el.mo CHANGED
Binary file
lang/mailpoet-en_GB.mo CHANGED
Binary file
lang/mailpoet-es_ES.mo CHANGED
Binary file
lang/mailpoet-es_MX.mo CHANGED
Binary file
lang/mailpoet-fa_IR.mo CHANGED
Binary file
lang/mailpoet-fr_CA.mo CHANGED
Binary file
lang/mailpoet-fr_FR.mo CHANGED
Binary file
lang/mailpoet-he_IL.mo CHANGED
Binary file
lang/mailpoet-hu_HU.mo CHANGED
Binary file
lang/mailpoet-it_IT.mo CHANGED
Binary file
lang/mailpoet-ja.mo CHANGED
Binary file
lang/mailpoet-nb_NO.mo CHANGED
Binary file
lang/mailpoet-nl_NL.mo CHANGED
Binary file
lang/mailpoet-nl_NL_formal.mo CHANGED
Binary file
lang/mailpoet-pl_PL.mo CHANGED
Binary file
lang/mailpoet-pt_BR.mo CHANGED
Binary file
lang/mailpoet-pt_PT.mo CHANGED
Binary file
lang/mailpoet-ro_RO.mo CHANGED
Binary file
lang/mailpoet-ru_RU.mo CHANGED
Binary file
lang/mailpoet-sq.mo CHANGED
Binary file
lang/mailpoet-sr_RS.mo CHANGED
Binary file
lang/mailpoet-sv_SE.mo CHANGED
Binary file
lang/mailpoet-tr_TR.mo CHANGED
Binary file
lang/mailpoet-zh_CN.mo CHANGED
Binary file
lib-3rd-party/Idiorm/idiorm.php CHANGED
@@ -13,7 +13,6 @@ use InvalidArgumentException;
13
  use IteratorAggregate;
14
  use PDO;
15
  use PDOStatement;
16
- use Serializable;
17
 
18
  /**
19
  *
@@ -2224,22 +2223,23 @@ use Serializable;
2224
  // --- ArrayAccess --- //
2225
  // --------------------- //
2226
 
2227
- public function offsetExists($key) {
2228
  return array_key_exists($key, $this->_data);
2229
  }
2230
 
 
2231
  public function offsetGet($key) {
2232
  return $this->get($key);
2233
  }
2234
 
2235
- public function offsetSet($key, $value) {
2236
  if(is_null($key)) {
2237
  throw new InvalidArgumentException('You must specify a key/array index.');
2238
  }
2239
  $this->set($key, $value);
2240
  }
2241
 
2242
- public function offsetUnset($key) {
2243
  unset($this->_data[$key]);
2244
  unset($this->_dirty_fields[$key]);
2245
  }
@@ -2417,7 +2417,7 @@ use Serializable;
2417
  * @method null setResults(array $results)
2418
  * @method array getResults()
2419
  */
2420
- class IdiormResultSet implements Countable, IteratorAggregate, ArrayAccess, Serializable {
2421
  /**
2422
  * The current result set as an array
2423
  * @var array
@@ -2460,7 +2460,7 @@ use Serializable;
2460
  * Get the number of records in the result set
2461
  * @return int
2462
  */
2463
- public function count() {
2464
  return count($this->_results);
2465
  }
2466
 
@@ -2469,7 +2469,7 @@ use Serializable;
2469
  * over the result set.
2470
  * @return \ArrayIterator
2471
  */
2472
- public function getIterator() {
2473
  return new ArrayIterator($this->_results);
2474
  }
2475
 
@@ -2478,7 +2478,7 @@ use Serializable;
2478
  * @param int|string $offset
2479
  * @return bool
2480
  */
2481
- public function offsetExists($offset) {
2482
  return isset($this->_results[$offset]);
2483
  }
2484
 
@@ -2487,6 +2487,7 @@ use Serializable;
2487
  * @param int|string $offset
2488
  * @return mixed
2489
  */
 
2490
  public function offsetGet($offset) {
2491
  return $this->_results[$offset];
2492
  }
@@ -2496,7 +2497,7 @@ use Serializable;
2496
  * @param int|string $offset
2497
  * @param mixed $value
2498
  */
2499
- public function offsetSet($offset, $value) {
2500
  $this->_results[$offset] = $value;
2501
  }
2502
 
@@ -2504,7 +2505,7 @@ use Serializable;
2504
  * ArrayAccess
2505
  * @param int|string $offset
2506
  */
2507
- public function offsetUnset($offset) {
2508
  unset($this->_results[$offset]);
2509
  }
2510
 
@@ -2516,6 +2517,10 @@ use Serializable;
2516
  return serialize($this->_results);
2517
  }
2518
 
 
 
 
 
2519
  /**
2520
  * Serializable
2521
  * @param string $serialized
@@ -2525,6 +2530,10 @@ use Serializable;
2525
  return unserialize($serialized);
2526
  }
2527
 
 
 
 
 
2528
  /**
2529
  * Call a method on all models in a result set. This allows for method
2530
  * chaining such as setting a property on all models in a result set or
13
  use IteratorAggregate;
14
  use PDO;
15
  use PDOStatement;
 
16
 
17
  /**
18
  *
2223
  // --- ArrayAccess --- //
2224
  // --------------------- //
2225
 
2226
+ public function offsetExists($key): bool {
2227
  return array_key_exists($key, $this->_data);
2228
  }
2229
 
2230
+ #[\ReturnTypeWillChange] // Need to use annotation since mixed was added in 8.0
2231
  public function offsetGet($key) {
2232
  return $this->get($key);
2233
  }
2234
 
2235
+ public function offsetSet($key, $value): void {
2236
  if(is_null($key)) {
2237
  throw new InvalidArgumentException('You must specify a key/array index.');
2238
  }
2239
  $this->set($key, $value);
2240
  }
2241
 
2242
+ public function offsetUnset($key): void {
2243
  unset($this->_data[$key]);
2244
  unset($this->_dirty_fields[$key]);
2245
  }
2417
  * @method null setResults(array $results)
2418
  * @method array getResults()
2419
  */
2420
+ class IdiormResultSet implements Countable, IteratorAggregate, ArrayAccess {
2421
  /**
2422
  * The current result set as an array
2423
  * @var array
2460
  * Get the number of records in the result set
2461
  * @return int
2462
  */
2463
+ public function count(): int {
2464
  return count($this->_results);
2465
  }
2466
 
2469
  * over the result set.
2470
  * @return \ArrayIterator
2471
  */
2472
+ public function getIterator(): \Traversable {
2473
  return new ArrayIterator($this->_results);
2474
  }
2475
 
2478
  * @param int|string $offset
2479
  * @return bool
2480
  */
2481
+ public function offsetExists($offset): bool {
2482
  return isset($this->_results[$offset]);
2483
  }
2484
 
2487
  * @param int|string $offset
2488
  * @return mixed
2489
  */
2490
+ #[\ReturnTypeWillChange] // Can't use mixed return typehint since it was added in 8.0
2491
  public function offsetGet($offset) {
2492
  return $this->_results[$offset];
2493
  }
2497
  * @param int|string $offset
2498
  * @param mixed $value
2499
  */
2500
+ public function offsetSet($offset, $value): void {
2501
  $this->_results[$offset] = $value;
2502
  }
2503
 
2505
  * ArrayAccess
2506
  * @param int|string $offset
2507
  */
2508
+ public function offsetUnset($offset): void {
2509
  unset($this->_results[$offset]);
2510
  }
2511
 
2517
  return serialize($this->_results);
2518
  }
2519
 
2520
+ public function __serialize() {
2521
+ return $this->serialize();
2522
+ }
2523
+
2524
  /**
2525
  * Serializable
2526
  * @param string $serialized
2530
  return unserialize($serialized);
2531
  }
2532
 
2533
+ public function __unserialize($serialized) {
2534
+ return $this->unserialize($serialized);
2535
+ }
2536
+
2537
  /**
2538
  * Call a method on all models in a result set. This allows for method
2539
  * chaining such as setting a property on all models in a result set or
lib-3rd-party/pquery/IQuery.php ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace MailPoetVendor\pQuery;
4
+
5
+ if (!defined('ABSPATH')) exit;
6
+
7
+
8
+ interface IQuery extends \Countable {
9
+ /// Methods ///
10
+
11
+ /**
12
+ * Adds the specified class(es) to each of the set of matched elements.
13
+ * @param string $classname The name of the class to add. You can add multiple classes by separating them with spaces.
14
+ * @return IQuery
15
+ */
16
+ function addClass($classname);
17
+
18
+ /**
19
+ * Insert content, specified by the parameter, after each element in the set of matched elements.
20
+ * @param string $content The content to add.
21
+ * @return IQuery
22
+ */
23
+ function after($content);
24
+
25
+ /**
26
+ * Insert content, specified by the parameter, to the end of each element in the set of matched elements.
27
+ * @param string $content The content to append.
28
+ * @return IQuery
29
+ */
30
+ function append($content);
31
+
32
+ /**
33
+ * Get the value of an attribute for the first element in the set of matched elements or set one
34
+ * or more attributes for every matched element.
35
+ * @param string $name The name of the attribute.
36
+ * @param null|string $value The value to set or null to get the current attribute value.
37
+ * @return string|IQuery
38
+ */
39
+ function attr($name, $value = null);
40
+
41
+ /**
42
+ * Insert content, specified by the parameter, before each element in the set of matched elements.
43
+ * @param string $content The content to add.
44
+ * @return IQuery
45
+ */
46
+ function before($content);
47
+
48
+ /**
49
+ * Remove all child nodes of the set of matched elements from the DOM.
50
+ * @return IQuery;
51
+ */
52
+ function clear();
53
+
54
+ /**
55
+ * Get the value of a style property for the first element in the set of matched elements or
56
+ * set one or more CSS properties for every matched element.
57
+ */
58
+ // function css($name, $value = null);
59
+
60
+ /**
61
+ * Determine whether any of the matched elements are assigned the given class.
62
+ * @param string $classname The name of the class to check.
63
+ */
64
+ function hasClass($classname);
65
+
66
+ /**
67
+ * Get the HTML contents of the first element in the set of matched elements
68
+ * or set the HTML contents of every matched element.
69
+ * @param string|null $value The value to set.
70
+ */
71
+ function html($value = null);
72
+
73
+ /**
74
+ * Insert content, specified by the parameter, to the beginning of each element in the set of matched elements.
75
+ * @param string $content The content to add.
76
+ */
77
+ function prepend($content);
78
+
79
+ /**
80
+ * Get the value of a property for the first element in the set of matched elements
81
+ * or set one or more properties for every matched element.
82
+ * @param string $name The name of the property.
83
+ * The currently supported properties are `tagname`, `selected`, and `checked`.
84
+ * @param null|string $value The value to set or null to get the current property value.
85
+ */
86
+ function prop($name, $value = null);
87
+
88
+ /**
89
+ * Remove the set of matched elements from the DOM.
90
+ * @param null|string $selector A css query to filter the set of removed nodes.
91
+ */
92
+ function remove($selector = null);
93
+
94
+ /**
95
+ * Remove an attribute from each element in the set of matched elements.
96
+ * @param string $name The name of the attribute to remove.
97
+ */
98
+ function removeAttr($name);
99
+
100
+ /**
101
+ * Remove a single class, multiple classes, or all classes from each element in the set of matched elements.
102
+ * @param string $classname The name of the class to remove.
103
+ */
104
+ function removeClass($classname);
105
+
106
+ /**
107
+ * Replace each element in the set of matched elements with the provided new content and return the set of elements that was removed.
108
+ * @param string $content The content that will replace the nodes.
109
+ */
110
+ function replaceWith($content);
111
+
112
+ /**
113
+ * Returns the name of the element.
114
+ * @param null|string $tagName A new tag name or null to return the current tag name.
115
+ */
116
+ function tagName($value = null);
117
+
118
+ /**
119
+ * Get the combined text contents of each element in the set of matched elements, including their descendants, or set the text contents of the matched elements.
120
+ * @param null|string $value A string to set the text or null to return the current text.
121
+ */
122
+ function text($value = null);
123
+
124
+ /**
125
+ * Add or remove one or more classes from each element in the set of matched elements,
126
+ * depending on either the class’s presence or the value of the switch argument.
127
+ * @param string $classname
128
+ * @param bool|null
129
+ */
130
+ function toggleClass($classname, $switch = null);
131
+
132
+ /**
133
+ * Remove the parents of the set of matched elements from the DOM, leaving the matched elements in their place.
134
+ */
135
+ function unwrap();
136
+
137
+ /**
138
+ * Get the current value of the first element in the set of matched elements or set the value of every matched element.
139
+ * @param string|null $value The new value of the element or null to return the current value.
140
+ */
141
+ function val($value = null);
142
+
143
+ /**
144
+ * Wrap an HTML structure around each element in the set of matched elements.
145
+ * @param string A tag name or html string specifying the structure to wrap around the matched elements.
146
+ */
147
+ function wrap($wrapping_element);
148
+
149
+ /**
150
+ * Wrap an HTML structure around the content of each element in the set of matched elements.
151
+ * @param string A tag name or html string specifying the structure to wrap around the content of the matched elements.
152
+ */
153
+ function wrapInner($wrapping_element);
154
+ }
lib-3rd-party/pquery/LICENSE ADDED
@@ -0,0 +1,502 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU LESSER GENERAL PUBLIC LICENSE
2
+ Version 2.1, February 1999
3
+
4
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
5
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ [This is the first released version of the Lesser GPL. It also counts
10
+ as the successor of the GNU Library Public License, version 2, hence
11
+ the version number 2.1.]
12
+
13
+ Preamble
14
+
15
+ The licenses for most software are designed to take away your
16
+ freedom to share and change it. By contrast, the GNU General Public
17
+ Licenses are intended to guarantee your freedom to share and change
18
+ free software--to make sure the software is free for all its users.
19
+
20
+ This license, the Lesser General Public License, applies to some
21
+ specially designated software packages--typically libraries--of the
22
+ Free Software Foundation and other authors who decide to use it. You
23
+ can use it too, but we suggest you first think carefully about whether
24
+ this license or the ordinary General Public License is the better
25
+ strategy to use in any particular case, based on the explanations below.
26
+
27
+ When we speak of free software, we are referring to freedom of use,
28
+ not price. Our General Public Licenses are designed to make sure that
29
+ you have the freedom to distribute copies of free software (and charge
30
+ for this service if you wish); that you receive source code or can get
31
+ it if you want it; that you can change the software and use pieces of
32
+ it in new free programs; and that you are informed that you can do
33
+ these things.
34
+
35
+ To protect your rights, we need to make restrictions that forbid
36
+ distributors to deny you these rights or to ask you to surrender these
37
+ rights. These restrictions translate to certain responsibilities for
38
+ you if you distribute copies of the library or if you modify it.
39
+
40
+ For example, if you distribute copies of the library, whether gratis
41
+ or for a fee, you must give the recipients all the rights that we gave
42
+ you. You must make sure that they, too, receive or can get the source
43
+ code. If you link other code with the library, you must provide
44
+ complete object files to the recipients, so that they can relink them
45
+ with the library after making changes to the library and recompiling
46
+ it. And you must show them these terms so they know their rights.
47
+
48
+ We protect your rights with a two-step method: (1) we copyright the
49
+ library, and (2) we offer you this license, which gives you legal
50
+ permission to copy, distribute and/or modify the library.
51
+
52
+ To protect each distributor, we want to make it very clear that
53
+ there is no warranty for the free library. Also, if the library is
54
+ modified by someone else and passed on, the recipients should know
55
+ that what they have is not the original version, so that the original
56
+ author's reputation will not be affected by problems that might be
57
+ introduced by others.
58
+
59
+ Finally, software patents pose a constant threat to the existence of
60
+ any free program. We wish to make sure that a company cannot
61
+ effectively restrict the users of a free program by obtaining a
62
+ restrictive license from a patent holder. Therefore, we insist that
63
+ any patent license obtained for a version of the library must be
64
+ consistent with the full freedom of use specified in this license.
65
+
66
+ Most GNU software, including some libraries, is covered by the
67
+ ordinary GNU General Public License. This license, the GNU Lesser
68
+ General Public License, applies to certain designated libraries, and
69
+ is quite different from the ordinary General Public License. We use
70
+ this license for certain libraries in order to permit linking those
71
+ libraries into non-free programs.
72
+
73
+ When a program is linked with a library, whether statically or using
74
+ a shared library, the combination of the two is legally speaking a
75
+ combined work, a derivative of the original library. The ordinary
76
+ General Public License therefore permits such linking only if the
77
+ entire combination fits its criteria of freedom. The Lesser General
78
+ Public License permits more lax criteria for linking other code with
79
+ the library.
80
+
81
+ We call this license the "Lesser" General Public License because it
82
+ does Less to protect the user's freedom than the ordinary General
83
+ Public License. It also provides other free software developers Less
84
+ of an advantage over competing non-free programs. These disadvantages
85
+ are the reason we use the ordinary General Public License for many
86
+ libraries. However, the Lesser license provides advantages in certain
87
+ special circumstances.
88
+
89
+ For example, on rare occasions, there may be a special need to
90
+ encourage the widest possible use of a certain library, so that it becomes
91
+ a de-facto standard. To achieve this, non-free programs must be
92
+ allowed to use the library. A more frequent case is that a free
93
+ library does the same job as widely used non-free libraries. In this
94
+ case, there is little to gain by limiting the free library to free
95
+ software only, so we use the Lesser General Public License.
96
+
97
+ In other cases, permission to use a particular library in non-free
98
+ programs enables a greater number of people to use a large body of
99
+ free software. For example, permission to use the GNU C Library in
100
+ non-free programs enables many more people to use the whole GNU
101
+ operating system, as well as its variant, the GNU/Linux operating
102
+ system.
103
+
104
+ Although the Lesser General Public License is Less protective of the
105
+ users' freedom, it does ensure that the user of a program that is
106
+ linked with the Library has the freedom and the wherewithal to run
107
+ that program using a modified version of the Library.
108
+
109
+ The precise terms and conditions for copying, distribution and
110
+ modification follow. Pay close attention to the difference between a
111
+ "work based on the library" and a "work that uses the library". The
112
+ former contains code derived from the library, whereas the latter must
113
+ be combined with the library in order to run.
114
+
115
+ GNU LESSER GENERAL PUBLIC LICENSE
116
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
117
+
118
+ 0. This License Agreement applies to any software library or other
119
+ program which contains a notice placed by the copyright holder or
120
+ other authorized party saying it may be distributed under the terms of
121
+ this Lesser General Public License (also called "this License").
122
+ Each licensee is addressed as "you".
123
+
124
+ A "library" means a collection of software functions and/or data
125
+ prepared so as to be conveniently linked with application programs
126
+ (which use some of those functions and data) to form executables.
127
+
128
+ The "Library", below, refers to any such software library or work
129
+ which has been distributed under these terms. A "work based on the
130
+ Library" means either the Library or any derivative work under
131
+ copyright law: that is to say, a work containing the Library or a
132
+ portion of it, either verbatim or with modifications and/or translated
133
+ straightforwardly into another language. (Hereinafter, translation is
134
+ included without limitation in the term "modification".)
135
+
136
+ "Source code" for a work means the preferred form of the work for
137
+ making modifications to it. For a library, complete source code means
138
+ all the source code for all modules it contains, plus any associated
139
+ interface definition files, plus the scripts used to control compilation
140
+ and installation of the library.
141
+
142
+ Activities other than copying, distribution and modification are not
143
+ covered by this License; they are outside its scope. The act of
144
+ running a program using the Library is not restricted, and output from
145
+ such a program is covered only if its contents constitute a work based
146
+ on the Library (independent of the use of the Library in a tool for
147
+ writing it). Whether that is true depends on what the Library does
148
+ and what the program that uses the Library does.
149
+
150
+ 1. You may copy and distribute verbatim copies of the Library's
151
+ complete source code as you receive it, in any medium, provided that
152
+ you conspicuously and appropriately publish on each copy an
153
+ appropriate copyright notice and disclaimer of warranty; keep intact
154
+ all the notices that refer to this License and to the absence of any
155
+ warranty; and distribute a copy of this License along with the
156
+ Library.
157
+
158
+ You may charge a fee for the physical act of transferring a copy,
159
+ and you may at your option offer warranty protection in exchange for a
160
+ fee.
161
+
162
+ 2. You may modify your copy or copies of the Library or any portion
163
+ of it, thus forming a work based on the Library, and copy and
164
+ distribute such modifications or work under the terms of Section 1
165
+ above, provided that you also meet all of these conditions:
166
+
167
+ a) The modified work must itself be a software library.
168
+
169
+ b) You must cause the files modified to carry prominent notices
170
+ stating that you changed the files and the date of any change.
171
+
172
+ c) You must cause the whole of the work to be licensed at no
173
+ charge to all third parties under the terms of this License.
174
+
175
+ d) If a facility in the modified Library refers to a function or a
176
+ table of data to be supplied by an application program that uses
177
+ the facility, other than as an argument passed when the facility
178
+ is invoked, then you must make a good faith effort to ensure that,
179
+ in the event an application does not supply such function or
180
+ table, the facility still operates, and performs whatever part of
181
+ its purpose remains meaningful.
182
+
183
+ (For example, a function in a library to compute square roots has
184
+ a purpose that is entirely well-defined independent of the
185
+ application. Therefore, Subsection 2d requires that any
186
+ application-supplied function or table used by this function must
187
+ be optional: if the application does not supply it, the square
188
+ root function must still compute square roots.)
189
+
190
+ These requirements apply to the modified work as a whole. If
191
+ identifiable sections of that work are not derived from the Library,
192
+ and can be reasonably considered independent and separate works in
193
+ themselves, then this License, and its terms, do not apply to those
194
+ sections when you distribute them as separate works. But when you
195
+ distribute the same sections as part of a whole which is a work based
196
+ on the Library, the distribution of the whole must be on the terms of
197
+ this License, whose permissions for other licensees extend to the
198
+ entire whole, and thus to each and every part regardless of who wrote
199
+ it.
200
+
201
+ Thus, it is not the intent of this section to claim rights or contest
202
+ your rights to work written entirely by you; rather, the intent is to
203
+ exercise the right to control the distribution of derivative or
204
+ collective works based on the Library.
205
+
206
+ In addition, mere aggregation of another work not based on the Library
207
+ with the Library (or with a work based on the Library) on a volume of
208
+ a storage or distribution medium does not bring the other work under
209
+ the scope of this License.
210
+
211
+ 3. You may opt to apply the terms of the ordinary GNU General Public
212
+ License instead of this License to a given copy of the Library. To do
213
+ this, you must alter all the notices that refer to this License, so
214
+ that they refer to the ordinary GNU General Public License, version 2,
215
+ instead of to this License. (If a newer version than version 2 of the
216
+ ordinary GNU General Public License has appeared, then you can specify
217
+ that version instead if you wish.) Do not make any other change in
218
+ these notices.
219
+
220
+ Once this change is made in a given copy, it is irreversible for
221
+ that copy, so the ordinary GNU General Public License applies to all
222
+ subsequent copies and derivative works made from that copy.
223
+
224
+ This option is useful when you wish to copy part of the code of
225
+ the Library into a program that is not a library.
226
+
227
+ 4. You may copy and distribute the Library (or a portion or
228
+ derivative of it, under Section 2) in object code or executable form
229
+ under the terms of Sections 1 and 2 above provided that you accompany
230
+ it with the complete corresponding machine-readable source code, which
231
+ must be distributed under the terms of Sections 1 and 2 above on a
232
+ medium customarily used for software interchange.
233
+
234
+ If distribution of object code is made by offering access to copy
235
+ from a designated place, then offering equivalent access to copy the
236
+ source code from the same place satisfies the requirement to
237
+ distribute the source code, even though third parties are not
238
+ compelled to copy the source along with the object code.
239
+
240
+ 5. A program that contains no derivative of any portion of the
241
+ Library, but is designed to work with the Library by being compiled or
242
+ linked with it, is called a "work that uses the Library". Such a
243
+ work, in isolation, is not a derivative work of the Library, and
244
+ therefore falls outside the scope of this License.
245
+
246
+ However, linking a "work that uses the Library" with the Library
247
+ creates an executable that is a derivative of the Library (because it
248
+ contains portions of the Library), rather than a "work that uses the
249
+ library". The executable is therefore covered by this License.
250
+ Section 6 states terms for distribution of such executables.
251
+
252
+ When a "work that uses the Library" uses material from a header file
253
+ that is part of the Library, the object code for the work may be a
254
+ derivative work of the Library even though the source code is not.
255
+ Whether this is true is especially significant if the work can be
256
+ linked without the Library, or if the work is itself a library. The
257
+ threshold for this to be true is not precisely defined by law.
258
+
259
+ If such an object file uses only numerical parameters, data
260
+ structure layouts and accessors, and small macros and small inline
261
+ functions (ten lines or less in length), then the use of the object
262
+ file is unrestricted, regardless of whether it is legally a derivative
263
+ work. (Executables containing this object code plus portions of the
264
+ Library will still fall under Section 6.)
265
+
266
+ Otherwise, if the work is a derivative of the Library, you may
267
+ distribute the object code for the work under the terms of Section 6.
268
+ Any executables containing that work also fall under Section 6,
269
+ whether or not they are linked directly with the Library itself.
270
+
271
+ 6. As an exception to the Sections above, you may also combine or
272
+ link a "work that uses the Library" with the Library to produce a
273
+ work containing portions of the Library, and distribute that work
274
+ under terms of your choice, provided that the terms permit
275
+ modification of the work for the customer's own use and reverse
276
+ engineering for debugging such modifications.
277
+
278
+ You must give prominent notice with each copy of the work that the
279
+ Library is used in it and that the Library and its use are covered by
280
+ this License. You must supply a copy of this License. If the work
281
+ during execution displays copyright notices, you must include the
282
+ copyright notice for the Library among them, as well as a reference
283
+ directing the user to the copy of this License. Also, you must do one
284
+ of these things:
285
+
286
+ a) Accompany the work with the complete corresponding
287
+ machine-readable source code for the Library including whatever
288
+ changes were used in the work (which must be distributed under
289
+ Sections 1 and 2 above); and, if the work is an executable linked
290
+ with the Library, with the complete machine-readable "work that
291
+ uses the Library", as object code and/or source code, so that the
292
+ user can modify the Library and then relink to produce a modified
293
+ executable containing the modified Library. (It is understood
294
+ that the user who changes the contents of definitions files in the
295
+ Library will not necessarily be able to recompile the application
296
+ to use the modified definitions.)
297
+
298
+ b) Use a suitable shared library mechanism for linking with the
299
+ Library. A suitable mechanism is one that (1) uses at run time a
300
+ copy of the library already present on the user's computer system,
301
+ rather than copying library functions into the executable, and (2)
302
+ will operate properly with a modified version of the library, if
303
+ the user installs one, as long as the modified version is
304
+ interface-compatible with the version that the work was made with.
305
+
306
+ c) Accompany the work with a written offer, valid for at
307
+ least three years, to give the same user the materials
308
+ specified in Subsection 6a, above, for a charge no more
309
+ than the cost of performing this distribution.
310
+
311
+ d) If distribution of the work is made by offering access to copy
312
+ from a designated place, offer equivalent access to copy the above
313
+ specified materials from the same place.
314
+
315
+ e) Verify that the user has already received a copy of these
316
+ materials or that you have already sent this user a copy.
317
+
318
+ For an executable, the required form of the "work that uses the
319
+ Library" must include any data and utility programs needed for
320
+ reproducing the executable from it. However, as a special exception,
321
+ the materials to be distributed need not include anything that is
322
+ normally distributed (in either source or binary form) with the major
323
+ components (compiler, kernel, and so on) of the operating system on
324
+ which the executable runs, unless that component itself accompanies
325
+ the executable.
326
+
327
+ It may happen that this requirement contradicts the license
328
+ restrictions of other proprietary libraries that do not normally
329
+ accompany the operating system. Such a contradiction means you cannot
330
+ use both them and the Library together in an executable that you
331
+ distribute.
332
+
333
+ 7. You may place library facilities that are a work based on the
334
+ Library side-by-side in a single library together with other library
335
+ facilities not covered by this License, and distribute such a combined
336
+ library, provided that the separate distribution of the work based on
337
+ the Library and of the other library facilities is otherwise
338
+ permitted, and provided that you do these two things:
339
+
340
+ a) Accompany the combined library with a copy of the same work
341
+ based on the Library, uncombined with any other library
342
+ facilities. This must be distributed under the terms of the
343
+ Sections above.
344
+
345
+ b) Give prominent notice with the combined library of the fact
346
+ that part of it is a work based on the Library, and explaining
347
+ where to find the accompanying uncombined form of the same work.
348
+
349
+ 8. You may not copy, modify, sublicense, link with, or distribute
350
+ the Library except as expressly provided under this License. Any
351
+ attempt otherwise to copy, modify, sublicense, link with, or
352
+ distribute the Library is void, and will automatically terminate your
353
+ rights under this License. However, parties who have received copies,
354
+ or rights, from you under this License will not have their licenses
355
+ terminated so long as such parties remain in full compliance.
356
+
357
+ 9. You are not required to accept this License, since you have not
358
+ signed it. However, nothing else grants you permission to modify or
359
+ distribute the Library or its derivative works. These actions are
360
+ prohibited by law if you do not accept this License. Therefore, by
361
+ modifying or distributing the Library (or any work based on the
362
+ Library), you indicate your acceptance of this License to do so, and
363
+ all its terms and conditions for copying, distributing or modifying
364
+ the Library or works based on it.
365
+
366
+ 10. Each time you redistribute the Library (or any work based on the
367
+ Library), the recipient automatically receives a license from the
368
+ original licensor to copy, distribute, link with or modify the Library
369
+ subject to these terms and conditions. You may not impose any further
370
+ restrictions on the recipients' exercise of the rights granted herein.
371
+ You are not responsible for enforcing compliance by third parties with
372
+ this License.
373
+
374
+ 11. If, as a consequence of a court judgment or allegation of patent
375
+ infringement or for any other reason (not limited to patent issues),
376
+ conditions are imposed on you (whether by court order, agreement or
377
+ otherwise) that contradict the conditions of this License, they do not
378
+ excuse you from the conditions of this License. If you cannot
379
+ distribute so as to satisfy simultaneously your obligations under this
380
+ License and any other pertinent obligations, then as a consequence you
381
+ may not distribute the Library at all. For example, if a patent
382
+ license would not permit royalty-free redistribution of the Library by
383
+ all those who receive copies directly or indirectly through you, then
384
+ the only way you could satisfy both it and this License would be to
385
+ refrain entirely from distribution of the Library.
386
+
387
+ If any portion of this section is held invalid or unenforceable under any
388
+ particular circumstance, the balance of the section is intended to apply,
389
+ and the section as a whole is intended to apply in other circumstances.
390
+
391
+ It is not the purpose of this section to induce you to infringe any
392
+ patents or other property right claims or to contest validity of any
393
+ such claims; this section has the sole purpose of protecting the
394
+ integrity of the free software distribution system which is
395
+ implemented by public license practices. Many people have made
396
+ generous contributions to the wide range of software distributed
397
+ through that system in reliance on consistent application of that
398
+ system; it is up to the author/donor to decide if he or she is willing
399
+ to distribute software through any other system and a licensee cannot
400
+ impose that choice.
401
+
402
+ This section is intended to make thoroughly clear what is believed to
403
+ be a consequence of the rest of this License.
404
+
405
+ 12. If the distribution and/or use of the Library is restricted in
406
+ certain countries either by patents or by copyrighted interfaces, the
407
+ original copyright holder who places the Library under this License may add
408
+ an explicit geographical distribution limitation excluding those countries,
409
+ so that distribution is permitted only in or among countries not thus
410
+ excluded. In such case, this License incorporates the limitation as if
411
+ written in the body of this License.
412
+
413
+ 13. The Free Software Foundation may publish revised and/or new
414
+ versions of the Lesser General Public License from time to time.
415
+ Such new versions will be similar in spirit to the present version,
416
+ but may differ in detail to address new problems or concerns.
417
+
418
+ Each version is given a distinguishing version number. If the Library
419
+ specifies a version number of this License which applies to it and
420
+ "any later version", you have the option of following the terms and
421
+ conditions either of that version or of any later version published by
422
+ the Free Software Foundation. If the Library does not specify a
423
+ license version number, you may choose any version ever published by
424
+ the Free Software Foundation.
425
+
426
+ 14. If you wish to incorporate parts of the Library into other free
427
+ programs whose distribution conditions are incompatible with these,
428
+ write to the author to ask for permission. For software which is
429
+ copyrighted by the Free Software Foundation, write to the Free
430
+ Software Foundation; we sometimes make exceptions for this. Our
431
+ decision will be guided by the two goals of preserving the free status
432
+ of all derivatives of our free software and of promoting the sharing
433
+ and reuse of software generally.
434
+
435
+ NO WARRANTY
436
+
437
+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
438
+ WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
439
+ EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
440
+ OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
441
+ KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
442
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
443
+ PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
444
+ LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
445
+ THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
446
+
447
+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
448
+ WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
449
+ AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
450
+ FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
451
+ CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
452
+ LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
453
+ RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
454
+ FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
455
+ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
456
+ DAMAGES.
457
+
458
+ END OF TERMS AND CONDITIONS
459
+
460
+ How to Apply These Terms to Your New Libraries
461
+
462
+ If you develop a new library, and you want it to be of the greatest
463
+ possible use to the public, we recommend making it free software that
464
+ everyone can redistribute and change. You can do so by permitting
465
+ redistribution under these terms (or, alternatively, under the terms of the
466
+ ordinary General Public License).
467
+
468
+ To apply these terms, attach the following notices to the library. It is
469
+ safest to attach them to the start of each source file to most effectively
470
+ convey the exclusion of warranty; and each file should have at least the
471
+ "copyright" line and a pointer to where the full notice is found.
472
+
473
+ <one line to give the library's name and a brief idea of what it does.>
474
+ Copyright (C) <year> <name of author>
475
+
476
+ This library is free software; you can redistribute it and/or
477
+ modify it under the terms of the GNU Lesser General Public
478
+ License as published by the Free Software Foundation; either
479
+ version 2.1 of the License, or (at your option) any later version.
480
+
481
+ This library is distributed in the hope that it will be useful,
482
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
483
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
484
+ Lesser General Public License for more details.
485
+
486
+ You should have received a copy of the GNU Lesser General Public
487
+ License along with this library; if not, write to the Free Software
488
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
489
+
490
+ Also add information on how to contact you by electronic and paper mail.
491
+
492
+ You should also get your employer (if you work as a programmer) or your
493
+ school, if any, to sign a "copyright disclaimer" for the library, if
494
+ necessary. Here is a sample; alter the names:
495
+
496
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
497
+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
498
+
499
+ <signature of Ty Coon>, 1 April 1990
500
+ Ty Coon, President of Vice
501
+
502
+ That's all there is to it!
lib-3rd-party/pquery/gan_formatter.php ADDED
@@ -0,0 +1,382 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @author Niels A.D.
4
+ * @author Todd Burry <todd@vanillaforums.com>
5
+ * @copyright 2010 Niels A.D., 2014 Todd Burry
6
+ * @license http://opensource.org/licenses/LGPL-2.1 LGPL-2.1
7
+ * @package pQuery
8
+ */
9
+
10
+ namespace MailPoetVendor\pQuery;
11
+
12
+ if (!defined('ABSPATH')) exit;
13
+
14
+
15
+ /**
16
+ * Indents text
17
+ * @param string $text
18
+ * @param int $indent
19
+ * @param string $indent_string
20
+ * @return string
21
+ */
22
+ function indent_text($text, $indent, $indent_string = ' ') {
23
+ if ($indent && $indent_string) {
24
+ return str_replace("\n", "\n".str_repeat($indent_string, $indent), $text);
25
+ } else {
26
+ return $text;
27
+ }
28
+ }
29
+
30
+ /**
31
+ * Class used to format/minify HTML nodes
32
+ *
33
+ * Used like:
34
+ * <code>
35
+ * <?php
36
+ * $formatter = new HtmlFormatter();
37
+ * $formatter->format($root);
38
+ * ?>
39
+ * </code>
40
+ */
41
+ class HtmlFormatter {
42
+
43
+ /**
44
+ * Determines which elements start on a new line and which function as block
45
+ * @var array('element' => array('new_line' => true, 'as_block' => true, 'format_inside' => true))
46
+ */
47
+ var $block_elements = array(
48
+ 'p' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
49
+ 'h1' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
50
+ 'h2' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
51
+ 'h3' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
52
+ 'h4' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
53
+ 'h5' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
54
+ 'h6' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
55
+
56
+ 'form' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
57
+ 'fieldset' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
58
+ 'legend' => array('new_line' => true, 'as_block' => false, 'format_inside' => true),
59
+ 'dl' => array('new_line' => true, 'as_block' => false, 'format_inside' => true),
60
+ 'dt' => array('new_line' => true, 'as_block' => false, 'format_inside' => true),
61
+ 'dd' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
62
+ 'ol' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
63
+ 'ul' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
64
+ 'li' => array('new_line' => true, 'as_block' => false, 'format_inside' => true),
65
+
66
+ 'table' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
67
+ 'tr' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
68
+
69
+ 'dir' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
70
+ 'menu' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
71
+ 'address' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
72
+ 'blockquote' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
73
+ 'center' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
74
+ 'del' => array('new_line' => true, 'as_block' => false, 'format_inside' => true),
75
+ //'div' => array('new_line' => false, 'as_block' => true, 'format_inside' => true),
76
+ 'hr' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
77
+ 'ins' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
78
+ 'noscript' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
79
+ 'pre' => array('new_line' => true, 'as_block' => true, 'format_inside' => false),
80
+ 'script' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
81
+ 'style' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
82
+
83
+ 'html' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
84
+ 'head' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
85
+ 'body' => array('new_line' => true, 'as_block' => true, 'format_inside' => true),
86
+ 'title' => array('new_line' => true, 'as_block' => false, 'format_inside' => false)
87
+ );
88
+
89
+ /**
90
+ * Determines which characters are considered whitespace
91
+ * @var array("\t" => true) True to recognize as new line
92
+ */
93
+ var $whitespace = array(
94
+ ' ' => false,
95
+ "\t" => false,
96
+ "\x0B" => false,
97
+ "\0" => false,
98
+ "\n" => true,
99
+ "\r" => true
100
+ );
101
+
102
+ /**
103
+ * String that is used to generate correct indenting
104
+ * @var string
105
+ */
106
+ var $indent_string = ' ';
107
+
108
+ /**
109
+ * String that is used to break lines
110
+ * @var string
111
+ */
112
+ var $linebreak_string = "\n";
113
+
114
+ /**
115
+ * Other formatting options
116
+ * @var array
117
+ */
118
+ public $options = array(
119
+ 'img_alt' => '',
120
+ 'self_close_str' => null,
121
+ 'attribute_shorttag' => false,
122
+ 'sort_attributes' => false,
123
+ 'attributes_case' => CASE_LOWER,
124
+ 'minify_script' => true
125
+ );
126
+
127
+ /**
128
+ * Errors found during formatting
129
+ * @var array
130
+ */
131
+ var $errors = array();
132
+
133
+
134
+ /**
135
+ * Class constructor
136
+ * @param array $options {@link $options}
137
+ */
138
+ function __construct($options = array()) {
139
+ $this->options = array_merge($this->options, $options);
140
+
141
+ if (isset($options['indent_str']))
142
+ $this->indent_string = $options['indent_str'];
143
+
144
+ if (isset($options['linebreak_str']))
145
+ $this->linebreak_string = $options['linebreak_str'];
146
+ }
147
+
148
+ #php4 PHP4 class constructor compatibility
149
+ #function HtmlFormatter($options = array()) {return $this->__construct($options);}
150
+ #php4e
151
+
152
+ /**
153
+ * Class magic invoke method, performs {@link format()}
154
+ * @access private
155
+ */
156
+ function __invoke(&$node) {
157
+ return $this->format($node);
158
+ }
159
+
160
+ /**
161
+ * Minifies HTML / removes unneeded whitespace
162
+ * @param DomNode $root
163
+ * @param bool $strip_comments
164
+ * @param bool $recursive
165
+ */
166
+ static function minify_html(&$root, $strip_comments = true, $recursive = true) {
167
+ if ($strip_comments) {
168
+ foreach($root->select(':comment', false, $recursive, true) as $c) {
169
+ $prev = $c->getSibling(-1);
170
+ $next = $c->getSibling(1);
171
+ $c->delete();
172
+ if ($prev && $next && ($prev->isText()) && ($next->isText())) {
173
+ $prev->text .= $next->text;
174
+ $next->delete();
175
+ }
176
+ }
177
+ }
178
+ foreach($root->select('(!pre + !xmp + !style + !script + !"?php" + !"~text~" + !"~comment~"):not-empty > "~text~"', false, $recursive, true) as $c) {
179
+ $c->text = preg_replace('`\s+`', ' ', $c->text);
180
+ }
181
+ }
182
+
183
+ /**
184
+ * Minifies javascript using JSMin+
185
+ * @param DomNode $root
186
+ * @param string $indent_string
187
+ * @param bool $wrap_comment Wrap javascript in HTML comments (<!-- ~text~ //-->)
188
+ * @param bool $recursive
189
+ * @return bool|array Array of errors on failure, true on succes
190
+ */
191
+ static function minify_javascript(&$root, $indent_string = ' ', $wrap_comment = true, $recursive = true) {
192
+ #php4 JSMin+ doesn't support PHP4
193
+ #return true;
194
+ #php4e
195
+ #php5
196
+ include_once('third_party/jsminplus.php');
197
+
198
+ $errors = array();
199
+ foreach($root->select('script:not-empty > "~text~"', false, $recursive, true) as $c) {
200
+ try {
201
+ $text = $c->text;
202
+ while ($text) {
203
+ $text = trim($text);
204
+ //Remove comment/CDATA tags at begin and end
205
+ if (substr($text, 0, 4) === '<!--') {
206
+ $text = substr($text, 5);
207
+ continue;
208
+ } elseif (strtolower(substr($text, 0, 9)) === '<![cdata[') {
209
+ $text = substr($text, 10);
210
+ continue;
211
+ }
212
+
213
+ if (($end = substr($text, -3)) && (($end === '-->') || ($end === ']]>'))) {
214
+ $text = substr($text, 0, -3);
215
+ continue;
216
+ }
217
+
218
+ break;
219
+ }
220
+
221
+ if (trim($text)) {
222
+ $text = JSMinPlus::minify($text);
223
+ if ($wrap_comment) {
224
+ $text = "<!--\n".$text."\n//-->";
225
+ }
226
+ if ($indent_string && ($wrap_comment || (strpos($text, "\n") !== false))) {
227
+ $text = indent_text("\n".$text, $c->indent(), $indent_string);
228
+ }
229
+ }
230
+ $c->text = $text;
231
+ } catch (\Exception $e) {
232
+ $errors[] = array($e, $c->parent->dumpLocation());
233
+ }
234
+ }
235
+
236
+ return (($errors) ? $errors : true);
237
+ #php5e
238
+ }
239
+
240
+ /**
241
+ * Formats HTML
242
+ * @param DomNode $root
243
+ * @param bool $recursive
244
+ * @access private
245
+ */
246
+ function format_html(&$root, $recursive = null) {
247
+ if ($recursive === null) {
248
+ $recursive = true;
249
+ self::minify_html($root);
250
+ } elseif (is_int($recursive)) {
251
+ $recursive = (($recursive > 1) ? $recursive - 1 : false);
252
+ }
253
+
254
+ $root_tag = strtolower($root->tag);
255
+ $in_block = isset($this->block_elements[$root_tag]) && $this->block_elements[$root_tag]['as_block'];
256
+ $child_count = count($root->children);
257
+
258
+ if (isset($this->options['attributes_case']) && $this->options['attributes_case']) {
259
+ $root->attributes = array_change_key_case($root->attributes, $this->options['attributes_case']);
260
+ $root->attributes_ns = null;
261
+ }
262
+
263
+ if (isset($this->options['sort_attributes']) && $this->options['sort_attributes']) {
264
+ if ($this->options['sort_attributes'] === 'reverse') {
265
+ krsort($root->attributes);
266
+ } else {
267
+ ksort($root->attributes);
268
+ }
269
+ }
270
+
271
+ if ($root->select(':element', true, false, true)) {
272
+ $root->setTag(strtolower($root->tag), true);
273
+ if (($this->options['img_alt'] !== null) && ($root_tag === 'img') && (!isset($root->alt))) {
274
+ $root->setAttribute('alt', $this->options['img_alt']);
275
+ }
276
+ }
277
+ if ($this->options['self_close_str'] !== null) {
278
+ $root->self_close_str = $this->options['self_close_str'];
279
+ }
280
+ if ($this->options['attribute_shorttag'] !== null) {
281
+ $root->attribute_shorttag = $this->options['attribute_shorttag'];
282
+ }
283
+
284
+ $prev = null;
285
+ $n_tag = '';
286
+ // $prev_tag = '';
287
+ $as_block = false;
288
+ $prev_asblock = false;
289
+ for($i = 0; $i < $child_count; $i++) {
290
+ $n =& $root->children[$i];
291
+ $indent = $n->indent();
292
+
293
+ if (!$n->isText()) {
294
+ $n_tag = strtolower($n->tag);
295
+ $new_line = isset($this->block_elements[$n_tag]) && $this->block_elements[$n_tag]['new_line'];
296
+ $as_block = isset($this->block_elements[$n_tag]) && $this->block_elements[$n_tag]['as_block'];
297
+ $format_inside = ((!isset($this->block_elements[$n_tag])) || $this->block_elements[$n_tag]['format_inside']);
298
+
299
+ if ($prev && ($prev->isText()) && $prev->text && ($char = $prev->text[strlen($prev->text) - 1]) && isset($this->whitespace[$char])) {
300
+ if ($this->whitespace[$char]) {
301
+ $prev->text .= str_repeat($this->indent_string, $indent);
302
+ } else {
303
+ $prev->text = substr_replace($prev->text, $this->linebreak_string.str_repeat($this->indent_string, $indent), -1, 1);
304
+ }
305
+ } elseif (($new_line || $prev_asblock || ($in_block && ($i === 0)))){
306
+ if ($prev && ($prev->isText())) {
307
+ $prev->text .= $this->linebreak_string.str_repeat($this->indent_string, $indent);
308
+ } else {
309
+ $root->addText($this->linebreak_string.str_repeat($this->indent_string, $indent), $i);
310
+ ++$child_count;
311
+ }
312
+ }
313
+
314
+ if ($format_inside && count($n->children)) {
315
+ //$last = end($n->children);
316
+ $last = $n->children[count($n->children) - 1];
317
+ $last_tag = ($last) ? strtolower($last->tag) : '';
318
+ $last_asblock = ($last_tag && isset($this->block_elements[$last_tag]) && $this->block_elements[$last_tag]['as_block']);
319
+
320
+ if (($n->childCount(true) > 0) || (trim($n->getPlainText()))) {
321
+ if ($last && ($last->isText()) && $last->text && ($char = $last->text[strlen($last->text) - 1]) && isset($this->whitespace[$char])) {
322
+ if ($as_block || ($last->index() > 0) || isset($this->whitespace[$last->text[0]])) {
323
+ if ($this->whitespace[$char]) {
324
+ $last->text .= str_repeat($this->indent_string, $indent);
325
+ } else {
326
+ $last->text = substr_replace($last->text, $this->linebreak_string.str_repeat($this->indent_string, $indent), -1, 1);
327
+ }
328
+ }
329
+ } elseif (($as_block || $last_asblock || ($in_block && ($i === 0))) && $last) {
330
+ if ($last && ($last->isText())) {
331
+ $last->text .= $this->linebreak_string.str_repeat($this->indent_string, $indent);
332
+ } else {
333
+ $n->addText($this->linebreak_string.str_repeat($this->indent_string, $indent));
334
+ }
335
+ }
336
+ } elseif (!trim($n->getInnerText())) {
337
+ $n->clear();
338
+ }
339
+
340
+ if ($recursive) {
341
+ $this->format_html($n, $recursive);
342
+ }
343
+ }
344
+
345
+ } elseif (trim($n->text) && ((($i - 1 < $child_count) && ($char = $n->text[0]) && isset($this->whitespace[$char])) || ($in_block && ($i === 0)))) {
346
+ if (isset($this->whitespace[$char])) {
347
+ if ($this->whitespace[$char]) {
348
+ $n->text = str_repeat($this->indent_string, $indent).$n->text;
349
+ } else {
350
+ $n->text = substr_replace($n->text, $this->linebreak_string.str_repeat($this->indent_string, $indent), 0, 1);
351
+ }
352
+ } else {
353
+ $n->text = $this->linebreak_string.str_repeat($this->indent_string, $indent).$n->text;
354
+ }
355
+ }
356
+
357
+ $prev = $n;
358
+ // $prev_tag = $n_tag;
359
+ $prev_asblock = $as_block;
360
+ }
361
+
362
+ return true;
363
+ }
364
+
365
+ /**
366
+ * Formats HTML/Javascript
367
+ * @param DomNode $root
368
+ * @see format_html()
369
+ */
370
+ function format(&$node) {
371
+ $this->errors = array();
372
+ if ($this->options['minify_script']) {
373
+ $a = self::minify_javascript($node, $this->indent_string, true, true);
374
+ if (is_array($a)) {
375
+ foreach($a as $error) {
376
+ $this->errors[] = $error[0]->getMessage().' >>> '.$error[1];
377
+ }
378
+ }
379
+ }
380
+ return $this->format_html($node);
381
+ }
382
+ }
lib-3rd-party/pquery/gan_node_html.php ADDED
@@ -0,0 +1,2856 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @author Niels A.D.
4
+ * @author Todd Burry <todd@vanillaforums.com>
5
+ * @copyright 2010 Niels A.D., 2014 Todd Burry
6
+ * @license http://opensource.org/licenses/LGPL-2.1 LGPL-2.1
7
+ * @package pQuery
8
+ */
9
+
10
+ namespace MailPoetVendor\pQuery;
11
+
12
+ if (!defined('ABSPATH')) exit;
13
+
14
+
15
+ /**
16
+ * Holds (x)html/xml tag information like tag name, attributes,
17
+ * parent, children, self close, etc.
18
+ *
19
+ */
20
+ class DomNode implements IQuery {
21
+
22
+ /**
23
+ * Element Node, used for regular elements
24
+ */
25
+ const NODE_ELEMENT = 0;
26
+ /**
27
+ * Text Node
28
+ */
29
+ const NODE_TEXT = 1;
30
+ /**
31
+ * Comment Node
32
+ */
33
+ const NODE_COMMENT = 2;
34
+ /**
35
+ * Conditional Node (<![if]> <![endif])
36
+ */
37
+ const NODE_CONDITIONAL = 3;
38
+ /**
39
+ * CDATA Node (<![CDATA[]]>
40
+ */
41
+ const NODE_CDATA = 4;
42
+ /**
43
+ * Doctype Node
44
+ */
45
+ const NODE_DOCTYPE = 5;
46
+ /**
47
+ * XML Node, used for tags that start with ?, like <?xml and <?php
48
+ */
49
+ const NODE_XML = 6;
50
+ /**
51
+ * ASP Node
52
+ */
53
+ const NODE_ASP = 7;
54
+
55
+ #php4 Compatibility with PHP4, this gets changed to a regular var in release tool
56
+ #static $NODE_TYPE = self::NODE_ELEMENT;
57
+ #php4e
58
+ #php5
59
+ /**
60
+ * Node type of class
61
+ */
62
+ const NODE_TYPE = self::NODE_ELEMENT;
63
+ #php5e
64
+
65
+
66
+ /**
67
+ * Name of the selector class
68
+ * @var string
69
+ * @see select()
70
+ */
71
+ var $selectClass = 'MailPoetVendor\\pQuery\\HtmlSelector';
72
+ /**
73
+ * Name of the parser class
74
+ * @var string
75
+ * @see setOuterText()
76
+ * @see setInnerText()
77
+ */
78
+ var $parserClass = 'MailPoetVendor\\pQuery\\Html5Parser';
79
+
80
+ /**
81
+ * Name of the class used for {@link addChild()}
82
+ * @var string
83
+ */
84
+ var $childClass = __CLASS__;
85
+ /**
86
+ * Name of the class used for {@link addText()}
87
+ * @var string
88
+ */
89
+ var $childClass_Text = 'MailPoetVendor\\pQuery\\TextNode';
90
+ /**
91
+ * Name of the class used for {@link addComment()}
92
+ * @var string
93
+ */
94
+ var $childClass_Comment = 'MailPoetVendor\\pQuery\\CommentNode';
95
+ /**
96
+ * Name of the class used for {@link addContional()}
97
+ * @var string
98
+ */
99
+ var $childClass_Conditional = 'MailPoetVendor\\pQuery\\ConditionalTagNode';
100
+ /**
101
+ * Name of the class used for {@link addCDATA()}
102
+ * @var string
103
+ */
104
+ var $childClass_CDATA = 'MailPoetVendor\\pQuery\\CdataNode';
105
+ /**
106
+ * Name of the class used for {@link addDoctype()}
107
+ * @var string
108
+ */
109
+ var $childClass_Doctype = 'MailPoetVendor\\pQuery\\DoctypeNode';
110
+ /**
111
+ * Name of the class used for {@link addXML()}
112
+ * @var string
113
+ */
114
+ var $childClass_XML = 'MailPoetVendor\\pQuery\\XmlNode';
115
+ /**
116
+ * Name of the class used for {@link addASP()}
117
+ * @var string
118
+ */
119
+ var $childClass_ASP = 'MailPoetVendor\\pQuery\\AspEmbeddedNode';
120
+
121
+ /**
122
+ * Parent node, null if none
123
+ * @var DomNode
124
+ * @see changeParent()
125
+ */
126
+ var $parent = null;
127
+
128
+ /**
129
+ * Attributes of node
130
+ * @var array
131
+ * @internal array('attribute' => 'value')
132
+ * @internal Public for faster access!
133
+ * @see getAttribute()
134
+ * @see setAttribute()
135
+ * @access private
136
+ */
137
+ var $attributes = array();
138
+
139
+ /**
140
+ * Namespace info for attributes
141
+ * @var array
142
+ * @internal array('tag' => array(array('ns', 'tag', 'ns:tag', index)))
143
+ * @internal Public for easy outside modifications!
144
+ * @see findAttribute()
145
+ * @access private
146
+ */
147
+ var $attributes_ns = null;
148
+
149
+ /**
150
+ * Array of child nodes
151
+ * @var array
152
+ * @internal Public for faster access!
153
+ * @see childCount()
154
+ * @see getChild()
155
+ * @see addChild()
156
+ * @see deleteChild()
157
+ * @access private
158
+ */
159
+ var $children = array();
160
+
161
+ /**
162
+ * Full tag name (including namespace)
163
+ * @var string
164
+ * @see getTagName()
165
+ * @see getNamespace()
166
+ */
167
+ var $tag = '';
168
+
169
+ /**
170
+ * Namespace info for tag
171
+ * @var array
172
+ * @internal array('namespace', 'tag')
173
+ * @internal Public for easy outside modifications!
174
+ * @access private
175
+ */
176
+ var $tag_ns = null;
177
+
178
+ /**
179
+ * Is node a self closing node? No closing tag if true.
180
+ * @var bool
181
+ */
182
+ var $self_close = false;
183
+
184
+ /**
185
+ * If self close, then this will be used to close the tag
186
+ * @var string
187
+ * @see $self_close
188
+ */
189
+ var $self_close_str = ' /';
190
+
191
+ /**
192
+ * Use short tags for attributes? If true, then attributes
193
+ * with values equal to the attribute name will not output
194
+ * the value, e.g. selected="selected" will be selected.
195
+ * @var bool
196
+ */
197
+ var $attribute_shorttag = true;
198
+
199
+ /**
200
+ * Function map used for the selector filter
201
+ * @var array
202
+ * @internal array('root' => 'filter_root') will cause the
203
+ * selector to call $this->filter_root at :root
204
+ * @access private
205
+ */
206
+ var $filter_map = array(
207
+ 'root' => 'filter_root',
208
+ 'nth-child' => 'filter_nchild',
209
+ 'eq' => 'filter_nchild', //jquery (naming) compatibility
210
+ 'gt' => 'filter_gt',
211
+ 'lt' => 'filter_lt',
212
+ 'nth-last-child' => 'filter_nlastchild',
213
+ 'nth-of-type' => 'filter_ntype',
214
+ 'nth-last-of-type' => 'filter_nlastype',
215
+ 'odd' => 'filter_odd',
216
+ 'even' => 'filter_even',
217
+ 'every' => 'filter_every',
218
+ 'first-child' => 'filter_first',
219
+ 'last-child' => 'filter_last',
220
+ 'first-of-type' => 'filter_firsttype',
221
+ 'last-of-type' => 'filter_lasttype',
222
+ 'only-child' => 'filter_onlychild',
223
+ 'only-of-type' => 'filter_onlytype',
224
+ 'empty' => 'filter_empty',
225
+ 'not-empty' => 'filter_notempty',
226
+ 'has-text' => 'filter_hastext',
227
+ 'no-text' => 'filter_notext',
228
+ 'lang' => 'filter_lang',
229
+ 'contains' => 'filter_contains',
230
+ 'has' => 'filter_has',
231
+ 'not' => 'filter_not',
232
+ 'element' => 'filter_element',
233
+ 'text' => 'filter_text',
234
+ 'comment' => 'filter_comment',
235
+ 'checked' => 'filter_checked',
236
+ 'selected' => 'filter_selected',
237
+ );
238
+
239
+ /**
240
+ * Class constructor
241
+ * @param string|array $tag Name of the tag, or array with taginfo (array(
242
+ * 'tag_name' => 'tag',
243
+ * 'self_close' => false,
244
+ * 'attributes' => array('attribute' => 'value')))
245
+ * @param DomNode $parent Parent of node, null if none
246
+ */
247
+ function __construct($tag, $parent) {
248
+ $this->parent = $parent;
249
+
250
+ if (is_string($tag)) {
251
+ $this->tag = $tag;
252
+ } else {
253
+ $this->tag = $tag['tag_name'];
254
+ $this->self_close = $tag['self_close'];
255
+ $this->attributes = $tag['attributes'];
256
+ }
257
+ }
258
+
259
+ #php4 PHP4 class constructor compatibility
260
+ #function DomNode($tag, $parent) {return $this->__construct($tag, $parent);}
261
+ #php4e
262
+
263
+ /**
264
+ * Class destructor
265
+ * @access private
266
+ */
267
+ function __destruct() {
268
+ $this->delete();
269
+ }
270
+
271
+ /**
272
+ * Class toString, outputs {@link $tag}
273
+ * @return string
274
+ * @access private
275
+ */
276
+ function __toString() {
277
+ return (($this->tag === '~root~') ? $this->toString(true, true, 1) : $this->tag);
278
+ }
279
+
280
+ /**
281
+ * Class magic get method, outputs {@link getAttribute()}
282
+ * @return string
283
+ * @access private
284
+ */
285
+ function __get($attribute) {
286
+ return $this->getAttribute($attribute);
287
+ }
288
+
289
+ /**
290
+ * Class magic set method, performs {@link setAttribute()}
291
+ * @access private
292
+ */
293
+ function __set($attribute, $value) {
294
+ $this->setAttribute($attribute, $value);
295
+ }
296
+
297
+ /**
298
+ * Class magic isset method, returns {@link hasAttribute()}
299
+ * @return bool
300
+ * @access private
301
+ */
302
+ function __isset($attribute) {
303
+ return $this->hasAttribute($attribute);
304
+ }
305
+
306
+ /**
307
+ * Class magic unset method, performs {@link deleteAttribute()}
308
+ * @access private
309
+ */
310
+ function __unset($attribute) {
311
+ return $this->deleteAttribute($attribute);
312
+ }
313
+
314
+ /**
315
+ * Class magic invoke method, performs {@link query()}.
316
+ * @param string $query The css query to run on the nodes.
317
+ * @return pQuery
318
+ */
319
+ function __invoke($query = '*') {
320
+ return $this->query($query);
321
+ }
322
+
323
+ /**
324
+ * Returns place in document
325
+ * @return string
326
+ */
327
+ function dumpLocation() {
328
+ return (($this->parent) ? (($p = $this->parent->dumpLocation()) ? $p.' > ' : '').$this->tag.'('.$this->typeIndex().')' : '');
329
+ }
330
+
331
+ /**
332
+ * Returns all the attributes and their values
333
+ * @return string
334
+ * @access private
335
+ */
336
+ protected function toString_attributes() {
337
+ $s = '';
338
+ foreach($this->attributes as $a => $v) {
339
+ $s .= ' '.$a;
340
+ if ((!$this->attribute_shorttag) || ($v !== $a)) {
341
+ $quote = (strpos($v, '"') === false) ? '"' : "'";
342
+ $s .= '='.$quote.$v.$quote;
343
+ }
344
+ }
345
+ return $s;
346
+ }
347
+
348
+ /**
349
+ * Returns the content of the node (child tags and text)
350
+ * @param bool $attributes Print attributes of child tags
351
+ * @param bool|int $recursive How many sublevels of childtags to print. True for all.
352
+ * @param bool $content_only Only print text, false will print tags too.
353
+ * @return string
354
+ * @access private
355
+ */
356
+ protected function toString_content($attributes = true, $recursive = true, $content_only = false) {
357
+ $s = '';
358
+ foreach($this->children as $c) {
359
+ $s .= $c->toString($attributes, $recursive, $content_only);
360
+ }
361
+ return $s;
362
+ }
363
+
364
+ /**
365
+ * Returns the node as string
366
+ * @param bool $attributes Print attributes (of child tags)
367
+ * @param bool|int $recursive How many sub-levels of child tags to print. True for all.
368
+ * @param bool|int $content_only Only print text, false will print tags too.
369
+ * @return string
370
+ */
371
+ function toString($attributes = true, $recursive = true, $content_only = false) {
372
+ if ($content_only) {
373
+ if (is_int($content_only)) {
374
+ --$content_only;
375
+ }
376
+ return $this->toString_content($attributes, $recursive, $content_only);
377
+ }
378
+
379
+ $s = '<'.$this->tag;
380
+ if ($attributes) {
381
+ $s .= $this->toString_attributes();
382
+ }
383
+ if ($this->self_close) {
384
+ $s .= $this->self_close_str.'>';
385
+ } else {
386
+ $s .= '>';
387
+ if($recursive) {
388
+ $s .= $this->toString_content($attributes);
389
+ }
390
+ $s .= '</'.$this->tag.'>';
391
+ }
392
+ return $s;
393
+ }
394
+
395
+ /**
396
+ * Similar to JavaScript outerText, will return full (html formatted) node
397
+ * @return string
398
+ */
399
+ function getOuterText() {
400
+ return html_entity_decode($this->toString(), ENT_QUOTES);
401
+ }
402
+
403
+ /**
404
+ * Similar to JavaScript outerText, will replace node (and child nodes) with new text
405
+ * @param string $text
406
+ * @param HtmlParserBase $parser Null to auto create instance
407
+ * @return bool|array True on succeed, array with errors on failure
408
+ */
409
+ function setOuterText($text, $parser = null) {
410
+ if (trim($text)) {
411
+ $index = $this->index();
412
+ if ($parser === null) {
413
+ $parser = new $this->parserClass();
414
+ }
415
+ $parser->setDoc($text);
416
+ $parser->parse_all();
417
+ $parser->root->moveChildren($this->parent, $index);
418
+ }
419
+ $this->delete();
420
+ return (($parser && $parser->errors) ? $parser->errors : true);
421
+ }
422
+
423
+ /**
424
+ * Return html code of node
425
+ * @internal jquery (naming) compatibility
426
+ * @param string|null $value The value to set or null to get the value.
427
+ * @see toString()
428
+ * @return string
429
+ */
430
+ function html($value = null) {
431
+ if ($value !== null) {
432
+ $this->setInnerText($value);
433
+ }
434
+ return $this->getInnerText();
435
+ }
436
+
437
+ /**
438
+ * Similar to JavaScript innerText, will return (html formatted) content
439
+ * @return string
440
+ */
441
+ function getInnerText() {
442
+ return html_entity_decode($this->toString(true, true, 1), ENT_QUOTES);
443
+ }
444
+
445
+ /**
446
+ * Similar to JavaScript innerText, will replace child nodes with new text
447
+ * @param string $text
448
+ * @param HtmlParserBase $parser Null to auto create instance
449
+ * @return bool|array True on succeed, array with errors on failure
450
+ */
451
+ function setInnerText($text, $parser = null) {
452
+ $this->clear();
453
+ if (trim($text)) {
454
+ if ($parser === null) {
455
+ $parser = new $this->parserClass();
456
+ }
457
+ $parser->root =& $this;
458
+ $parser->setDoc($text);
459
+ $parser->parse_all();
460
+ }
461
+ return (($parser && $parser->errors) ? $parser->errors : true);
462
+ }
463
+
464
+ /**
465
+ * Similar to JavaScript plainText, will return text in node (and subnodes)
466
+ * @return string
467
+ */
468
+ function getPlainText() {
469
+ return preg_replace('`\s+`', ' ', html_entity_decode($this->toString(true, true, true), ENT_QUOTES));
470
+ }
471
+
472
+ /**
473
+ * Return plaintext taking document encoding into account
474
+ * @return string
475
+ */
476
+ function getPlainTextUTF8() {
477
+ $txt = $this->toString(true, true, true);
478
+ $enc = $this->getEncoding();
479
+ if ($enc !== false) {
480
+ $txt = mb_convert_encoding($txt, 'UTF-8', $enc);
481
+ }
482
+ return preg_replace('`\s+`', ' ', html_entity_decode($txt, ENT_QUOTES, 'UTF-8'));
483
+ }
484
+
485
+ /**
486
+ * Similar to JavaScript plainText, will replace child nodes with new text (literal)
487
+ * @param string $text
488
+ */
489
+ function setPlainText($text) {
490
+ $this->clear();
491
+ if (trim($text)) {
492
+ $this->addText(htmlentities($text, ENT_QUOTES));
493
+ }
494
+ }
495
+
496
+ /**
497
+ * Delete node from parent and clear node
498
+ */
499
+ function delete() {
500
+ if (($p = $this->parent) !== null) {
501
+ $this->parent = null;
502
+ $p->deleteChild($this);
503
+ } else {
504
+ $this->clear();
505
+ }
506
+ }
507
+
508
+ /**
509
+ * Detach node from parent
510
+ * @param bool $move_children_up Only detach current node and replace it with child nodes
511
+ * @internal jquery (naming) compatibility
512
+ * @see delete()
513
+ */
514
+ function detach($move_children_up = false) {
515
+ if (($p = $this->parent) !== null) {
516
+ $index = $this->index();
517
+ $this->parent = null;
518
+
519
+ if ($move_children_up) {
520
+ $this->moveChildren($p, $index);
521
+ }
522
+ $p->deleteChild($this, true);
523
+ }
524
+ }
525
+
526
+ /**
527
+ * Deletes all child nodes from node
528
+ */
529
+ function clear() {
530
+ foreach($this->children as $c) {
531
+ $c->parent = null;
532
+ $c->delete();
533
+ }
534
+ $this->children = array();
535
+ }
536
+
537
+ /**
538
+ * Get top parent
539
+ * @return DomNode Root, null if node has no parent
540
+ */
541
+ function getRoot() {
542
+ $r = $this->parent;
543
+ $n = ($r === null) ? null : $r->parent;
544
+ while ($n !== null) {
545
+ $r = $n;
546
+ $n = $r->parent;
547
+ }
548
+
549
+ return $r;
550
+ }
551
+
552
+ /**
553
+ * Change parent
554
+ * @param null|DomNode $to New parent, null if none
555
+ * @param false|int $index Add child to parent if not present at index, false to not add, negative to count from end, null to append
556
+ */
557
+ #php4
558
+ #function changeParent($to, &$index) {
559
+ #php4e
560
+ #php5
561
+ function changeParent($to, &$index = null) {
562
+ #php5e
563
+ if ($this->parent !== null) {
564
+ $this->parent->deleteChild($this, true);
565
+ }
566
+ $this->parent = $to;
567
+ if ($index !== false) {
568
+ $new_index = $this->index();
569
+ if (!(is_int($new_index) && ($new_index >= 0))) {
570
+ $this->parent->addChild($this, $index);
571
+ }
572
+ }
573
+ }
574
+
575
+ /**
576
+ * Find out if node has (a certain) parent
577
+ * @param DomNode|string $tag Match against parent, string to match tag, object to fully match node, null to return if node has parent
578
+ * @param bool $recursive
579
+ * @return bool
580
+ */
581
+ function hasParent($tag = null, $recursive = false) {
582
+ if ($this->parent !== null) {
583
+ if ($tag === null) {
584
+ return true;
585
+ } elseif (is_string($tag)) {
586
+ return (($this->parent->tag === $tag) || ($recursive && $this->parent->hasParent($tag)));
587
+ } elseif (is_object($tag)) {
588
+ return (($this->parent === $tag) || ($recursive && $this->parent->hasParent($tag)));
589
+ }
590
+ }
591
+
592
+ return false;
593
+ }
594
+
595
+ /**
596
+ * Find out if node is parent of a certain tag
597
+ * @param DomNode|string $tag Match against parent, string to match tag, object to fully match node
598
+ * @param bool $recursive
599
+ * @return bool
600
+ * @see hasParent()
601
+ */
602
+ function isParent($tag, $recursive = false) {
603
+ return ($this->hasParent($tag, $recursive) === ($tag !== null));
604
+ }
605
+
606
+ /**
607
+ * Find out if node is text
608
+ * @return bool
609
+ */
610
+ function isText() {
611
+ return false;
612
+ }
613
+
614
+ /**
615
+ * Find out if node is comment
616
+ * @return bool
617
+ */
618
+ function isComment() {
619
+ return false;
620
+ }
621
+
622
+ /**
623
+ * Find out if node is text or comment node
624
+ * @return bool
625
+ */
626
+ function isTextOrComment() {
627
+ return false;
628
+ }
629
+
630
+ /**
631
+ * Move node to other node
632
+ * @param DomNode $to New parent, null if none
633
+ * @param int $new_index Add child to parent at index if not present, null to not add, negative to count from end
634
+ * @internal Performs {@link changeParent()}
635
+ */
636
+ #php4
637
+ #function move($to, &$new_index) {
638
+ #php4e
639
+ #php5
640
+ function move($to, &$new_index = -1) {
641
+ #php5e
642
+ $this->changeParent($to, $new_index);
643
+ }
644
+
645
+ /**
646
+ * Move child nodes to other node
647
+ * @param DomNode $to New parent, null if none
648
+ * @param int $new_index Add child to new node at index if not present, null to not add, negative to count from end
649
+ * @param int $start Index from child node where to start wrapping, 0 for first element
650
+ * @param int $end Index from child node where to end wrapping, -1 for last element
651
+ */
652
+ #php4
653
+ #function moveChildren($to, &$new_index, $start = 0, $end = -1) {
654
+ #php4e
655
+ #php5
656
+ function moveChildren($to, &$new_index = -1, $start = 0, $end = -1) {
657
+ #php5e
658
+ if ($end < 0) {
659
+ $end += count($this->children);
660
+ }
661
+ for ($i = $start; $i <= $end; $i++) {
662
+ $this->children[$start]->changeParent($to, $new_index);
663
+ }
664
+ }
665
+
666
+ /**
667
+ * Index of node in parent
668
+ * @param bool $count_all True to count all tags, false to ignore text and comments
669
+ * @return int -1 if not found
670
+ */
671
+ function index($count_all = true) {
672
+ if (!$this->parent) {
673
+ return -1;
674
+ } elseif ($count_all) {
675
+ return $this->parent->findChild($this);
676
+ } else{
677
+ $index = -1;
678
+ //foreach($this->parent->children as &$c) {
679
+ // if (!$c->isTextOrComment()) {
680
+ // ++$index;
681
+ // }
682
+ // if ($c === $this) {
683
+ // return $index;
684
+ // }
685
+ //}
686
+
687
+ foreach(array_keys($this->parent->children) as $k) {
688
+ if (!$this->parent->children[$k]->isTextOrComment()) {
689
+ ++$index;
690
+ }
691
+ if ($this->parent->children[$k] === $this) {
692
+ return $index;
693
+ }
694
+ }
695
+ return -1;
696
+ }
697
+ }
698
+
699
+ /**
700
+ * Change index of node in parent
701
+ * @param int $index New index
702
+ */
703
+ function setIndex($index) {
704
+ if ($this->parent) {
705
+ if ($index > $this->index()) {
706
+ --$index;
707
+ }
708
+ $this->delete();
709
+ $this->parent->addChild($this, $index);
710
+ }
711
+ }
712
+
713
+ /**
714
+ * Index of all similar nodes in parent
715
+ * @return int -1 if not found
716
+ */
717
+ function typeIndex() {
718
+ if (!$this->parent) {
719
+ return -1;
720
+ } else {
721
+ $index = -1;
722
+ //foreach($this->parent->children as &$c) {
723
+ // if (strcasecmp($this->tag, $c->tag) === 0) {
724
+ // ++$index;
725
+ // }
726
+ // if ($c === $this) {
727
+ // return $index;
728
+ // }
729
+ //}
730
+
731
+ foreach(array_keys($this->parent->children) as $k) {
732
+ if (strcasecmp($this->tag, $this->parent->children[$k]->tag) === 0) {
733
+ ++$index;
734
+ }
735
+ if ($this->parent->children[$k] === $this) {
736
+ return $index;
737
+ }
738
+ }
739
+ return -1;
740
+ }
741
+ }
742
+
743
+ /**
744
+ * Calculate indent of node (number of parent tags - 1)
745
+ * @return int
746
+ */
747
+ function indent() {
748
+ return (($this->parent) ? $this->parent->indent() + 1 : -1);
749
+ }
750
+
751
+ /**
752
+ * Get sibling node
753
+ * @param int $offset Offset from current node
754
+ * @return DomNode Null if not found
755
+ */
756
+ function getSibling($offset = 1) {
757
+ $index = $this->index() + $offset;
758
+ if (($index >= 0) && ($index < $this->parent->childCount())) {
759
+ return $this->parent->getChild($index);
760
+ } else {
761
+ return null;
762
+ }
763
+ }
764
+
765
+ /**
766
+ * Get node next to current
767
+ * @param bool $skip_text_comments
768
+ * @return DomNode Null if not found
769
+ * @see getSibling()
770
+ * @see getPreviousSibling()
771
+ */
772
+ function getNextSibling($skip_text_comments = true) {
773
+ $offset = 1;
774
+ while (($n = $this->getSibling($offset)) !== null) {
775
+ if ($skip_text_comments && ($n->tag[0] === '~')) {
776
+ ++$offset;
777
+ } else {
778
+ break;
779
+ }
780
+ }
781
+
782
+ return $n;
783
+ }
784
+
785
+ /**
786
+ * Get node previous to current
787
+ * @param bool $skip_text_comments
788
+ * @return DomNode Null if not found
789
+ * @see getSibling()
790
+ * @see getNextSibling()
791
+ */
792
+ function getPreviousSibling($skip_text_comments = true) {
793
+ $offset = -1;
794
+ while (($n = $this->getSibling($offset)) !== null) {
795
+ if ($skip_text_comments && ($n->tag[0] === '~')) {
796
+ --$offset;
797
+ } else {
798
+ break;
799
+ }
800
+ }
801
+
802
+ return $n;
803
+ }
804
+
805
+ /**
806
+ * Get namespace of node
807
+ * @return string
808
+ * @see setNamespace()
809
+ */
810
+ function getNamespace() {
811
+ if ($this->tag_ns === null) {
812
+ $a = explode(':', $this->tag, 2);
813
+ if (empty($a[1])) {
814
+ $this->tag_ns = array('', $a[0]);
815
+ } else {
816
+ $this->tag_ns = array($a[0], $a[1]);
817
+ }
818
+ }
819
+
820
+ return $this->tag_ns[0];
821
+ }
822
+
823
+ /**
824
+ * Set namespace of node
825
+ * @param string $ns
826
+ * @see getNamespace()
827
+ */
828
+ function setNamespace($ns) {
829
+ if ($this->getNamespace() !== $ns) {
830
+ $this->tag_ns[0] = $ns;
831
+ $this->tag = $ns.':'.$this->tag_ns[1];
832
+ }
833
+ }
834
+
835
+ /**
836
+ * Get tagname of node (without namespace)
837
+ * @return string
838
+ * @see setTag()
839
+ */
840
+ function getTag() {
841
+ if ($this->tag_ns === null) {
842
+ $this->getNamespace();
843
+ }
844
+
845
+ return $this->tag_ns[1];
846
+ }
847
+
848
+ /**
849
+ * Set tag (with or without namespace)
850
+ * @param string $tag
851
+ * @param bool $with_ns Does $tag include namespace?
852
+ * @see getTag()
853
+ */
854
+ function setTag($tag, $with_ns = false) {
855
+ $with_ns = $with_ns || (strpos($tag, ':') !== false);
856
+ if ($with_ns) {
857
+ $this->tag = $tag;
858
+ $this->tag_ns = null;
859
+ } elseif ($this->getTag() !== $tag) {
860
+ $this->tag_ns[1] = $tag;
861
+ $this->tag = (($this->tag_ns[0]) ? $this->tag_ns[0].':' : '').$tag;
862
+ }
863
+ }
864
+
865
+ /**
866
+ * Try to determine the encoding of the current tag
867
+ * @return string|bool False if encoding could not be found
868
+ */
869
+ function getEncoding() {
870
+ $root = $this->getRoot();
871
+ if ($root !== null) {
872
+ if ($enc = $root->select('meta[charset]', 0, true, true)) {
873
+ return $enc->getAttribute("charset");
874
+ } elseif ($enc = $root->select('"?xml"[encoding]', 0, true, true)) {
875
+ return $enc->getAttribute("encoding");
876
+ } elseif ($enc = $root->select('meta[content*="charset="]', 0, true, true)) {
877
+ $enc = $enc->getAttribute("content");
878
+ return substr($enc, strpos($enc, "charset=")+8);
879
+ }
880
+ }
881
+
882
+ return false;
883
+ }
884
+
885
+ /**
886
+ * Number of children in node
887
+ * @param bool $ignore_text_comments Ignore text/comments with calculation
888
+ * @return int
889
+ */
890
+ function childCount($ignore_text_comments = false) {
891
+ if (!$ignore_text_comments) {
892
+ return count($this->children);
893
+ } else{
894
+ $count = 0;
895
+ //foreach($this->children as &$c) {
896
+ // if (!$c->isTextOrComment()) {
897
+ // ++$count;
898
+ // }
899
+ //}
900
+
901
+ foreach(array_keys($this->children) as $k) {
902
+ if (!$this->children[$k]->isTextOrComment()) {
903
+ ++$count;
904
+ }
905
+ }
906
+ return $count;
907
+ }
908
+ }
909
+
910
+ /**
911
+ * Find node in children
912
+ * @param DomNode $child
913
+ * @return int False if not found
914
+ */
915
+ function findChild($child) {
916
+ return array_search($child, $this->children, true);
917
+ }
918
+
919
+ /**
920
+ * Checks if node has another node as child
921
+ * @param DomNode $child
922
+ * @return bool
923
+ */
924
+ function hasChild($child) {
925
+ return ((bool) findChild($child));
926
+ }
927
+
928
+ /**
929
+ * Get childnode
930
+ * @param int|DomNode $child Index, negative to count from end
931
+ * @param bool $ignore_text_comments Ignore text/comments with index calculation
932
+ * @return DomNode
933
+ */
934
+ function &getChild($child, $ignore_text_comments = false) {
935
+ if (!is_int($child)) {
936
+ $child = $this->findChild($child);
937
+ } elseif ($child < 0) {
938
+ $child += $this->childCount($ignore_text_comments);
939
+ }
940
+
941
+ if ($ignore_text_comments) {
942
+ $count = 0;
943
+ $last = null;
944
+ //foreach($this->children as &$c) {
945
+ // if (!$c->isTextOrComment()) {
946
+ // if ($count++ === $child) {
947
+ // return $c;
948
+ // }
949
+ // $last = $c;
950
+ // }
951
+ //}
952
+
953
+ foreach(array_keys($this->children) as $k) {
954
+ if (!$this->children[$k]->isTextOrComment()) {
955
+ if ($count++ === $child) {
956
+ return $this->children[$k];
957
+ }
958
+ $last = $this->children[$k];
959
+ }
960
+ }
961
+ return (($child > $count) ? $last : null);
962
+ } else {
963
+ return $this->children[$child];
964
+ }
965
+ }
966
+
967
+ /**
968
+ * Add child node
969
+ * @param string|DomNode $tag Tag name or object
970
+ * @param int $offset Position to insert node, negative to count from end, null to append
971
+ * @return DomNode Added node
972
+ */
973
+ #php4
974
+ #function &addChild($tag, &$offset) {
975
+ #php4e
976
+ #php5
977
+ function &addChild($tag, &$offset = null) {
978
+ #php5e
979
+ if (is_array($tag)) {
980
+ $tag = new $this->childClass($tag, $this);
981
+ } elseif (is_string($tag)) {
982
+ $nodes = $this->createNodes($tag);
983
+ $tag = array_shift($nodes);
984
+
985
+ if ($tag && $tag->parent !== $this) {
986
+ $index = false;
987
+ $tag->changeParent($this, $index);
988
+ }
989
+ } elseif (is_object($tag) && $tag->parent !== $this) {
990
+ $index = false; //Needs to be passed by ref
991
+ $tag->changeParent($this, $index);
992
+ }
993
+
994
+ if (is_int($offset) && ($offset < count($this->children)) && ($offset !== -1)) {
995
+ if ($offset < 0) {
996
+ $offset += count($this->children);
997
+ }
998
+ array_splice($this->children, $offset++, 0, array(&$tag));
999
+ } else {
1000
+ $this->children[] =& $tag;
1001
+ }
1002
+
1003
+ return $tag;
1004
+ }
1005
+
1006
+ /**
1007
+ * First child node
1008
+ * @param bool $ignore_text_comments Ignore text/comments with index calculation
1009
+ * @return DomNode
1010
+ */
1011
+ function &firstChild($ignore_text_comments = false) {
1012
+ return $this->getChild(0, $ignore_text_comments);
1013
+ }
1014
+
1015
+ /**
1016
+ * Last child node
1017
+ * @param bool $ignore_text_comments Ignore text/comments with index calculation
1018
+ * @return DomNode
1019
+ */
1020
+ function &lastChild($ignore_text_comments = false) {
1021
+ return $this->getChild(-1, $ignore_text_comments);
1022
+ }
1023
+
1024
+ /**
1025
+ * Insert childnode
1026
+ * @param string|DomNode $tag Tagname or object
1027
+ * @param int $offset Position to insert node, negative to count from end, null to append
1028
+ * @return DomNode Added node
1029
+ * @see addChild();
1030
+ */
1031
+ function &insertChild($tag, $index) {
1032
+ return $this->addChild($tag, $index);
1033
+ }
1034
+
1035
+ /**
1036
+ * Add text node
1037
+ * @param string $text
1038
+ * @param int $offset Position to insert node, negative to count from end, null to append
1039
+ * @return DomNode Added node
1040
+ * @see addChild();
1041
+ */
1042
+ #php4
1043
+ #function &addText($text, &$offset) {
1044
+ #php4e
1045
+ #php5
1046
+ function &addText($text, &$offset = null) {
1047
+ #php5e
1048
+ return $this->addChild(new $this->childClass_Text($this, $text), $offset);
1049
+ }
1050
+
1051
+ /**
1052
+ * Add comment node
1053
+ * @param string $text
1054
+ * @param int $offset Position to insert node, negative to count from end, null to append
1055
+ * @return DomNode Added node
1056
+ * @see addChild();
1057
+ */
1058
+ #php4
1059
+ #function &addComment($text, &$offset) {
1060
+ #php4e
1061
+ #php5
1062
+ function &addComment($text, &$offset = null) {
1063
+ #php5e
1064
+ return $this->addChild(new $this->childClass_Comment($this, $text), $offset);
1065
+ }
1066
+
1067
+ /**
1068
+ * Add conditional node
1069
+ * @param string $condition
1070
+ * @param bool True for <!--[if, false for <![if
1071
+ * @param int $offset Position to insert node, negative to count from end, null to append
1072
+ * @return DomNode Added node
1073
+ * @see addChild();
1074
+ */
1075
+ #php4
1076
+ #function &addConditional($condition, $hidden = true, &$offset) {
1077
+ #php4e
1078
+ #php5
1079
+ function &addConditional($condition, $hidden = true, &$offset = null) {
1080
+ #php5e
1081
+ return $this->addChild(new $this->childClass_Conditional($this, $condition, $hidden), $offset);
1082
+ }
1083
+
1084
+ /**
1085
+ * Add CDATA node
1086
+ * @param string $text
1087
+ * @param int $offset Position to insert node, negative to count from end, null to append
1088
+ * @return DomNode Added node
1089
+ * @see addChild();
1090
+ */
1091
+ #php4
1092
+ #function &addCDATA($text, &$offset) {
1093
+ #php4e
1094
+ #php5
1095
+ function &addCDATA($text, &$offset = null) {
1096
+ #php5e
1097
+ return $this->addChild(new $this->childClass_CDATA($this, $text), $offset);
1098
+ }
1099
+
1100
+ /**
1101
+ * Add doctype node
1102
+ * @param string $dtd
1103
+ * @param int $offset Position to insert node, negative to count from end, null to append
1104
+ * @return DomNode Added node
1105
+ * @see addChild();
1106
+ */
1107
+ #php4
1108
+ #function &addDoctype($dtd, &$offset) {
1109
+ #php4e
1110
+ #php5
1111
+ function &addDoctype($dtd, &$offset = null) {
1112
+ #php5e
1113
+ return $this->addChild(new $this->childClass_Doctype($this, $dtd), $offset);
1114
+ }
1115
+
1116
+ /**
1117
+ * Add xml node
1118
+ * @param string $tag Tag name after "?", e.g. "php" or "xml"
1119
+ * @param string $text
1120
+ * @param array $attributes Array of attributes (array('attribute' => 'value'))
1121
+ * @param int $offset Position to insert node, negative to count from end, null to append
1122
+ * @return DomNode Added node
1123
+ * @see addChild();
1124
+ */
1125
+ #php4
1126
+ #function &addXML($tag = 'xml', $text = '', $attributes = array(), &$offset) {
1127
+ #php4e
1128
+ #php5
1129
+ function &addXML($tag = 'xml', $text = '', $attributes = array(), &$offset = null) {
1130
+ #php5e
1131
+ return $this->addChild(new $this->childClass_XML($this, $tag, $text, $attributes), $offset);
1132
+ }
1133
+
1134
+ /**
1135
+ * Add ASP node
1136
+ * @param string $tag Tag name after "%"
1137
+ * @param string $text
1138
+ * @param array $attributes Array of attributes (array('attribute' => 'value'))
1139
+ * @param int $offset Position to insert node, negative to count from end, null to append
1140
+ * @return DomNode Added node
1141
+ * @see addChild();
1142
+ */
1143
+ #php4
1144
+ #function &addASP($tag = '', $text = '', $attributes = array(), &$offset) {
1145
+ #php4e
1146
+ #php5
1147
+ function &addASP($tag = '', $text = '', $attributes = array(), &$offset = null) {
1148
+ #php5e
1149
+ return $this->addChild(new $this->childClass_ASP($this, $tag, $text, $attributes), $offset);
1150
+ }
1151
+
1152
+ /**
1153
+ * Delete a child node
1154
+ * @param int|DomNode $child Child(index) to delete, negative to count from end
1155
+ * @param bool $soft_delete False to call {@link delete()} from child
1156
+ */
1157
+ function deleteChild($child, $soft_delete = false) {
1158
+ if (is_object($child)) {
1159
+ $child = $this->findChild($child);
1160
+ } elseif ($child < 0) {
1161
+ $child += count($this->children);
1162
+ }
1163
+
1164
+ if (!$soft_delete) {
1165
+ $this->children[$child]->delete();
1166
+ }
1167
+ unset($this->children[$child]);
1168
+
1169
+ //Rebuild indices
1170
+ $tmp = array();
1171
+
1172
+ //foreach($this->children as &$c) {
1173
+ // $tmp[] =& $c;
1174
+ //}
1175
+ foreach(array_keys($this->children) as $k) {
1176
+ $tmp[] =& $this->children[$k];
1177
+ }
1178
+ $this->children = $tmp;
1179
+ }
1180
+
1181
+ /**
1182
+ * Wrap node
1183
+ * @param string|DomNode $node Wrapping node, string to create new element node
1184
+ * @param int $wrap_index Index to insert current node in wrapping node, -1 to append
1185
+ * @param int $node_index Index to insert wrapping node, null to keep at same position
1186
+ * @return DomNode Wrapping node
1187
+ */
1188
+ function wrap($node, $wrap_index = -1, $node_index = null) {
1189
+ if ($node_index === null) {
1190
+ $node_index = $this->index();
1191
+ }
1192
+
1193
+ if (!is_object($node)) {
1194
+ $node = $this->parent->addChild($node, $node_index);
1195
+ } elseif ($node->parent !== $this->parent) {
1196
+ $node->changeParent($this->parent, $node_index);
1197
+ }
1198
+
1199
+ $this->changeParent($node, $wrap_index);
1200
+ return $node;
1201
+ }
1202
+
1203
+ /**
1204
+ * Wrap child nodes
1205
+ * @param string|DomNode $node Wrapping node, string to create new element node
1206
+ * @param int $start Index from child node where to start wrapping, 0 for first element
1207
+ * @param int $end Index from child node where to end wrapping, -1 for last element
1208
+ * @param int $wrap_index Index to insert in wrapping node, -1 to append
1209
+ * @param int $node_index Index to insert current node, null to keep at same position
1210
+ * @return DomNode Wrapping node
1211
+ */
1212
+ function wrapInner($node, $start = 0, $end = -1, $wrap_index = -1, $node_index = null) {
1213
+ if ($end < 0) {
1214
+ $end += count($this->children);
1215
+ }
1216
+ if ($node_index === null) {
1217
+ $node_index = $end + 1;
1218
+ }
1219
+
1220
+ if (!is_object($node)) {
1221
+ $node = $this->addChild($node, $node_index);
1222
+ } elseif ($node->parent !== $this) {
1223
+ $node->changeParent($this->parent, $node_index);
1224
+ }
1225
+
1226
+ $this->moveChildren($node, $wrap_index, $start, $end);
1227
+ return $node;
1228
+ }
1229
+
1230
+ /**
1231
+ * Number of attributes
1232
+ * @return int
1233
+ */
1234
+ function attributeCount() {
1235
+ return count($this->attributes);
1236
+ }
1237
+
1238
+ /**
1239
+ * Find attribute using namespace, name or both
1240
+ * @param string|int $attr Negative int to count from end
1241
+ * @param string $compare "namespace", "name" or "total"
1242
+ * @param bool $case_sensitive Compare with case sensitivity
1243
+ * @return array array('ns', 'attr', 'ns:attr', index)
1244
+ * @access private
1245
+ */
1246
+ protected function findAttribute($attr, $compare = 'total', $case_sensitive = false) {
1247
+ if (is_int($attr)) {
1248
+ if ($attr < 0) {
1249
+ $attr += count($this->attributes);
1250
+ }
1251
+ $keys = array_keys($this->attributes);
1252
+ return $this->findAttribute($keys[$attr], 'total', true);
1253
+ } else if ($compare === 'total') {
1254
+ $b = explode(':', $attr, 2);
1255
+ if ($case_sensitive) {
1256
+ $t =& $this->attributes;
1257
+ } else {
1258
+ $t = array_change_key_case($this->attributes);
1259
+ $attr = strtolower($attr);
1260
+ }
1261
+
1262
+ if (isset($t[$attr])) {
1263
+ $index = 0;
1264
+ foreach($this->attributes as $a => $v) {
1265
+ if (($v === $t[$attr]) && (strcasecmp($a, $attr) === 0)) {
1266
+ $attr = $a;
1267
+ $b = explode(':', $attr, 2);
1268
+ break;
1269
+ }
1270
+ ++$index;
1271
+ }
1272
+
1273
+ if (empty($b[1])) {
1274
+ return array(array('', $b[0], $attr, $index));
1275
+ } else {
1276
+ return array(array($b[0], $b[1], $attr, $index));
1277
+ }
1278
+ } else {
1279
+ return false;
1280
+ }
1281
+ } else {
1282
+ if ($this->attributes_ns === null) {
1283
+ $index = 0;
1284
+ foreach($this->attributes as $a => $v) {
1285
+ $b = explode(':', $a, 2);
1286
+ if (empty($b[1])) {
1287
+ $this->attributes_ns[$b[0]][] = array('', $b[0], $a, $index);
1288
+ } else {
1289
+ $this->attributes_ns[$b[1]][] = array($b[0], $b[1], $a, $index);
1290
+ }
1291
+ ++$index;
1292
+ }
1293
+ }
1294
+
1295
+ if ($case_sensitive) {
1296
+ $t =& $this->attributes_ns;
1297
+ } else {
1298
+ $t = array_change_key_case($this->attributes_ns);
1299
+ $attr = strtolower($attr);
1300
+ }
1301
+
1302
+ if ($compare === 'namespace') {
1303
+ $res = array();
1304
+ foreach($t as $ar) {
1305
+ foreach($ar as $a) {
1306
+ if ($a[0] === $attr) {
1307
+ $res[] = $a;
1308
+ }
1309
+ }
1310
+ }
1311
+ return $res;
1312
+ } elseif ($compare === 'name') {
1313
+ return ((isset($t[$attr])) ? $t[$attr] : false);
1314
+ } else {
1315
+ trigger_error('Unknown comparison mode');
1316
+ }
1317
+ }
1318
+ }
1319
+
1320
+ /**
1321
+ * Checks if node has attribute
1322
+ * @param string|int$attr Negative int to count from end
1323
+ * @param string $compare Find node using "namespace", "name" or "total"
1324
+ * @param bool $case_sensitive Compare with case sensitivity
1325
+ * @return bool
1326
+ */
1327
+ function hasAttribute($attr, $compare = 'total', $case_sensitive = false) {
1328
+ return ((bool) $this->findAttribute($attr, $compare, $case_sensitive));
1329
+ }
1330
+
1331
+ /**
1332
+ * Gets namespace of attribute(s)
1333
+ * @param string|int $attr Negative int to count from end
1334
+ * @param string $compare Find node using "namespace", "name" or "total"
1335
+ * @param bool $case_sensitive Compare with case sensitivity
1336
+ * @return string|array False if not found
1337
+ */
1338
+ function getAttributeNS($attr, $compare = 'name', $case_sensitive = false) {
1339
+ $f = $this->findAttribute($attr, $compare, $case_sensitive);
1340
+ if (is_array($f) && $f) {
1341
+ if (count($f) === 1) {
1342
+ return $this->attributes[$f[0][0]];
1343
+ } else {
1344
+ $res = array();
1345
+ foreach($f as $a) {
1346
+ $res[] = $a[0];
1347
+ }
1348
+ return $res;
1349
+ }
1350
+ } else {
1351
+ return false;
1352
+ }
1353
+ }
1354
+
1355
+ /**
1356
+ * Sets namespace of attribute(s)
1357
+ * @param string|int $attr Negative int to count from end
1358
+ * @param string $namespace
1359
+ * @param string $compare Find node using "namespace", "name" or "total"
1360
+ * @param bool $case_sensitive Compare with case sensitivity
1361
+ * @return bool
1362
+ */
1363
+ function setAttributeNS($attr, $namespace, $compare = 'name', $case_sensitive = false) {
1364
+ $f = $this->findAttribute($attr, $compare, $case_sensitive);
1365
+ if (is_array($f) && $f) {
1366
+ if ($namespace) {
1367
+ $namespace .= ':';
1368
+ }
1369
+ foreach($f as $a) {
1370
+ $val = $this->attributes[$a[2]];
1371
+ unset($this->attributes[$a[2]]);
1372
+ $this->attributes[$namespace.$a[1]] = $val;
1373
+ }
1374
+ $this->attributes_ns = null;
1375
+ return true;
1376
+ } else {
1377
+ return false;
1378
+ }
1379
+ }
1380
+
1381
+ /**
1382
+ * Gets value(s) of attribute(s)
1383
+ * @param string|int $attr Negative int to count from end
1384
+ * @param string $compare Find node using "namespace", "name" or "total"
1385
+ * @param bool $case_sensitive Compare with case sensitivity
1386
+ * @return string|array
1387
+ */
1388
+ function getAttribute($attr, $compare = 'total', $case_sensitive = false) {
1389
+ $f = $this->findAttribute($attr, $compare, $case_sensitive);
1390
+ if (is_array($f) && $f){
1391
+ if (count($f) === 1) {
1392
+ return $this->attributes[$f[0][2]];
1393
+ } else {
1394
+ $res = array();
1395
+ foreach($f as $a) {
1396
+ $res[] = $this->attributes[$a[2]];
1397
+ }
1398
+ return $res;
1399
+ }
1400
+ } else {
1401
+ return null;
1402
+ }
1403
+ }
1404
+
1405
+ /**
1406
+ * Sets value(s) of attribute(s)
1407
+ * @param string|int $attr Negative int to count from end
1408
+ * @param string $compare Find node using "namespace", "name" or "total"
1409
+ * @param bool $case_sensitive Compare with case sensitivity
1410
+ */
1411
+ function setAttribute($attr, $val, $compare = 'total', $case_sensitive = false) {
1412
+ if ($val === null) {
1413
+ return $this->deleteAttribute($attr, $compare, $case_sensitive);
1414
+ }
1415
+
1416
+ $f = $this->findAttribute($attr, $compare, $case_sensitive);
1417
+ if (is_array($f) && $f) {
1418
+ foreach($f as $a) {
1419
+ $this->attributes[$a[2]] = (string) $val;
1420
+ }
1421
+ } else {
1422
+ $this->attributes[$attr] = (string) $val;
1423
+ }
1424
+ }
1425
+
1426
+ /**
1427
+ * Add new attribute
1428
+ * @param string $attr
1429
+ * @param string $val
1430
+ */
1431
+ function addAttribute($attr, $val) {
1432
+ $this->setAttribute($attr, $val, 'total', true);
1433
+ }
1434
+
1435
+ /**
1436
+ * Delete attribute(s)
1437
+ * @param string|int $attr Negative int to count from end
1438
+ * @param string $compare Find node using "namespace", "name" or "total"
1439
+ * @param bool $case_sensitive Compare with case sensitivity
1440
+ */
1441
+ function deleteAttribute($attr, $compare = 'total', $case_sensitive = false) {
1442
+ $f = $this->findAttribute($attr, $compare, $case_sensitive);
1443
+ if (is_array($f) && $f) {
1444
+ foreach($f as $a) {
1445
+ unset($this->attributes[$a[2]]);
1446
+ if ($this->attributes_ns !== null) {
1447
+ unset($this->attributes_ns[$a[1]]);
1448
+ }
1449
+ }
1450
+ }
1451
+ }
1452
+
1453
+ /**
1454
+ * Determine if node has a certain class
1455
+ * @param string $className
1456
+ * @return bool
1457
+ */
1458
+ function hasClass($className) {
1459
+ return ($className && preg_match('`\b'.preg_quote($className).'\b`si', $this->class));
1460
+ }
1461
+
1462
+ /**
1463
+ * Add new class(es)
1464
+ * @param string|array $className
1465
+ */
1466
+ function addClass($className) {
1467
+ if (!is_array($className)) {
1468
+ $className = array($className);
1469
+ }
1470
+ $class = $this->class;
1471
+ foreach ($className as $c) {
1472
+ if (!(preg_match('`\b'.preg_quote($c).'\b`si', $class) > 0)) {
1473
+ $class .= ' '.$c;
1474
+ }
1475
+ }
1476
+ $this->class = trim($class);
1477
+ }
1478
+
1479
+ /**
1480
+ * Remove clas(ses)
1481
+ * @param string|array $className
1482
+ */
1483
+ function removeClass($className) {
1484
+ if (!is_array($className)) {
1485
+ $className = array($className);
1486
+ }
1487
+ $class = $this->class;
1488
+ foreach ($className as $c) {
1489
+ $class = preg_replace('`\b'.preg_quote($c).'\b`si', '', $class);
1490
+ }
1491
+ if ($class) {
1492
+ $this->class = $class;
1493
+ } else {
1494
+ unset($this->class);
1495
+ }
1496
+ }
1497
+
1498
+ /**
1499
+ * Finds children using a callback function
1500
+ * @param callable $callback Function($node) that returns a bool
1501
+ * @param bool|int $recursive Check recursively
1502
+ * @param bool $check_self Include this node in search?
1503
+ * @return array
1504
+ */
1505
+ function getChildrenByCallback($callback, $recursive = true, $check_self = false) {
1506
+ $count = $this->childCount();
1507
+ if ($check_self && $callback($this)) {
1508
+ $res = array($this);
1509
+ } else {
1510
+ $res = array();
1511
+ }
1512
+
1513
+ if ($count > 0) {
1514
+ if (is_int($recursive)) {
1515
+ $recursive = (($recursive > 1) ? $recursive - 1 : false);
1516
+ }
1517
+
1518
+ for ($i = 0; $i < $count; $i++) {
1519
+ if ($callback($this->children[$i])) {
1520
+ $res[] = $this->children[$i];
1521
+ }
1522
+ if ($recursive) {
1523
+ $res = array_merge($res, $this->children[$i]->getChildrenByCallback($callback, $recursive));
1524
+ }
1525
+ }
1526
+ }
1527
+
1528
+ return $res;
1529
+ }
1530
+
1531
+ /**
1532
+ * Finds children using the {$link match()} function
1533
+ * @param $conditions See {$link match()}
1534
+ * @param $custom_filters See {$link match()}
1535
+ * @param bool|int $recursive Check recursively
1536
+ * @param bool $check_self Include this node in search?
1537
+ * @return array
1538
+ */
1539
+ function getChildrenByMatch($conditions, $recursive = true, $check_self = false, $custom_filters = array()) {
1540
+ $count = $this->childCount();
1541
+ if ($check_self && $this->match($conditions, true, $custom_filters)) {
1542
+ $res = array($this);
1543
+ } else {
1544
+ $res = array();
1545
+ }
1546
+
1547
+ if ($count > 0) {
1548
+ if (is_int($recursive)) {
1549
+ $recursive = (($recursive > 1) ? $recursive - 1 : false);
1550
+ }
1551
+
1552
+ for ($i = 0; $i < $count; $i++) {
1553
+ if ($this->children[$i]->match($conditions, true, $custom_filters)) {
1554
+ $res[] = $this->children[$i];
1555
+ }
1556
+ if ($recursive) {
1557
+ $res = array_merge($res, $this->children[$i]->getChildrenByMatch($conditions, $recursive, false, $custom_filters));
1558
+ }
1559
+ }
1560
+ }
1561
+
1562
+ return $res;
1563
+ }
1564
+
1565
+ /**
1566
+ * Checks if tag matches certain conditions
1567
+ * @param array $tags array('tag1', 'tag2') or array(array(
1568
+ * 'tag' => 'tag1',
1569
+ * 'operator' => 'or'/'and',
1570
+ * 'compare' => 'total'/'namespace'/'name',
1571
+ * 'case_sensitive' => true))
1572
+ * @return bool
1573
+ * @internal Used by selector class
1574
+ * @see match()
1575
+ * @access private
1576
+ */
1577
+ protected function match_tags($tags) {
1578
+ $res = false;
1579
+
1580
+ foreach($tags as $tag => $match) {
1581
+ if (!is_array($match)) {
1582
+ $match = array(
1583
+ 'match' => $match,
1584
+ 'operator' => 'or',
1585
+ 'compare' => 'total',
1586
+ 'case_sensitive' => false
1587
+ );
1588
+ } else {
1589
+ if (is_int($tag)) {
1590
+ $tag = $match['tag'];
1591
+ }
1592
+ if (!isset($match['match'])) {
1593
+ $match['match'] = true;
1594
+ }
1595
+ if (!isset($match['operator'])) {
1596
+ $match['operator'] = 'or';
1597
+ }
1598
+ if (!isset($match['compare'])) {
1599
+ $match['compare'] = 'total';
1600
+ }
1601
+ if (!isset($match['case_sensitive'])) {
1602
+ $match['case_sensitive'] = false;
1603
+ }
1604
+ }
1605
+
1606
+ if (($match['operator'] === 'and') && (!$res)) {
1607
+ return false;
1608
+ } elseif (!($res && ($match['operator'] === 'or'))) {
1609
+ if ($match['compare'] === 'total') {
1610
+ $a = $this->tag;
1611
+ } elseif ($match['compare'] === 'namespace') {
1612
+ $a = $this->getNamespace();
1613
+ } elseif ($match['compare'] === 'name') {
1614
+ $a = $this->getTag();
1615
+ }
1616
+
1617
+ if ($match['case_sensitive']) {
1618
+ $res = (($a === $tag) === $match['match']);
1619
+ } else {
1620
+ $res = ((strcasecmp($a, $tag) === 0) === $match['match']);
1621
+ }
1622
+ }
1623
+ }
1624
+
1625
+ return $res;
1626
+ }
1627
+
1628
+ /**
1629
+ * Checks if attributes match certain conditions
1630
+ * @param array $attributes array('attr' => 'val') or array(array(
1631
+ * 'operator_value' => 'equals'/'='/'contains_regex'/etc
1632
+ * 'attribute' => 'attr',
1633
+ * 'value' => 'val',
1634
+ * 'match' => true,
1635
+ * 'operator_result' => 'or'/'and',
1636
+ * 'compare' => 'total'/'namespace'/'name',
1637
+ * 'case_sensitive' => true))
1638
+ * @return bool
1639
+ * @internal Used by selector class
1640
+ * @see match()
1641
+ * @access private
1642
+ */
1643
+ protected function match_attributes($attributes) {
1644
+ $res = false;
1645
+
1646
+ foreach($attributes as $attribute => $match) {
1647
+ if (!is_array($match)) {
1648
+ $match = array(
1649
+ 'operator_value' => 'equals',
1650
+ 'value' => $match,
1651
+ 'match' => true,
1652
+ 'operator_result' => 'or',
1653
+ 'compare' => 'total',
1654
+ 'case_sensitive' => false
1655
+ );
1656
+ } else {
1657
+ if (is_int($attribute)) {
1658
+ $attribute = $match['attribute'];
1659
+ }
1660
+ if (!isset($match['match'])) {
1661
+ $match['match'] = true;
1662
+ }
1663
+ if (!isset($match['operator_result'])) {
1664
+ $match['operator_result'] = 'or';
1665
+ }
1666
+ if (!isset($match['compare'])) {
1667
+ $match['compare'] = 'total';
1668
+ }
1669
+ if (!isset($match['case_sensitive'])) {
1670
+ $match['case_sensitive'] = false;
1671
+ }
1672
+ }
1673
+
1674
+ if (is_string($match['value']) && (!$match['case_sensitive'])) {
1675
+ $match['value'] = strtolower($match['value']);
1676
+ }
1677
+
1678
+ if (($match['operator_result'] === 'and') && (!$res)) {
1679
+ return false;
1680
+ } elseif (!($res && ($match['operator_result'] === 'or'))) {
1681
+ $possibles = $this->findAttribute($attribute, $match['compare'], $match['case_sensitive']);
1682
+
1683
+ $has = (is_array($possibles) && $possibles);
1684
+ $res = (($match['value'] === $has) || (($match['match'] === false) && ($has === $match['match'])));
1685
+
1686
+ if ((!$res) && $has && is_string($match['value'])) {
1687
+ foreach($possibles as $a) {
1688
+ $val = $this->attributes[$a[2]];
1689
+ if (is_string($val) && (!$match['case_sensitive'])) {
1690
+ $val = strtolower($val);
1691
+ }
1692
+
1693
+ switch($match['operator_value']) {
1694
+ case '%=':
1695
+ case 'contains_regex':
1696
+ $res = ((preg_match('`'.$match['value'].'`s', $val) > 0) === $match['match']);
1697
+ if ($res) break 1; else break 2;
1698
+
1699
+ case '|=':
1700
+ case 'contains_prefix':
1701
+ $res = ((preg_match('`\b'.preg_quote($match['value']).'[\-\s]`s', $val) > 0) === $match['match']);
1702
+ if ($res) break 1; else break 2;
1703
+
1704
+ case '~=':
1705
+ case 'contains_word':
1706
+ $res = ((preg_match('`\s'.preg_quote($match['value']).'\s`s', " $val ") > 0) === $match['match']);
1707
+ if ($res) break 1; else break 2;
1708
+
1709
+ case '*=':
1710
+ case 'contains':
1711
+ $res = ((strpos($val, $match['value']) !== false) === $match['match']);
1712
+ if ($res) break 1; else break 2;
1713
+
1714
+ case '$=':
1715
+ case 'ends_with':
1716
+ $res = ((substr($val, -strlen($match['value'])) === $match['value']) === $match['match']);
1717
+ if ($res) break 1; else break 2;
1718
+
1719
+ case '^=':
1720
+ case 'starts_with':
1721
+ $res = ((substr($val, 0, strlen($match['value'])) === $match['value']) === $match['match']);
1722
+ if ($res) break 1; else break 2;
1723
+
1724
+ case '!=':
1725
+ case 'not_equal':
1726
+ $res = (($val !== $match['value']) === $match['match']);
1727
+ if ($res) break 1; else break 2;
1728
+
1729
+ case '=':
1730
+ case 'equals':
1731
+ $res = (($val === $match['value']) === $match['match']);
1732
+ if ($res) break 1; else break 2;
1733
+
1734
+ case '>=':
1735
+ case 'bigger_than':
1736
+ $res = (($val >= $match['value']) === $match['match']);
1737
+ if ($res) break 1; else break 2;
1738
+
1739
+ case '<=':
1740
+ case 'smaller_than':
1741
+ $res = (($val >= $match['value']) === $match['match']);
1742
+ if ($res) break 1; else break 2;
1743
+
1744
+ default:
1745
+ trigger_error('Unknown operator "'.$match['operator_value'].'" to match attributes!');
1746
+ return false;
1747
+ }
1748
+ }
1749
+ }
1750
+ }
1751
+ }
1752
+
1753
+ return $res;
1754
+ }
1755
+
1756
+ /**
1757
+ * Checks if node matches certain filters
1758
+ * @param array $tags array(array(
1759
+ * 'filter' => 'last-child',
1760
+ * 'params' => '123'))
1761
+ * @param array $custom_filters Custom map next to {@link $filter_map}
1762
+ * @return bool
1763
+ * @internal Used by selector class
1764
+ * @see match()
1765
+ * @access private
1766
+ */
1767
+ protected function match_filters($conditions, $custom_filters = array()) {
1768
+ foreach($conditions as $c) {
1769
+ $c['filter'] = strtolower($c['filter']);
1770
+ if (isset($this->filter_map[$c['filter']])) {
1771
+ if (!$this->{$this->filter_map[$c['filter']]}($c['params'])) {
1772
+ return false;
1773
+ }
1774
+ } elseif (isset($custom_filters[$c['filter']])) {
1775
+ if (!call_user_func($custom_filters[$c['filter']], $this, $c['params'])) {
1776
+ return false;
1777
+ }
1778
+ } else {
1779
+ trigger_error('Unknown filter "'.$c['filter'].'"!');
1780
+ return false;
1781
+ }
1782
+ }
1783
+
1784
+ return true;
1785
+ }
1786
+
1787
+ /**
1788
+ * Checks if node matches certain conditions
1789
+ * @param array $tags array('tags' => array(tag_conditions), 'attributes' => array(attr_conditions), 'filters' => array(filter_conditions))
1790
+ * @param array $match Should conditions evaluate to true?
1791
+ * @param array $custom_filters Custom map next to {@link $filter_map}
1792
+ * @return bool
1793
+ * @internal Used by selector class
1794
+ * @see match_tags();
1795
+ * @see match_attributes();
1796
+ * @see match_filters();
1797
+ * @access private
1798
+ */
1799
+ function match($conditions, $match = true, $custom_filters = array()) {
1800
+ $t = isset($conditions['tags']);
1801
+ $a = isset($conditions['attributes']);
1802
+ $f = isset($conditions['filters']);
1803
+
1804
+ if (!($t || $a || $f)) {
1805
+ if (is_array($conditions) && $conditions) {
1806
+ foreach($conditions as $c) {
1807
+ if ($this->match($c, $match)) {
1808
+ return true;
1809
+ }
1810
+ }
1811
+ }
1812
+
1813
+ return false;
1814
+ } else {
1815
+ if (($t && (!$this->match_tags($conditions['tags']))) === $match) {
1816
+ return false;
1817
+ }
1818
+
1819
+ if (($a && (!$this->match_attributes($conditions['attributes']))) === $match) {
1820
+ return false;
1821
+ }
1822
+
1823
+ if (($f && (!$this->match_filters($conditions['filters'], $custom_filters))) === $match) {
1824
+ return false;
1825
+ }
1826
+
1827
+ return true;
1828
+ }
1829
+ }
1830
+
1831
+ /**
1832
+ * Finds children that match a certain attribute
1833
+ * @param string $attribute
1834
+ * @param string $value
1835
+ * @param string $mode Compare mode, "equals", "|=", "contains_regex", etc.
1836
+ * @param string $compare "total"/"namespace"/"name"
1837
+ * @param bool|int $recursive
1838
+ * @return array
1839
+ */
1840
+ function getChildrenByAttribute($attribute, $value, $mode = 'equals', $compare = 'total', $recursive = true) {
1841
+ if ($this->childCount() < 1) {
1842
+ return array();
1843
+ }
1844
+
1845
+ $mode = explode(' ', strtolower($mode));
1846
+ $match = ((isset($mode[1]) && ($mode[1] === 'not')) ? 'false' : 'true');
1847
+
1848
+ return $this->getChildrenByMatch(
1849
+ array(
1850
+ 'attributes' => array(
1851
+ $attribute => array(
1852
+ 'operator_value' => $mode[0],
1853
+ 'value' => $value,
1854
+ 'match' => $match,
1855
+ 'compare' => $compare
1856
+ )
1857
+ )
1858
+ ),
1859
+ $recursive
1860
+ );
1861
+ }
1862
+
1863
+ /**
1864
+ * Finds children that match a certain tag
1865
+ * @param string $tag
1866
+ * @param string $compare "total"/"namespace"/"name"
1867
+ * @param bool|int $recursive
1868
+ * @return array
1869
+ */
1870
+ function getChildrenByTag($tag, $compare = 'total', $recursive = true) {
1871
+ if ($this->childCount() < 1) {
1872
+ return array();
1873
+ }
1874
+
1875
+ $tag = explode(' ', strtolower($tag));
1876
+ $match = ((isset($tag[1]) && ($tag[1] === 'not')) ? 'false' : 'true');
1877
+
1878
+ return $this->getChildrenByMatch(
1879
+ array(
1880
+ 'tags' => array(
1881
+ $tag[0] => array(
1882
+ 'match' => $match,
1883
+ 'compare' => $compare
1884
+ )
1885
+ )
1886
+ ),
1887
+ $recursive
1888
+ );
1889
+ }
1890
+
1891
+ /**
1892
+ * Finds all children using ID attribute
1893
+ * @param string $id
1894
+ * @param bool|int $recursive
1895
+ * @return array
1896
+ */
1897
+ function getChildrenByID($id, $recursive = true) {
1898
+ return $this->getChildrenByAttribute('id', $id, 'equals', 'total', $recursive);
1899
+ }
1900
+
1901
+ /**
1902
+ * Finds all children using class attribute
1903
+ * @param string $class
1904
+ * @param bool|int $recursive
1905
+ * @return array
1906
+ */
1907
+ function getChildrenByClass($class, $recursive = true) {
1908
+ return $this->getChildrenByAttribute('class', $class, 'equals', 'total', $recursive);
1909
+ }
1910
+
1911
+ /**
1912
+ * Finds all children using name attribute
1913
+ * @param string $name
1914
+ * @param bool|int $recursive
1915
+ * @return array
1916
+ */
1917
+ function getChildrenByName($name, $recursive = true) {
1918
+ return $this->getChildrenByAttribute('name', $name, 'equals', 'total', $recursive);
1919
+ }
1920
+
1921
+ /**
1922
+ * Performs a css query on the node.
1923
+ * @param string $query
1924
+ * @return IQuery Returns the matching nodes from the query.
1925
+ */
1926
+ public function query($query = '*') {
1927
+ $select = $this->select($query);
1928
+ $result = new pQuery((array)$select);
1929
+ return $result;
1930
+ }
1931
+
1932
+ /**
1933
+ * Performs css query on node
1934
+ * @param string $query
1935
+ * @param int|bool $index True to return node instead of array if only 1 match,
1936
+ * false to return array, int to return match at index, negative int to count from end
1937
+ * @param bool|int $recursive
1938
+ * @param bool $check_self Include this node in search or only search child nodes
1939
+ * @return DomNode[]|DomNode Returns an array of matching {@link DomNode} objects
1940
+ * or a single {@link DomNode} if `$index` is not false.
1941
+ */
1942
+ function select($query = '*', $index = false, $recursive = true, $check_self = false) {
1943
+ $s = new $this->selectClass($this, $query, $check_self, $recursive);
1944
+ $res = $s->result;
1945
+ unset($s);
1946
+ if (is_array($res) && ($index === true) && (count($res) === 1)) {
1947
+ return $res[0];
1948
+ } elseif (is_int($index) && is_array($res)) {
1949
+ if ($index < 0) {
1950
+ $index += count($res);
1951
+ }
1952
+ return ($index < count($res)) ? $res[$index] : null;
1953
+ } else {
1954
+ return $res;
1955
+ }
1956
+ }
1957
+
1958
+ /**
1959
+ * Checks if node matches css query filter ":root"
1960
+ * @return bool
1961
+ * @see match()
1962
+ * @access private
1963
+ */
1964
+ protected function filter_root() {
1965
+ return (strtolower($this->tag) === 'html');
1966
+ }
1967
+
1968
+ /**
1969
+ * Checks if node matches css query filter ":nth-child(n)"
1970
+ * @param string $n 1-based index
1971
+ * @return bool
1972
+ * @see match()
1973
+ * @access private
1974
+ */
1975
+ protected function filter_nchild($n) {
1976
+ return ($this->index(false)+1 === (int) $n);
1977
+ }
1978
+
1979
+ /**
1980
+ * Checks if node matches css query filter ":gt(n)"
1981
+ * @param string $n 0-based index
1982
+ * @return bool
1983
+ * @see match()
1984
+ * @access private
1985
+ */
1986
+ protected function filter_gt($n) {
1987
+ return ($this->index(false) > (int) $n);
1988
+ }
1989
+
1990
+ /**
1991
+ * Checks if node matches css query filter ":lt(n)"
1992
+ * @param string $n 0-based index
1993
+ * @return bool
1994
+ * @see match()
1995
+ * @access private
1996
+ */
1997
+ protected function filter_lt($n) {
1998
+ return ($this->index(false) < (int) $n);
1999
+ }
2000
+
2001
+ /**
2002
+ * Checks if node matches css query filter ":nth-last-child(n)"
2003
+ * @param string $n 1-based index
2004
+ * @return bool
2005
+ * @see match()
2006
+ * @access private
2007
+ */
2008
+ protected function filter_nlastchild($n) {
2009
+ if ($this->parent === null) {
2010
+ return false;
2011
+ } else {
2012
+ return ($this->parent->childCount(true) - $this->index(false) === (int) $n);
2013
+ }
2014
+ }
2015
+
2016
+ /**
2017
+ * Checks if node matches css query filter ":nth-of-type(n)"
2018
+ * @param string $n 1-based index
2019
+ * @return bool
2020
+ * @see match()
2021
+ * @access private
2022
+ */
2023
+ protected function filter_ntype($n) {
2024
+ return ($this->typeIndex()+1 === (int) $n);
2025
+ }
2026
+
2027
+ /**
2028
+ * Checks if node matches css query filter ":nth-last-of-type(n)"
2029
+ * @param string $n 1-based index
2030
+ * @return bool
2031
+ * @see match()
2032
+ * @access private
2033
+ */
2034
+ protected function filter_nlastype($n) {
2035
+ if ($this->parent === null) {
2036
+ return false;
2037
+ } else {
2038
+ return (count($this->parent->getChildrenByTag($this->tag, 'total', false)) - $this->typeIndex() === (int) $n);
2039
+ }
2040
+ }
2041
+
2042
+ /**
2043
+ * Checks if node matches css query filter ":odd"
2044
+ * @return bool
2045
+ * @see match()
2046
+ * @access private
2047
+ */
2048
+ protected function filter_odd() {
2049
+ return (($this->index(false) & 1) === 1);
2050
+ }
2051
+
2052
+ /**
2053
+ * Checks if node matches css query filter ":even"
2054
+ * @return bool
2055
+ * @see match()
2056
+ * @access private
2057
+ */
2058
+ protected function filter_even() {
2059
+ return (($this->index(false) & 1) === 0);
2060
+ }
2061
+
2062
+ /**
2063
+ * Checks if node matches css query filter ":every(n)"
2064
+ * @return bool
2065
+ * @see match()
2066
+ * @access private
2067
+ */
2068
+ protected function filter_every($n) {
2069
+ return (($this->index(false) % (int) $n) === 0);
2070
+ }
2071
+
2072
+ /**
2073
+ * Checks if node matches css query filter ":first"
2074
+ * @return bool
2075
+ * @see match()
2076
+ * @access private
2077
+ */
2078
+ protected function filter_first() {
2079
+ return ($this->index(false) === 0);
2080
+ }
2081
+
2082
+ /**
2083
+ * Checks if node matches css query filter ":last"
2084
+ * @return bool
2085
+ * @see match()
2086
+ * @access private
2087
+ */
2088
+ protected function filter_last() {
2089
+ if ($this->parent === null) {
2090
+ return false;
2091
+ } else {
2092
+ return ($this->parent->childCount(true) - 1 === $this->index(false));
2093
+ }
2094
+ }
2095
+
2096
+ /**
2097
+ * Checks if node matches css query filter ":first-of-type"
2098
+ * @return bool
2099
+ * @see match()
2100
+ * @access private
2101
+ */
2102
+ protected function filter_firsttype() {
2103
+ return ($this->typeIndex() === 0);
2104
+ }
2105
+
2106
+ /**
2107
+ * Checks if node matches css query filter ":last-of-type"
2108
+ * @return bool
2109
+ * @see match()
2110
+ * @access private
2111
+ */
2112
+ protected function filter_lasttype() {
2113
+ if ($this->parent === null) {
2114
+ return false;
2115
+ } else {
2116
+ return (count($this->parent->getChildrenByTag($this->tag, 'total', false)) - 1 === $this->typeIndex());
2117
+ }
2118
+ }
2119
+
2120
+ /**
2121
+ * Checks if node matches css query filter ":only-child"
2122
+ * @return bool
2123
+ * @see match()
2124
+ * @access private
2125
+ */
2126
+ protected function filter_onlychild() {
2127
+ if ($this->parent === null) {
2128
+ return false;
2129
+ } else {
2130
+ return ($this->parent->childCount(true) === 1);
2131
+ }
2132
+ }
2133
+
2134
+ /**
2135
+ * Checks if node matches css query filter ":only-of-type"
2136
+ * @return bool
2137
+ * @see match()
2138
+ * @access private
2139
+ */
2140
+ protected function filter_onlytype() {
2141
+ if ($this->parent === null) {
2142
+ return false;
2143
+ } else {
2144
+ return (count($this->parent->getChildrenByTag($this->tag, 'total', false)) === 1);
2145
+ }
2146
+ }
2147
+
2148
+ /**
2149
+ * Checks if node matches css query filter ":empty"
2150
+ * @return bool
2151
+ * @see match()
2152
+ * @access private
2153
+ */
2154
+ protected function filter_empty() {
2155
+ return ($this->childCount() === 0);
2156
+ }
2157
+
2158
+ /**
2159
+ * Checks if node matches css query filter ":not-empty"
2160
+ * @return bool
2161
+ * @see match()
2162
+ * @access private
2163
+ */
2164
+ protected function filter_notempty() {
2165
+ return ($this->childCount() !== 0);
2166
+ }
2167
+
2168
+ /**
2169
+ * Checks if node matches css query filter ":has-text"
2170
+ * @return bool
2171
+ * @see match()
2172
+ * @access private
2173
+ */
2174
+ protected function filter_hastext() {
2175
+ return ($this->getPlainText() !== '');
2176
+ }
2177
+
2178
+ /**
2179
+ * Checks if node matches css query filter ":no-text"
2180
+ * @return bool
2181
+ * @see match()
2182
+ * @access private
2183
+ */
2184
+ protected function filter_notext() {
2185
+ return ($this->getPlainText() === '');
2186
+ }
2187
+
2188
+ /**
2189
+ * Checks if node matches css query filter ":lang(s)"
2190
+ * @param string $lang
2191
+ * @return bool
2192
+ * @see match()
2193
+ * @access private
2194
+ */
2195
+ protected function filter_lang($lang) {
2196
+ return ($this->lang === $lang);
2197
+ }
2198
+
2199
+ /**
2200
+ * Checks if node matches css query filter ":contains(s)"
2201
+ * @param string $text
2202
+ * @return bool
2203
+ * @see match()
2204
+ * @access private
2205
+ */
2206
+ protected function filter_contains($text) {
2207
+ return (strpos($this->getPlainTextUTF8(), $text) !== false);
2208
+ }
2209
+
2210
+ /**
2211
+ * Checks if node matches css query filter ":has(s)"
2212
+ * @param string $selector
2213
+ * @return bool
2214
+ * @see match()
2215
+ * @access private
2216
+ */
2217
+ protected function filter_has($selector) {
2218
+ $s = $this->select((string) $selector, false);
2219
+ return (is_array($s) && (count($s) > 0));
2220
+ }
2221
+
2222
+ /**
2223
+ * Checks if node matches css query filter ":not(s)"
2224
+ * @param string $selector
2225
+ * @return bool
2226
+ * @see match()
2227
+ * @access private
2228
+ */
2229
+ protected function filter_not($selector) {
2230
+ $s = $this->select((string) $selector, false, true, true);
2231
+ return ((!is_array($s)) || (array_search($this, $s, true) === false));
2232
+ }
2233
+
2234
+ /**
2235
+ * Checks if node matches css query filter ":element"
2236
+ * @return bool
2237
+ * @see match()
2238
+ * @access private
2239
+ */
2240
+ protected function filter_element() {
2241
+ return true;
2242
+ }
2243
+
2244
+ /**
2245
+ * Checks if node matches css query filter ":text"
2246
+ * @return bool
2247
+ * @see match()
2248
+ * @access private
2249
+ */
2250
+ protected function filter_text() {
2251
+ return false;
2252
+ }
2253
+
2254
+ /**
2255
+ * Checks if a node matches css query filter ":checked"
2256
+ * @return bool
2257
+ * @see match()
2258
+ */
2259
+ protected function filter_checked() {
2260
+ $attr = $this->getAttribute('checked');
2261
+ if (is_array($attr))
2262
+ $attr = reset($attr);
2263
+ return strcasecmp($attr, 'checked') === 0;
2264
+ }
2265
+
2266
+ /**
2267
+ * Checks if node matches css query filter ":comment"
2268
+ * @return bool
2269
+ * @see match()
2270
+ * @access private
2271
+ */
2272
+ protected function filter_comment() {
2273
+ return false;
2274
+ }
2275
+
2276
+ /**
2277
+ * Checks if a node matches css query filter ":selected"
2278
+ * @return bool
2279
+ * @see match()
2280
+ */
2281
+ protected function filter_selected() {
2282
+ $attr = $this->getAttribute('selected');
2283
+ if (is_array($attr))
2284
+ $attr = reset($attr);
2285
+
2286
+ return strcasecmp($attr, 'selected') === 0;
2287
+ }
2288
+
2289
+ public function after($content) {
2290
+ $offset = $this->index() + 1;
2291
+ $parent = $this->parent;
2292
+ $nodes = $this->createNodes($content);
2293
+
2294
+ foreach ($nodes as $node) {
2295
+ $node->changeParent($parent, $offset);
2296
+ }
2297
+ return $this;
2298
+ }
2299
+
2300
+
2301
+ /**
2302
+ * Create a {@link DomNode} from its string representation.
2303
+ * @param string|DomNode $content
2304
+ * @return DomNode
2305
+ */
2306
+ protected function createNode($content) {
2307
+ $nodes = $this->createNodes($content);
2308
+ return reset($nodes);
2309
+ }
2310
+
2311
+ /**
2312
+ * Create an array of {@link DomNode} objects from their string representation.
2313
+ * @param string|DomNode $content
2314
+ * @return DomNode[]
2315
+ */
2316
+ protected function createNodes($content) {
2317
+ if (is_string($content)) {
2318
+ if (strpos($content, ' ') === false) {
2319
+ $nodes = array(new $this->childClass($content, $this));
2320
+ } else {
2321
+ $node = new $this->parserClass($content);
2322
+ $nodes = $node->root->children;
2323
+ }
2324
+ } else {
2325
+ $nodes = (array)$content;
2326
+ }
2327
+ return $nodes;
2328
+ }
2329
+
2330
+ public function append($content) {
2331
+ $nodes = $this->createNodes($content);
2332
+ foreach ($nodes as $node) {
2333
+ $node->changeParent($this);
2334
+ }
2335
+ return $this;
2336
+ }
2337
+
2338
+ public function attr($name, $value = null) {
2339
+ if ($value === null)
2340
+ return $this->getAttribute($name);
2341
+
2342
+ $this->setAttribute($name, $value);
2343
+ return $this;
2344
+ }
2345
+
2346
+ public function before($content) {
2347
+ $offset = $this->index();
2348
+ $parent = $this->parent;
2349
+ $nodes = $this->createNodes($content);
2350
+
2351
+ foreach ($nodes as $node) {
2352
+ $node->changeParent($parent, $offset);
2353
+ }
2354
+
2355
+ return $this;
2356
+ }
2357
+
2358
+ public function count(): int {
2359
+ return 1;
2360
+ }
2361
+
2362
+ // public function css($name, $value = null) {
2363
+ //
2364
+ // }
2365
+
2366
+ public function prepend($content = null) {
2367
+ $offset = 0;
2368
+ $parent = $this;
2369
+ $nodes = $this->createNodes($content);
2370
+
2371
+ foreach ($nodes as $node) {
2372
+ $node->changeParent($parent, $offset);
2373
+ }
2374
+
2375
+ return $this;
2376
+ }
2377
+
2378
+ public function prop($name, $value = null) {
2379
+ switch (strtolower($name)) {
2380
+ case 'checked':
2381
+ case 'disabled':
2382
+ case 'selected':
2383
+ if ($value !== null) {
2384
+ if ($value) {
2385
+ $this->attr($name, $name);
2386
+ } else {
2387
+ $this->removeAttr($name);
2388
+ }
2389
+ return $this;
2390
+ }
2391
+ return $this->attr($name) == $name;
2392
+ case 'tagname':
2393
+ return $this->tagName($value);
2394
+ }
2395
+ // The property is not supported, degrade gracefully
2396
+ if ($value === null)
2397
+ return $this;
2398
+ else
2399
+ return null;
2400
+ }
2401
+
2402
+ public function remove($selector = null) {
2403
+ if ($selector == null) {
2404
+ $this->delete();
2405
+ } else {
2406
+ $nodes = (array)$this->select($selector);
2407
+ foreach ($nodes as $node) {
2408
+ $node->delete();
2409
+ }
2410
+ }
2411
+ }
2412
+
2413
+ public function removeAttr($name) {
2414
+ $this->deleteAttribute($name);
2415
+
2416
+ return $this;
2417
+ }
2418
+
2419
+ function replaceWith($content) {
2420
+ $node_index = $this->index();
2421
+
2422
+ // Add the new node.
2423
+ $node = $this->createNode($content);
2424
+ $node->changeParent($this->parent, $node_index);
2425
+
2426
+ // Remove this node.
2427
+ $this->remove();
2428
+
2429
+ return $node;
2430
+ }
2431
+
2432
+ /**
2433
+ * @param type $value
2434
+ * @return string|DomNode
2435
+ */
2436
+ public function tagName($value = null) {
2437
+ if ($value !== null) {
2438
+ $this->setTag($value);
2439
+ return $this;
2440
+ }
2441
+ return $this->getTag();
2442
+ }
2443
+
2444
+ public function text($value = null) {
2445
+ if ($value === null)
2446
+ return $this->getPlainText();
2447
+
2448
+ $this->setPlainText($value);
2449
+ return $this;
2450
+ }
2451
+
2452
+ public function toggleClass($classname, $switch = null) {
2453
+ if ($switch === true) {
2454
+ $this->addClass($classname);
2455
+ } elseif ($switch === false) {
2456
+ $this->removeClass($classname);
2457
+ } else {
2458
+ if ($this->hasClass($classname))
2459
+ $this->removeClass($classname);
2460
+ else
2461
+ $this->addClass($classname);
2462
+ }
2463
+ return $this;
2464
+ }
2465
+
2466
+ public function unwrap() {
2467
+ $this->parent->detach(true);
2468
+ return $this;
2469
+ }
2470
+
2471
+ public function val($value = null) {
2472
+ switch (strtolower($this->tag)) {
2473
+ case 'select':
2474
+ if ($value === null) {
2475
+ // Return the value of a selected child.
2476
+ return $this->query('option:selected')->attr('value');
2477
+ } else {
2478
+ // Select the option with the right value and deselect the others.
2479
+ foreach ($this->query('option') as $option) {
2480
+ if ($option->attr('value') == $value) {
2481
+ $option->attr('selected', 'selected');
2482
+ } else {
2483
+ $option->removeAttr('selected');
2484
+ }
2485
+ }
2486
+ return $this;
2487
+ }
2488
+ case 'textarea':
2489
+ if ($value === null) {
2490
+ // Return the contents of the textarea.
2491
+ return $this->getInnerText();
2492
+ } else {
2493
+ // Set the contents of the textarea.
2494
+ $this->setInnerText($value);
2495
+ return $this;
2496
+ }
2497
+ case 'input':
2498
+ switch (strtolower($this->getAttribute('type'))) {
2499
+ case 'checkbox':
2500
+ if ($value === null)
2501
+ return $this->prop('checked') ? $this->getAttribute('value') : null;
2502
+ else {
2503
+ if (!$value) {
2504
+ $this->deleteAttribute('checked');
2505
+ } else {
2506
+ $this->setAttribute('value', $value);
2507
+ $this->setAttribute('checked', 'checked');
2508
+ }
2509
+ return $this;
2510
+ }
2511
+ }
2512
+ }
2513
+
2514
+ // Other node types can just get/set the value attribute.
2515
+ if ($value !== null) {
2516
+ $this->setAttribute('value', $value);
2517
+ return $this;
2518
+ }
2519
+ return $this->getAttribute('value');
2520
+ }
2521
+
2522
+ }
2523
+
2524
+ /**
2525
+ * Node subclass for text
2526
+ */
2527
+ class TextNode extends DomNode {
2528
+ #php4 Compatibility with PHP4, this gets changed to a regular var in release tool
2529
+ #static $NODE_TYPE = self::NODE_TEXT;
2530
+ #php4e
2531
+ #php5
2532
+ const NODE_TYPE = self::NODE_TEXT;
2533
+ #php5e
2534
+ var $tag = '~text~';
2535
+
2536
+ /**
2537
+ * @var string
2538
+ */
2539
+ var $text = '';
2540
+
2541
+ /**
2542
+ * Class constructor
2543
+ * @param DomNode $parent
2544
+ * @param string $text
2545
+ */
2546
+ function __construct($parent, $text = '') {
2547
+ $this->parent = $parent;
2548
+ $this->text = $text;
2549
+ }
2550
+
2551
+ #php4 PHP4 class constructor compatibility
2552
+ #function TextNode($parent, $text = '') {return $this->__construct($parent, $text);}
2553
+ #php4e
2554
+
2555
+ function isText() {return true;}
2556
+ function isTextOrComment() {return true;}
2557
+ protected function filter_element() {return false;}
2558
+ protected function filter_text() {return true;}
2559
+ function toString_attributes() {return '';}
2560
+ function toString_content($attributes = true, $recursive = true, $content_only = false) {return $this->text;}
2561
+ function toString($attributes = true, $recursive = true, $content_only = false) {return $this->text;}
2562
+
2563
+ /**
2564
+ * {@inheritdoc}
2565
+ */
2566
+ public function text($value = null) {
2567
+ if ($value !== null) {
2568
+ $this->text = $value;
2569
+ return $this;
2570
+ }
2571
+ return $this->text;
2572
+ }
2573
+
2574
+ /**
2575
+ * {@inheritdoc}
2576
+ */
2577
+ public function html($value = null) {
2578
+ if ($value !== null) {
2579
+ $this->text = $value;
2580
+ return $this;
2581
+ }
2582
+ return $this->text;
2583
+ }
2584
+ }
2585
+
2586
+ /**
2587
+ * Node subclass for comments
2588
+ */
2589
+ class CommentNode extends DomNode {
2590
+ #php4 Compatibility with PHP4, this gets changed to a regular var in release tool
2591
+ #static $NODE_TYPE = self::NODE_COMMENT;
2592
+ #php4e
2593
+ #php5
2594
+ const NODE_TYPE = self::NODE_COMMENT;
2595
+ #php5e
2596
+ var $tag = '~comment~';
2597
+
2598
+ /**
2599
+ * @var string
2600
+ */
2601
+ var $text = '';
2602
+
2603
+ /**
2604
+ * Class constructor
2605
+ * @param DomNode $parent
2606
+ * @param string $text
2607
+ */
2608
+ function __construct($parent, $text = '') {
2609
+ $this->parent = $parent;
2610
+ $this->text = $text;
2611
+ }
2612
+
2613
+ #php4 PHP4 class constructor compatibility
2614
+ #function CommentNode($parent, $text = '') {return $this->__construct($parent, $text);}
2615
+ #php4e
2616
+
2617
+ function isComment() {return true;}
2618
+ function isTextOrComment() {return true;}
2619
+ protected function filter_element() {return false;}
2620
+ protected function filter_comment() {return true;}
2621
+ function toString_attributes() {return '';}
2622
+ function toString_content($attributes = true, $recursive = true, $content_only = false) {return $this->text;}
2623
+ function toString($attributes = true, $recursive = true, $content_only = false) {return '<!--'.$this->text.'-->';}
2624
+ }
2625
+
2626
+ /**
2627
+ * Node subclass for conditional tags
2628
+ */
2629
+ class ConditionalTagNode extends DomNode {
2630
+ #php4 Compatibility with PHP4, this gets changed to a regular var in release tool
2631
+ #static $NODE_TYPE = self::NODE_CONDITIONAL;
2632
+ #php4e
2633
+ #php5
2634
+ const NODE_TYPE = self::NODE_CONDITIONAL;
2635
+ #php5e
2636
+ var $tag = '~conditional~';
2637
+
2638
+ /**
2639
+ * @var string
2640
+ */
2641
+ var $condition = '';
2642
+
2643
+ /**
2644
+ * Class constructor
2645
+ * @param DomNode $parent
2646
+ * @param string $condition e.g. "if IE"
2647
+ * @param bool $hidden <!--[if if true, <![if if false
2648
+ */
2649
+ function __construct($parent, $condition = '', $hidden = true) {
2650
+ $this->parent = $parent;
2651
+ $this->hidden = $hidden;
2652
+ $this->condition = $condition;
2653
+ }
2654
+
2655
+ #php4 PHP4 class constructor compatibility
2656
+ #function ConditionalTagNode($parent, $condition = '', $hidden = true) {return $this->__construct($parent, $condition, $hidden);}
2657
+ #php4e
2658
+
2659
+ protected function filter_element() {return false;}
2660
+ function toString_attributes() {return '';}
2661
+ function toString($attributes = true, $recursive = true, $content_only = false) {
2662
+ if ($content_only) {
2663
+ if (is_int($content_only)) {
2664
+ --$content_only;
2665
+ }
2666
+ return $this->toString_content($attributes, $recursive, $content_only);
2667
+ }
2668
+
2669
+ $s = '<!'.(($this->hidden) ? '--' : '').'['.$this->condition.']>';
2670
+ if($recursive) {
2671
+ $s .= $this->toString_content($attributes);
2672
+ }
2673
+ $s .= '<![endif]'.(($this->hidden) ? '--' : '').'>';
2674
+ return $s;
2675
+ }
2676
+ }
2677
+
2678
+ /**
2679
+ * Node subclass for CDATA tags
2680
+ */
2681
+ class CdataNode extends DomNode {
2682
+ #php4 Compatibility with PHP4, this gets changed to a regular var in release tool
2683
+ #static $NODE_TYPE = self::NODE_CDATA;
2684
+ #php4e
2685
+ #php5
2686
+ const NODE_TYPE = self::NODE_CDATA;
2687
+ #php5e
2688
+ var $tag = '~cdata~';
2689
+
2690
+ /**
2691
+ * @var string
2692
+ */
2693
+ var $text = '';
2694
+
2695
+ /**
2696
+ * Class constructor
2697
+ * @param DomNode $parent
2698
+ * @param string $text
2699
+ */
2700
+ function __construct($parent, $text = '') {
2701
+ $this->parent = $parent;
2702
+ $this->text = $text;
2703
+ }
2704
+
2705
+ #php4 PHP4 class constructor compatibility
2706
+ #function CdataNode($parent, $text = '') {return $this->__construct($parent, $text);}
2707
+ #php4e
2708
+
2709
+ protected function filter_element() {return false;}
2710
+ function toString_attributes() {return '';}
2711
+ function toString_content($attributes = true, $recursive = true, $content_only = false) {return $this->text;}
2712
+ function toString($attributes = true, $recursive = true, $content_only = false) {return '<![CDATA['.$this->text.']]>';}
2713
+ }
2714
+
2715
+ /**
2716
+ * Node subclass for doctype tags
2717
+ */
2718
+ class DoctypeNode extends DomNode {
2719
+ #php4 Compatibility with PHP4, this gets changed to a regular var in release tool
2720
+ #static $NODE_TYPE = self::NODE_DOCTYPE;
2721
+ #php4e
2722
+ #php5
2723
+ const NODE_TYPE = self::NODE_DOCTYPE;
2724
+ #php5e
2725
+ var $tag = '!DOCTYPE';
2726
+
2727
+ /**
2728
+ * @var string
2729
+ */
2730
+ var $dtd = '';
2731
+
2732
+ /**
2733
+ * Class constructor
2734
+ * @param DomNode $parent
2735
+ * @param string $dtd
2736
+ */
2737
+ function __construct($parent, $dtd = '') {
2738
+ $this->parent = $parent;
2739
+ $this->dtd = $dtd;
2740
+ }
2741
+
2742
+ #php4 PHP4 class constructor compatibility
2743
+ #function DoctypeNode($parent, $dtd = '') {return $this->__construct($parent, $dtd);}
2744
+ #php4e
2745
+
2746
+ protected function filter_element() {return false;}
2747
+ function toString_attributes() {return '';}
2748
+ function toString_content($attributes = true, $recursive = true, $content_only = false) {return $this->text;}
2749
+ function toString($attributes = true, $recursive = true, $content_only = false) {return '<'.$this->tag.' '.$this->dtd.'>';}
2750
+ }
2751
+
2752
+ /**
2753
+ * Node subclass for embedded tags like xml, php and asp
2754
+ */
2755
+ class EmbeddedNode extends DomNode {
2756
+
2757
+ /**
2758
+ * @var string
2759
+ * @internal specific char for tags, like ? for php and % for asp
2760
+ * @access private
2761
+ */
2762
+ var $tag_char = '';
2763
+
2764
+ /**
2765
+ * @var string
2766
+ */
2767
+ var $text = '';
2768
+
2769
+ /**
2770
+ * Class constructor
2771
+ * @param DomNode $parent
2772
+ * @param string $tag_char {@link $tag_char}
2773
+ * @param string $tag {@link $tag}
2774
+ * @param string $text
2775
+ * @param array $attributes array('attr' => 'val')
2776
+ */
2777
+ function __construct($parent, $tag_char = '', $tag = '', $text = '', $attributes = array()) {
2778
+ $this->parent = $parent;
2779
+ $this->tag_char = $tag_char;
2780
+ if ($tag[0] !== $this->tag_char) {
2781
+ $tag = $this->tag_char.$tag;
2782
+ }
2783
+ $this->tag = $tag;
2784
+ $this->text = $text;
2785
+ $this->attributes = $attributes;
2786
+ $this->self_close_str = $tag_char;
2787
+ }
2788
+
2789
+ #php4 PHP4 class constructor compatibility
2790
+ #function EmbeddedNode($parent, $tag_char = '', $tag = '', $text = '', $attributes = array()) {return $this->__construct($parent, $tag_char, $tag, $text, $attributes);}
2791
+ #php4e
2792
+
2793
+ protected function filter_element() {return false;}
2794
+ function toString($attributes = true, $recursive = true, $content_only = false) {
2795
+ $s = '<'.$this->tag;
2796
+ if ($attributes) {
2797
+ $s .= $this->toString_attributes();
2798
+ }
2799
+ $s .= $this->text.$this->self_close_str.'>';
2800
+ return $s;
2801
+ }
2802
+ }
2803
+
2804
+ /**
2805
+ * Node subclass for "?" tags, like php and xml
2806
+ */
2807
+ class XmlNode extends EmbeddedNode {
2808
+ #php4 Compatibility with PHP4, this gets changed to a regular var in release tool
2809
+ #static $NODE_TYPE = self::NODE_XML;
2810
+ #php4e
2811
+ #php5
2812
+ const NODE_TYPE = self::NODE_XML;
2813
+ #php5e
2814
+
2815
+ /**
2816
+ * Class constructor
2817
+ * @param DomNode $parent
2818
+ * @param string $tag {@link $tag}
2819
+ * @param string $text
2820
+ * @param array $attributes array('attr' => 'val')
2821
+ */
2822
+ function __construct($parent, $tag = 'xml', $text = '', $attributes = array()) {
2823
+ return parent::__construct($parent, '?', $tag, $text, $attributes);
2824
+ }
2825
+
2826
+ #php4 PHP4 class constructor compatibility
2827
+ #function XmlNode($parent, $tag = 'xml', $text = '', $attributes = array()) {return $this->__construct($parent, $tag, $text, $attributes);}
2828
+ #php4e
2829
+ }
2830
+
2831
+ /**
2832
+ * Node subclass for asp tags
2833
+ */
2834
+ class AspEmbeddedNode extends EmbeddedNode {
2835
+ #php4 Compatibility with PHP4, this gets changed to a regular var in release tool
2836
+ #static $NODE_TYPE = self::NODE_ASP;
2837
+ #php4e
2838
+ #php5
2839
+ const NODE_TYPE = self::NODE_ASP;
2840
+ #php5e
2841
+
2842
+ /**
2843
+ * Class constructor
2844
+ * @param DomNode $parent
2845
+ * @param string $tag {@link $tag}
2846
+ * @param string $text
2847
+ * @param array $attributes array('attr' => 'val')
2848
+ */
2849
+ function __construct($parent, $tag = '', $text = '', $attributes = array()) {
2850
+ return parent::__construct($parent, '%', $tag, $text, $attributes);
2851
+ }
2852
+
2853
+ #php4 PHP4 class constructor compatibility
2854
+ #function AspEmbeddedNode($parent, $tag = '', $text = '', $attributes = array()) {return $this->__construct($parent, $tag, $text, $attributes);}
2855
+ #php4e
2856
+ }
lib-3rd-party/pquery/gan_parser_html.php ADDED
@@ -0,0 +1,840 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @author Niels A.D.
4
+ * @author Todd Burry <todd@vanillaforums.com>
5
+ * @copyright 2010 Niels A.D., 2014 Todd Burry
6
+ * @license http://opensource.org/licenses/LGPL-2.1 LGPL-2.1
7
+ * @package pQuery
8
+ */
9
+
10
+ namespace MailPoetVendor\pQuery;
11
+
12
+ if (!defined('ABSPATH')) exit;
13
+
14
+
15
+ /**
16
+ * Parses a HTML document
17
+ *
18
+ * Functionality can be extended by overriding functions or adjusting the tag map.
19
+ * Document may contain small errors, the parser will try to recover and resume parsing.
20
+ */
21
+ class HtmlParserBase extends TokenizerBase {
22
+
23
+ /**
24
+ * Tag open token, used for "<"
25
+ */
26
+ const TOK_TAG_OPEN = 100;
27
+ /**
28
+ * Tag close token, used for ">"
29
+ */
30
+ const TOK_TAG_CLOSE = 101;
31
+ /**
32
+ * Forward slash token, used for "/"
33
+ */
34
+ const TOK_SLASH_FORWARD = 103;
35
+ /**
36
+ * Backslash token, used for "\"
37
+ */
38
+ const TOK_SLASH_BACKWARD = 104;
39
+ /**
40
+ * String token, used for attribute values (" and ')
41
+ */
42
+ const TOK_STRING = 104;
43
+ /**
44
+ * Equals token, used for "="
45
+ */
46
+ const TOK_EQUALS = 105;
47
+
48
+ /**
49
+ * Sets HTML identifiers, tags/attributes are considered identifiers
50
+ * @see TokenizerBase::$identifiers
51
+ * @access private
52
+ */
53
+ var $identifiers = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890:-_!?%';
54
+
55
+ /**
56
+ * Status of the parser (tagname, closing tag, etc)
57
+ * @var array
58
+ */
59
+ var $status = array();
60
+
61
+ /**
62
+ * Map characters to match their tokens
63
+ * @see TokenizerBase::$custom_char_map
64
+ * @access private
65
+ */
66
+ var $custom_char_map = array(
67
+ '<' => self::TOK_TAG_OPEN,
68
+ '>' => self::TOK_TAG_CLOSE,
69
+ "'" => 'parse_string',
70
+ '"' => 'parse_string',
71
+ '/' => self::TOK_SLASH_FORWARD,
72
+ '\\' => self::TOK_SLASH_BACKWARD,
73
+ '=' => self::TOK_EQUALS
74
+ );
75
+
76
+ function __construct($doc = '', $pos = 0) {
77
+ parent::__construct($doc, $pos);
78
+ $this->parse_all();
79
+ }
80
+
81
+ #php4 PHP4 class constructor compatibility
82
+ #function HtmlParserBase($doc = '', $pos = 0) {return $this->__construct($doc, $pos);}
83
+ #php4e
84
+
85
+ /**
86
+ Callback functions for certain tags
87
+ @var array (TAG_NAME => FUNCTION_NAME)
88
+ @internal Function should be a method in the class
89
+ @internal Tagname should be lowercase and is everything after <, e.g. "?php" or "!doctype"
90
+ @access private
91
+ */
92
+ var $tag_map = array(
93
+ '!doctype' => 'parse_doctype',
94
+ '?' => 'parse_php',
95
+ '?php' => 'parse_php',
96
+ '%' => 'parse_asp',
97
+ 'style' => 'parse_style',
98
+ 'script' => 'parse_script'
99
+ );
100
+
101
+ /**
102
+ * Parse a HTML string (attributes)
103
+ * @internal Gets called with ' and "
104
+ * @return int
105
+ */
106
+ protected function parse_string() {
107
+ if ($this->next_pos($this->doc[$this->pos], false) !== self::TOK_UNKNOWN) {
108
+ --$this->pos;
109
+ }
110
+ return self::TOK_STRING;
111
+ }
112
+
113
+ /**
114
+ * Parse text between tags
115
+ * @internal Gets called between tags, uses {@link $status}[last_pos]
116
+ * @internal Stores text in {@link $status}[text]
117
+ */
118
+ function parse_text() {
119
+ $len = $this->pos - 1 - $this->status['last_pos'];
120
+ $this->status['text'] = (($len > 0) ? substr($this->doc, $this->status['last_pos'] + 1, $len) : '');
121
+ }
122
+
123
+ /**
124
+ * Parse comment tags
125
+ * @internal Gets called with HTML comments ("<!--")
126
+ * @internal Stores text in {@link $status}[comment]
127
+ * @return bool
128
+ */
129
+ function parse_comment() {
130
+ $this->pos += 3;
131
+ if ($this->next_pos('-->', false) !== self::TOK_UNKNOWN) {
132
+ $this->status['comment'] = $this->getTokenString(1, -1);
133
+ --$this->pos;
134
+ } else {
135
+ $this->status['comment'] = $this->getTokenString(1, -1);
136
+ $this->pos += 2;
137
+ }
138
+ $this->status['last_pos'] = $this->pos;
139
+
140
+ return true;
141
+ }
142
+
143
+ /**
144
+ * Parse doctype tag
145
+ * @internal Gets called with doctype ("<!doctype")
146
+ * @internal Stores text in {@link $status}[dtd]
147
+ * @return bool
148
+ */
149
+ function parse_doctype() {
150
+ $start = $this->pos;
151
+ if ($this->next_search('[>', false) === self::TOK_UNKNOWN) {
152
+ if ($this->doc[$this->pos] === '[') {
153
+ if (($this->next_pos(']', false) !== self::TOK_UNKNOWN) || ($this->next_pos('>', false) !== self::TOK_UNKNOWN)) {
154
+ $this->addError('Invalid doctype');
155
+ return false;
156
+ }
157
+ }
158
+
159
+ $this->token_start = $start;
160
+ $this->status['dtd'] = $this->getTokenString(2, -1);
161
+ $this->status['last_pos'] = $this->pos;
162
+ return true;
163
+ } else {
164
+ $this->addError('Invalid doctype');
165
+ return false;
166
+ }
167
+ }
168
+
169
+ /**
170
+ * Parse cdata tag
171
+ * @internal Gets called with cdata ("<![cdata")
172
+ * @internal Stores text in {@link $status}[cdata]
173
+ * @return bool
174
+ */
175
+ function parse_cdata() {
176
+ if ($this->next_pos(']]>', false) === self::TOK_UNKNOWN) {
177
+ $this->status['cdata'] = $this->getTokenString(9, -1);
178
+ $this->status['last_pos'] = $this->pos + 2;
179
+ return true;
180
+ } else {
181
+ $this->addError('Invalid cdata tag');
182
+ return false;
183
+ }
184
+ }
185
+
186
+ /**
187
+ * Parse php tags
188
+ * @internal Gets called with php tags ("<?php")
189
+ * @return bool
190
+ */
191
+ function parse_php() {
192
+ $start = $this->pos;
193
+ if ($this->next_pos('?>', false) !== self::TOK_UNKNOWN) {
194
+ $this->pos -= 2; //End of file
195
+ }
196
+
197
+ $len = $this->pos - 1 - $start;
198
+ $this->status['text'] = (($len > 0) ? substr($this->doc, $start + 1, $len) : '');
199
+ $this->status['last_pos'] = ++$this->pos;
200
+ return true;
201
+ }
202
+
203
+ /**
204
+ * Parse asp tags
205
+ * @internal Gets called with asp tags ("<%")
206
+ * @return bool
207
+ */
208
+ function parse_asp() {
209
+ $start = $this->pos;
210
+ if ($this->next_pos('%>', false) !== self::TOK_UNKNOWN) {
211
+ $this->pos -= 2; //End of file
212
+ }
213
+
214
+ $len = $this->pos - 1 - $start;
215
+ $this->status['text'] = (($len > 0) ? substr($this->doc, $start + 1, $len) : '');
216
+ $this->status['last_pos'] = ++$this->pos;
217
+ return true;
218
+ }
219
+
220
+ /**
221
+ * Parse style tags
222
+ * @internal Gets called with php tags ("<style>")
223
+ * @return bool
224
+ */
225
+ function parse_style() {
226
+ if ($this->parse_attributes() && ($this->token === self::TOK_TAG_CLOSE) && ($start = $this->pos) && ($this->next_pos('</style>', false) === self::TOK_UNKNOWN)) {
227
+ $len = $this->pos - 1 - $start;
228
+ $this->status['text'] = (($len > 0) ? substr($this->doc, $start + 1, $len) : '');
229
+
230
+ $this->pos += 7;
231
+ $this->status['last_pos'] = $this->pos;
232
+ return true;
233
+ } else {
234
+ $this->addError('No end for style tag found');
235
+ return false;
236
+ }
237
+ }
238
+
239
+ /**
240
+ * Parse script tags
241
+ * @internal Gets called with php tags ("<script>")
242
+ * @return bool
243
+ */
244
+ function parse_script() {
245
+ if ($this->parse_attributes() && ($this->token === self::TOK_TAG_CLOSE) && ($start = $this->pos) && ($this->next_pos('</script>', false) === self::TOK_UNKNOWN)) {
246
+ $len = $this->pos - 1 - $start;
247
+ $this->status['text'] = (($len > 0) ? substr($this->doc, $start + 1, $len) : '');
248
+
249
+ $this->pos += 8;
250
+ $this->status['last_pos'] = $this->pos;
251
+ return true;
252
+ } else {
253
+ $this->addError('No end for script tag found');
254
+ return false;
255
+ }
256
+ }
257
+
258
+ /**
259
+ * Parse conditional tags (+ all conditional tags inside)
260
+ * @internal Gets called with IE conditionals ("<![if]" and "<!--[if]")
261
+ * @internal Stores condition in {@link $status}[tag_condition]
262
+ * @return bool
263
+ */
264
+ function parse_conditional() {
265
+ if ($this->status['closing_tag']) {
266
+ $this->pos += 8;
267
+ } else {
268
+ $this->pos += (($this->status['comment']) ? 5 : 3);
269
+ if ($this->next_pos(']', false) !== self::TOK_UNKNOWN) {
270
+ $this->addError('"]" not found in conditional tag');
271
+ return false;
272
+ }
273
+ $this->status['tag_condition'] = $this->getTokenString(0, -1);
274
+ }
275
+
276
+ if ($this->next_no_whitespace() !== self::TOK_TAG_CLOSE) {
277
+ $this->addError('No ">" tag found 2 for conditional tag');
278
+ return false;
279
+ }
280
+
281
+ if ($this->status['comment']) {
282
+ $this->status['last_pos'] = $this->pos;
283
+ if ($this->next_pos('-->', false) !== self::TOK_UNKNOWN) {
284
+ $this->addError('No ending tag found for conditional tag');
285
+ $this->pos = $this->size - 1;
286
+
287
+ $len = $this->pos - 1 - $this->status['last_pos'];
288
+ $this->status['text'] = (($len > 0) ? substr($this->doc, $this->status['last_pos'] + 1, $len) : '');
289
+ } else {
290
+ $len = $this->pos - 10 - $this->status['last_pos'];
291
+ $this->status['text'] = (($len > 0) ? substr($this->doc, $this->status['last_pos'] + 1, $len) : '');
292
+ $this->pos += 2;
293
+ }
294
+ }
295
+
296
+ $this->status['last_pos'] = $this->pos;
297
+ return true;
298
+ }
299
+
300
+ /**
301
+ * Parse attributes (names + value)
302
+ * @internal Stores attributes in {@link $status}[attributes] (array(ATTR => VAL))
303
+ * @return bool
304
+ */
305
+ function parse_attributes() {
306
+ $this->status['attributes'] = array();
307
+
308
+ while ($this->next_no_whitespace() === self::TOK_IDENTIFIER) {
309
+ $attr = $this->getTokenString();
310
+ if (($attr === '?') || ($attr === '%')) {
311
+ //Probably closing tags
312
+ break;
313
+ }
314
+
315
+ if ($this->next_no_whitespace() === self::TOK_EQUALS) {
316
+ if ($this->next_no_whitespace() === self::TOK_STRING) {
317
+ $val = $this->getTokenString(1, -1);
318
+ } else {
319
+ $this->token_start = $this->pos;
320
+ if (!isset($stop)) {
321
+ $stop = $this->whitespace;
322
+ $stop['<'] = true;
323
+ $stop['>'] = true;
324
+ }
325
+
326
+ while ((++$this->pos < $this->size) && (!isset($stop[$this->doc[$this->pos]]))) {
327
+ // Do nothing.
328
+ }
329
+ --$this->pos;
330
+
331
+ $val = $this->getTokenString();
332
+
333
+ if (trim($val) === '') {
334
+ $this->addError('Invalid attribute value');
335
+ return false;
336
+ }
337
+ }
338
+ } else {
339
+ $val = $attr;
340
+ $this->pos = (($this->token_start) ? $this->token_start : $this->pos) - 1;
341
+ }
342
+
343
+ $this->status['attributes'][$attr] = $val;
344
+ }
345
+
346
+ return true;
347
+ }
348
+
349
+ /**
350
+ * Default callback for tags
351
+ * @internal Gets called after the tagname (<html*ENTERS_HERE* attribute="value">)
352
+ * @return bool
353
+ */
354
+ function parse_tag_default() {
355
+ if ($this->status['closing_tag']) {
356
+ $this->status['attributes'] = array();
357
+ $this->next_no_whitespace();
358
+ } else {
359
+ if (!$this->parse_attributes()) {
360
+ return false;
361
+ }
362
+ }
363
+
364
+ if ($this->token !== self::TOK_TAG_CLOSE) {
365
+ if ($this->token === self::TOK_SLASH_FORWARD) {
366
+ $this->status['self_close'] = true;
367
+ $this->next();
368
+ } elseif ((($this->status['tag_name'][0] === '?') && ($this->doc[$this->pos] === '?')) || (($this->status['tag_name'][0] === '%') && ($this->doc[$this->pos] === '%'))) {
369
+ $this->status['self_close'] = true;
370
+ $this->pos++;
371
+
372
+ if (isset($this->char_map[$this->doc[$this->pos]]) && (!is_string($this->char_map[$this->doc[$this->pos]]))) {
373
+ $this->token = $this->char_map[$this->doc[$this->pos]];
374
+ } else {
375
+ $this->token = self::TOK_UNKNOWN;
376
+ }
377
+ }/* else {
378
+ $this->status['self_close'] = false;
379
+ }*/
380
+ }
381
+
382
+ if ($this->token !== self::TOK_TAG_CLOSE) {
383
+ $this->addError('Expected ">", but found "'.$this->getTokenString().'"');
384
+ if ($this->next_pos('>', false) !== self::TOK_UNKNOWN) {
385
+ $this->addError('No ">" tag found for "'.$this->status['tag_name'].'" tag');
386
+ return false;
387
+ }
388
+ }
389
+
390
+ return true;
391
+ }
392
+
393
+ /**
394
+ * Parse tag
395
+ * @internal Gets called after opening tag (<*ENTERS_HERE*html attribute="value">)
396
+ * @internal Stores information about the tag in {@link $status} (comment, closing_tag, tag_name)
397
+ * @return bool
398
+ */
399
+ function parse_tag() {
400
+ $start = $this->pos;
401
+ $this->status['self_close'] = false;
402
+ $this->parse_text();
403
+
404
+ $next = (($this->pos + 1) < $this->size) ? $this->doc[$this->pos + 1] : '';
405
+ if ($next === '!') {
406
+ $this->status['closing_tag'] = false;
407
+
408
+ if (substr($this->doc, $this->pos + 2, 2) === '--') {
409
+ $this->status['comment'] = true;
410
+
411
+ if (($this->doc[$this->pos + 4] === '[') && (strcasecmp(substr($this->doc, $this->pos + 5, 2), 'if') === 0)) {
412
+ return $this->parse_conditional();
413
+ } else {
414
+ return $this->parse_comment();
415
+ }
416
+ } else {
417
+ $this->status['comment'] = false;
418
+
419
+ if ($this->doc[$this->pos + 2] === '[') {
420
+ if (strcasecmp(substr($this->doc, $this->pos + 3, 2), 'if') === 0) {
421
+ return $this->parse_conditional();
422
+ } elseif (strcasecmp(substr($this->doc, $this->pos + 3, 5), 'endif') === 0) {
423
+ $this->status['closing_tag'] = true;
424
+ return $this->parse_conditional();
425
+ } elseif (strcasecmp(substr($this->doc, $this->pos + 3, 5), 'cdata') === 0) {
426
+ return $this->parse_cdata();
427
+ }
428
+ }
429
+ }
430
+ } elseif ($next === '/') {
431
+ $this->status['closing_tag'] = true;
432
+ ++$this->pos;
433
+ } else {
434
+ $this->status['closing_tag'] = false;
435
+ }
436
+
437
+ if ($this->next() !== self::TOK_IDENTIFIER) {
438
+ $this->addError('Tagname expected');
439
+ //if ($this->next_pos('>', false) === self::TOK_UNKNOWN) {
440
+ $this->status['last_pos'] = $start - 1;
441
+ return true;
442
+ //} else {
443
+ // return false;
444
+ //}
445
+ }
446
+
447
+ $tag = $this->getTokenString();
448
+ $this->status['tag_name'] = $tag;
449
+ $tag = strtolower($tag);
450
+
451
+ if (isset($this->tag_map[$tag])) {
452
+ $res = $this->{$this->tag_map[$tag]}();
453
+ } else {
454
+ $res = $this->parse_tag_default();
455
+ }
456
+
457
+ $this->status['last_pos'] = $this->pos;
458
+ return $res;
459
+ }
460
+
461
+ /**
462
+ * Parse full document
463
+ * @return bool
464
+ */
465
+ function parse_all() {
466
+ $this->errors = array();
467
+ $this->status['last_pos'] = -1;
468
+
469
+ if (($this->token === self::TOK_TAG_OPEN) || ($this->next_pos('<', false) === self::TOK_UNKNOWN)) {
470
+ do {
471
+ if (!$this->parse_tag()) {
472
+ return false;
473
+ }
474
+ } while ($this->next_pos('<') !== self::TOK_NULL);
475
+ }
476
+
477
+ $this->pos = $this->size;
478
+ $this->parse_text();
479
+
480
+ return true;
481
+ }
482
+ }
483
+
484
+ /**
485
+ * Parses a HTML document into a HTML DOM
486
+ */
487
+ class HtmlParser extends HtmlParserBase {
488
+
489
+ /**
490
+ * Root object
491
+ * @internal If string, then it will create a new instance as root
492
+ * @var DomNode
493
+ */
494
+ var $root = 'MailPoetVendor\\pQuery\\DomNode';
495
+
496
+ /**
497
+ * Current parsing hierarchy
498
+ * @internal Root is always at index 0, current tag is at the end of the array
499
+ * @var array
500
+ * @access private
501
+ */
502
+ var $hierarchy = array();
503
+
504
+ /**
505
+ * Tags that don't need closing tags
506
+ * @var array
507
+ * @access private
508
+ */
509
+ var $tags_selfclose = array(
510
+ 'area' => true,
511
+ 'base' => true,
512
+ 'basefont' => true,
513
+ 'br' => true,
514
+ 'col' => true,
515
+ 'command' => true,
516
+ 'embed' => true,
517
+ 'frame' => true,
518
+ 'hr' => true,
519
+ 'img' => true,
520
+ 'input' => true,
521
+ 'ins' => true,
522
+ 'keygen' => true,
523
+ 'link' => true,
524
+ 'meta' => true,
525
+ 'param' => true,
526
+ 'source' => true,
527
+ 'track' => true,
528
+ 'wbr' => true
529
+ );
530
+
531
+ /**
532
+ * Class constructor
533
+ * @param string $doc Document to be tokenized
534
+ * @param int $pos Position to start parsing
535
+ * @param DomNode $root Root node, null to auto create
536
+ */
537
+ function __construct($doc = '', $pos = 0, $root = null) {
538
+ if ($root === null) {
539
+ $root = new $this->root('~root~', null);
540
+ }
541
+ $this->root =& $root;
542
+
543
+ parent::__construct($doc, $pos);
544
+ }
545
+
546
+ #php4 PHP4 class constructor compatibility
547
+ #function HtmlParser($doc = '', $pos = 0, $root = null) {return $this->__construct($doc, $pos, $root);}
548
+ #php4e
549
+
550
+ /**
551
+ * Class magic invoke method, performs {@link select()}
552
+ * @return array
553
+ * @access private
554
+ */
555
+ function __invoke($query = '*') {
556
+ return $this->select($query);
557
+ }
558
+
559
+ /**
560
+ * Class magic toString method, performs {@link DomNode::toString()}
561
+ * @return string
562
+ * @access private
563
+ */
564
+ function __toString() {
565
+ return $this->root->getInnerText();
566
+ }
567
+
568
+ /**
569
+ * Performs a css select query on the root node
570
+ * @see DomNode::select()
571
+ * @return array
572
+ */
573
+ function select($query = '*', $index = false, $recursive = true, $check_self = false) {
574
+ return $this->root->select($query, $index, $recursive, $check_self);
575
+ }
576
+
577
+ /**
578
+ * Updates the current hierarchy status and checks for
579
+ * correct opening/closing of tags
580
+ * @param bool $self_close Is current tag self closing? Null to use {@link tags_selfclose}
581
+ * @internal This is were most of the nodes get added
582
+ * @access private
583
+ */
584
+ protected function parse_hierarchy($self_close = null) {
585
+ if ($self_close === null) {
586
+ $this->status['self_close'] = ($self_close = isset($this->tags_selfclose[strtolower($this->status['tag_name'])]));
587
+ }
588
+
589
+ if ($self_close) {
590
+ if ($this->status['closing_tag']) {
591
+
592
+ //$c = end($this->hierarchy)->children
593
+ $c = $this->hierarchy[count($this->hierarchy) - 1]->children;
594
+ $found = false;
595
+ for ($count = count($c), $i = $count - 1; $i >= 0; $i--) {
596
+ if (strcasecmp($c[$i]->tag, $this->status['tag_name']) === 0) {
597
+ for($ii = $i + 1; $ii < $count; $ii++) {
598
+ $index = null; //Needs to be passed by ref
599
+ $c[$i + 1]->changeParent($c[$i], $index);
600
+ }
601
+ $c[$i]->self_close = false;
602
+
603
+ $found = true;
604
+ break;
605
+ }
606
+ }
607
+
608
+ if (!$found) {
609
+ $this->addError('Closing tag "'.$this->status['tag_name'].'" which is not open');
610
+ }
611
+
612
+ } elseif ($this->status['tag_name'][0] === '?') {
613
+ //end($this->hierarchy)->addXML($this->status['tag_name'], '', $this->status['attributes']);
614
+ $index = null; //Needs to be passed by ref
615
+ $this->hierarchy[count($this->hierarchy) - 1]->addXML($this->status['tag_name'], '', $this->status['attributes'], $index);
616
+ } elseif ($this->status['tag_name'][0] === '%') {
617
+ //end($this->hierarchy)->addASP($this->status['tag_name'], '', $this->status['attributes']);
618
+ $index = null; //Needs to be passed by ref
619
+ $this->hierarchy[count($this->hierarchy) - 1]->addASP($this->status['tag_name'], '', $this->status['attributes'], $index);
620
+ } else {
621
+ //end($this->hierarchy)->addChild($this->status);
622
+ $index = null; //Needs to be passed by ref
623
+ $this->hierarchy[count($this->hierarchy) - 1]->addChild($this->status, $index);
624
+ }
625
+ } elseif ($this->status['closing_tag']) {
626
+ $found = false;
627
+ for ($count = count($this->hierarchy), $i = $count - 1; $i >= 0; $i--) {
628
+ if (strcasecmp($this->hierarchy[$i]->tag, $this->status['tag_name']) === 0) {
629
+
630
+ for($ii = ($count - $i - 1); $ii >= 0; $ii--) {
631
+ $e = array_pop($this->hierarchy);
632
+ if ($ii > 0) {
633
+ $this->addError('Closing tag "'.$this->status['tag_name'].'" while "'.$e->tag.'" is not closed yet');
634
+ }
635
+ }
636
+
637
+ $found = true;
638
+ break;
639
+ }
640
+ }
641
+
642
+ if (!$found) {
643
+ $this->addError('Closing tag "'.$this->status['tag_name'].'" which is not open');
644
+ }
645
+
646
+ } else {
647
+ //$this->hierarchy[] = end($this->hierarchy)->addChild($this->status);
648
+ $index = null; //Needs to be passed by ref
649
+ $this->hierarchy[] = $this->hierarchy[count($this->hierarchy) - 1]->addChild($this->status, $index);
650
+ }
651
+ }
652
+
653
+ function parse_cdata() {
654
+ if (!parent::parse_cdata()) {return false;}
655
+
656
+ //end($this->hierarchy)->addCDATA($this->status['cdata']);
657
+ $index = null; //Needs to be passed by ref
658
+ $this->hierarchy[count($this->hierarchy) - 1]->addCDATA($this->status['cdata'], $index);
659
+ return true;
660
+ }
661
+
662
+ function parse_comment() {
663
+ if (!parent::parse_comment()) {return false;}
664
+
665
+ //end($this->hierarchy)->addComment($this->status['comment']);
666
+ $index = null; //Needs to be passed by ref
667
+ $this->hierarchy[count($this->hierarchy) - 1]->addComment($this->status['comment'], $index);
668
+ return true;
669
+ }
670
+
671
+ function parse_conditional() {
672
+ if (!parent::parse_conditional()) {return false;}
673
+
674
+ if ($this->status['comment']) {
675
+ //$e = end($this->hierarchy)->addConditional($this->status['tag_condition'], true);
676
+ $index = null; //Needs to be passed by ref
677
+ $e = $this->hierarchy[count($this->hierarchy) - 1]->addConditional($this->status['tag_condition'], true, $index);
678
+ if ($this->status['text'] !== '') {
679
+ $index = null; //Needs to be passed by ref
680
+ $e->addText($this->status['text'], $index);
681
+ }
682
+ } else {
683
+ if ($this->status['closing_tag']) {
684
+ $this->parse_hierarchy(false);
685
+ } else {
686
+ //$this->hierarchy[] = end($this->hierarchy)->addConditional($this->status['tag_condition'], false);
687
+ $index = null; //Needs to be passed by ref
688
+ $this->hierarchy[] = $this->hierarchy[count($this->hierarchy) - 1]->addConditional($this->status['tag_condition'], false, $index);
689
+ }
690
+ }
691
+
692
+ return true;
693
+ }
694
+
695
+ function parse_doctype() {
696
+ if (!parent::parse_doctype()) {return false;}
697
+
698
+ //end($this->hierarchy)->addDoctype($this->status['dtd']);
699
+ $index = null; //Needs to be passed by ref
700
+ $this->hierarchy[count($this->hierarchy) - 1]->addDoctype($this->status['dtd'], $index);
701
+ return true;
702
+ }
703
+
704
+ function parse_php() {
705
+ if (!parent::parse_php()) {return false;}
706
+
707
+ //end($this->hierarchy)->addXML('php', $this->status['text']);
708
+ $index = null; //Needs to be passed by ref
709
+ $this->hierarchy[count($this->hierarchy) - 1]->addXML('php', $this->status['text'], $index);
710
+ return true;
711
+ }
712
+
713
+ function parse_asp() {
714
+ if (!parent::parse_asp()) {return false;}
715
+
716
+ //end($this->hierarchy)->addASP('', $this->status['text']);
717
+ $index = null; //Needs to be passed by ref
718
+ $this->hierarchy[count($this->hierarchy) - 1]->addASP('', $this->status['text'], $index);
719
+ return true;
720
+ }
721
+
722
+ function parse_script() {
723
+ if (!parent::parse_script()) {return false;}
724
+
725
+ //$e = end($this->hierarchy)->addChild($this->status);
726
+ $index = null; //Needs to be passed by ref
727
+ $e = $this->hierarchy[count($this->hierarchy) - 1]->addChild($this->status, $index);
728
+ if ($this->status['text'] !== '') {
729
+ $index = null; //Needs to be passed by ref
730
+ $e->addText($this->status['text'], $index);
731
+ }
732
+ return true;
733
+ }
734
+
735
+ function parse_style() {
736
+ if (!parent::parse_style()) {return false;}
737
+
738
+ //$e = end($this->hierarchy)->addChild($this->status);
739
+ $index = null; //Needs to be passed by ref
740
+ $e = $this->hierarchy[count($this->hierarchy) - 1]->addChild($this->status, $index);
741
+ if ($this->status['text'] !== '') {
742
+ $index = null; //Needs to be passed by ref
743
+ $e->addText($this->status['text'], $index);
744
+ }
745
+ return true;
746
+ }
747
+
748
+ function parse_tag_default() {
749
+ if (!parent::parse_tag_default()) {return false;}
750
+
751
+ $this->parse_hierarchy(($this->status['self_close']) ? true : null);
752
+ return true;
753
+ }
754
+
755
+ function parse_text() {
756
+ parent::parse_text();
757
+ if ($this->status['text'] !== '') {
758
+ //end($this->hierarchy)->addText($this->status['text']);
759
+ $index = null; //Needs to be passed by ref
760
+ $this->hierarchy[count($this->hierarchy) - 1]->addText($this->status['text'], $index);
761
+ }
762
+ }
763
+
764
+ function parse_all() {
765
+ $this->hierarchy = array(&$this->root);
766
+ return ((parent::parse_all()) ? $this->root : false);
767
+ }
768
+ }
769
+
770
+ /**
771
+ * HTML5 specific parser (adds support for omittable closing tags)
772
+ */
773
+ class Html5Parser extends HtmlParser {
774
+
775
+ /**
776
+ * Tags with ommitable closing tags
777
+ * @var array array('tag2' => 'tag1') will close tag1 if following (not child) tag is tag2
778
+ * @access private
779
+ */
780
+ var $tags_optional_close = array(
781
+ //Current tag => Previous tag
782
+ 'li' => array('li' => true),
783
+ 'dt' => array('dt' => true, 'dd' => true),
784
+ 'dd' => array('dt' => true, 'dd' => true),
785
+ 'address' => array('p' => true),
786
+ 'article' => array('p' => true),
787
+ 'aside' => array('p' => true),
788
+ 'blockquote' => array('p' => true),
789
+ 'dir' => array('p' => true),
790
+ 'div' => array('p' => true),
791
+ 'dl' => array('p' => true),
792
+ 'fieldset' => array('p' => true),
793
+ 'footer' => array('p' => true),
794
+ 'form' => array('p' => true),
795
+ 'h1' => array('p' => true),
796
+ 'h2' => array('p' => true),
797
+ 'h3' => array('p' => true),
798
+ 'h4' => array('p' => true),
799
+ 'h5' => array('p' => true),
800
+ 'h6' => array('p' => true),
801
+ 'header' => array('p' => true),
802
+ 'hgroup' => array('p' => true),
803
+ 'hr' => array('p' => true),
804
+ 'menu' => array('p' => true),
805
+ 'nav' => array('p' => true),
806
+ 'ol' => array('p' => true),
807
+ 'p' => array('p' => true),
808
+ 'pre' => array('p' => true),
809
+ 'section' => array('p' => true),
810
+ 'table' => array('p' => true),
811
+ 'ul' => array('p' => true),
812
+ 'rt' => array('rt' => true, 'rp' => true),
813
+ 'rp' => array('rt' => true, 'rp' => true),
814
+ 'optgroup' => array('optgroup' => true, 'option' => true),
815
+ 'option' => array('option'),
816
+ 'tbody' => array('thread' => true, 'tbody' => true, 'tfoot' => true),
817
+ 'tfoot' => array('thread' => true, 'tbody' => true),
818
+ 'tr' => array('tr' => true),
819
+ 'td' => array('td' => true, 'th' => true),
820
+ 'th' => array('td' => true, 'th' => true),
821
+ 'body' => array('head' => true)
822
+ );
823
+
824
+ protected function parse_hierarchy($self_close = null) {
825
+ $tag_curr = strtolower($this->status['tag_name']);
826
+ if ($self_close === null) {
827
+ $this->status['self_close'] = ($self_close = isset($this->tags_selfclose[$tag_curr]));
828
+ }
829
+
830
+ if (! ($self_close || $this->status['closing_tag'])) {
831
+ //$tag_prev = strtolower(end($this->hierarchy)->tag);
832
+ $tag_prev = strtolower($this->hierarchy[count($this->hierarchy) - 1]->tag);
833
+ if (isset($this->tags_optional_close[$tag_curr]) && isset($this->tags_optional_close[$tag_curr][$tag_prev])) {
834
+ array_pop($this->hierarchy);
835
+ }
836
+ }
837
+
838
+ return parent::parse_hierarchy($self_close);
839
+ }
840
+ }
lib-3rd-party/pquery/gan_selector_html.php ADDED
@@ -0,0 +1,950 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @author Niels A.D.
4
+ * @author Todd Burry <todd@vanillaforums.com>
5
+ * @copyright 2010 Niels A.D., 2014 Todd Burry
6
+ * @license http://opensource.org/licenses/LGPL-2.1 LGPL-2.1
7
+ * @package pQuery
8
+ */
9
+
10
+ namespace MailPoetVendor\pQuery;
11
+
12
+ if (!defined('ABSPATH')) exit;
13
+
14
+
15
+ /**
16
+ * Tokenizes a css selector query
17
+ */
18
+ class CSSQueryTokenizer extends TokenizerBase {
19
+
20
+ /**
21
+ * Opening bracket token, used for "["
22
+ */
23
+ const TOK_BRACKET_OPEN = 100;
24
+ /**
25
+ * Closing bracket token, used for "]"
26
+ */
27
+ const TOK_BRACKET_CLOSE = 101;
28
+ /**
29
+ * Opening brace token, used for "("
30
+ */
31
+ const TOK_BRACE_OPEN = 102;
32
+ /**
33
+ * Closing brace token, used for ")"
34
+ */
35
+ const TOK_BRACE_CLOSE = 103;
36
+ /**
37
+ * String token
38
+ */
39
+ const TOK_STRING = 104;
40
+ /**
41
+ * Colon token, used for ":"
42
+ */
43
+ const TOK_COLON = 105;
44
+ /**
45
+ * Comma token, used for ","
46
+ */
47
+ const TOK_COMMA = 106;
48
+ /**
49
+ * "Not" token, used for "!"
50
+ */
51
+ const TOK_NOT = 107;
52
+
53
+ /**
54
+ * "All" token, used for "*" in query
55
+ */
56
+ const TOK_ALL = 108;
57
+ /**
58
+ * Pipe token, used for "|"
59
+ */
60
+ const TOK_PIPE = 109;
61
+ /**
62
+ * Plus token, used for "+"
63
+ */
64
+ const TOK_PLUS = 110;
65
+ /**
66
+ * "Sibling" token, used for "~" in query
67
+ */
68
+ const TOK_SIBLING = 111;
69
+ /**
70
+ * Class token, used for "." in query
71
+ */
72
+ const TOK_CLASS = 112;
73
+ /**
74
+ * ID token, used for "#" in query
75
+ */
76
+ const TOK_ID = 113;
77
+ /**
78
+ * Child token, used for ">" in query
79
+ */
80
+ const TOK_CHILD = 114;
81
+
82
+ /**
83
+ * Attribute compare prefix token, used for "|="
84
+ */
85
+ const TOK_COMPARE_PREFIX = 115;
86
+ /**
87
+ * Attribute contains token, used for "*="
88
+ */
89
+ const TOK_COMPARE_CONTAINS = 116;
90
+ /**
91
+ * Attribute contains word token, used for "~="
92
+ */
93
+ const TOK_COMPARE_CONTAINS_WORD = 117;
94
+ /**
95
+ * Attribute compare end token, used for "$="
96
+ */
97
+ const TOK_COMPARE_ENDS = 118;
98
+ /**
99
+ * Attribute equals token, used for "="
100
+ */
101
+ const TOK_COMPARE_EQUALS = 119;
102
+ /**
103
+ * Attribute not equal token, used for "!="
104
+ */
105
+ const TOK_COMPARE_NOT_EQUAL = 120;
106
+ /**
107
+ * Attribute compare bigger than token, used for ">="
108
+ */
109
+ const TOK_COMPARE_BIGGER_THAN = 121;
110
+ /**
111
+ * Attribute compare smaller than token, used for "<="
112
+ */
113
+ const TOK_COMPARE_SMALLER_THAN = 122;
114
+ /**
115
+ * Attribute compare with regex, used for "%="
116
+ */
117
+ const TOK_COMPARE_REGEX = 123;
118
+ /**
119
+ * Attribute compare start token, used for "^="
120
+ */
121
+ const TOK_COMPARE_STARTS = 124;
122
+
123
+ /**
124
+ * Sets query identifiers
125
+ * @see TokenizerBase::$identifiers
126
+ * @access private
127
+ */
128
+ var $identifiers = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_-?';
129
+
130
+ /**
131
+ * Map characters to match their tokens
132
+ * @see TokenizerBase::$custom_char_map
133
+ * @access private
134
+ */
135
+ var $custom_char_map = array(
136
+ '.' => self::TOK_CLASS,
137
+ '#' => self::TOK_ID,
138
+ ',' => self::TOK_COMMA,
139
+ '>' => 'parse_gt',//self::TOK_CHILD,
140
+
141
+ '+' => self::TOK_PLUS,
142
+ '~' => 'parse_sibling',
143
+
144
+ '|' => 'parse_pipe',
145
+ '*' => 'parse_star',
146
+ '$' => 'parse_compare',
147
+ '=' => self::TOK_COMPARE_EQUALS,
148
+ '!' => 'parse_not',
149
+ '%' => 'parse_compare',
150
+ '^' => 'parse_compare',
151
+ '<' => 'parse_compare',
152
+
153
+ '"' => 'parse_string',
154
+ "'" => 'parse_string',
155
+ '(' => self::TOK_BRACE_OPEN,
156
+ ')' => self::TOK_BRACE_CLOSE,
157
+ '[' => self::TOK_BRACKET_OPEN,
158
+ ']' => self::TOK_BRACKET_CLOSE,
159
+ ':' => self::TOK_COLON
160
+ );
161
+
162
+ /**
163
+ * Parse ">" character
164
+ * @internal Could be {@link TOK_CHILD} or {@link TOK_COMPARE_BIGGER_THAN}
165
+ * @return int
166
+ */
167
+ protected function parse_gt() {
168
+ if ((($this->pos + 1) < $this->size) && ($this->doc[$this->pos + 1] === '=')) {
169
+ ++$this->pos;
170
+ return ($this->token = self::TOK_COMPARE_BIGGER_THAN);
171
+ } else {
172
+ return ($this->token = self::TOK_CHILD);
173
+ }
174
+ }
175
+
176
+ /**
177
+ * Parse "~" character
178
+ * @internal Could be {@link TOK_SIBLING} or {@link TOK_COMPARE_CONTAINS_WORD}
179
+ * @return int
180
+ */
181
+ protected function parse_sibling() {
182
+ if ((($this->pos + 1) < $this->size) && ($this->doc[$this->pos + 1] === '=')) {
183
+ ++$this->pos;
184
+ return ($this->token = self::TOK_COMPARE_CONTAINS_WORD);
185
+ } else {
186
+ return ($this->token = self::TOK_SIBLING);
187
+ }
188
+ }
189
+
190
+ /**
191
+ * Parse "|" character
192
+ * @internal Could be {@link TOK_PIPE} or {@link TOK_COMPARE_PREFIX}
193
+ * @return int
194
+ */
195
+ protected function parse_pipe() {
196
+ if ((($this->pos + 1) < $this->size) && ($this->doc[$this->pos + 1] === '=')) {
197
+ ++$this->pos;
198
+ return ($this->token = self::TOK_COMPARE_PREFIX);
199
+ } else {
200
+ return ($this->token = self::TOK_PIPE);
201
+ }
202
+ }
203
+
204
+ /**
205
+ * Parse "*" character
206
+ * @internal Could be {@link TOK_ALL} or {@link TOK_COMPARE_CONTAINS}
207
+ * @return int
208
+ */
209
+ protected function parse_star() {
210
+ if ((($this->pos + 1) < $this->size) && ($this->doc[$this->pos + 1] === '=')) {
211
+ ++$this->pos;
212
+ return ($this->token = self::TOK_COMPARE_CONTAINS);
213
+ } else {
214
+ return ($this->token = self::TOK_ALL);
215
+ }
216
+ }
217
+
218
+ /**
219
+ * Parse "!" character
220
+ * @internal Could be {@link TOK_NOT} or {@link TOK_COMPARE_NOT_EQUAL}
221
+ * @return int
222
+ */
223
+ protected function parse_not() {
224
+ if ((($this->pos + 1) < $this->size) && ($this->doc[$this->pos + 1] === '=')) {
225
+ ++$this->pos;
226
+ return ($this->token = self::TOK_COMPARE_NOT_EQUAL);
227
+ } else {
228
+ return ($this->token = self::TOK_NOT);
229
+ }
230
+ }
231
+
232
+ /**
233
+ * Parse several compare characters
234
+ * @return int
235
+ */
236
+ protected function parse_compare() {
237
+ if ((($this->pos + 1) < $this->size) && ($this->doc[$this->pos + 1] === '=')) {
238
+ switch($this->doc[$this->pos++]) {
239
+ case '$':
240
+ return ($this->token = self::TOK_COMPARE_ENDS);
241
+ case '%':
242
+ return ($this->token = self::TOK_COMPARE_REGEX);
243
+ case '^':
244
+ return ($this->token = self::TOK_COMPARE_STARTS);
245
+ case '<':
246
+ return ($this->token = self::TOK_COMPARE_SMALLER_THAN);
247
+ }
248
+ }
249
+ return false;
250
+ }
251
+
252
+ /**
253
+ * Parse strings (" and ')
254
+ * @return int
255
+ */
256
+ protected function parse_string() {
257
+ $char = $this->doc[$this->pos];
258
+
259
+ while (true) {
260
+ if ($this->next_search($char.'\\', false) !== self::TOK_NULL) {
261
+ if($this->doc[$this->pos] === $char) {
262
+ break;
263
+ } else {
264
+ ++$this->pos;
265
+ }
266
+ } else {
267
+ $this->pos = $this->size - 1;
268
+ break;
269
+ }
270
+ }
271
+
272
+ return ($this->token = self::TOK_STRING);
273
+ }
274
+
275
+ }
276
+
277
+ /**
278
+ * Performs a css select query on HTML nodes
279
+ */
280
+ class HtmlSelector {
281
+
282
+ /**
283
+ * Parser object
284
+ * @internal If string, then it will create a new instance as parser
285
+ * @var CSSQueryTokenizer
286
+ */
287
+ var $parser = 'MailPoetVendor\\pQuery\\CSSQueryTokenizer';
288
+
289
+ /**
290
+ * Target of queries
291
+ * @var DomNode
292
+ */
293
+ var $root = null;
294
+
295
+ /**
296
+ * Last performed query, result in {@link $result}
297
+ * @var string
298
+ */
299
+ var $query = '';
300
+
301
+ /**
302
+ * Array of matching nodes
303
+ * @var array
304
+ */
305
+ var $result = array();
306
+
307
+ /**
308
+ * Include root in search, if false the only child nodes are evaluated
309
+ * @var bool
310
+ */
311
+ var $search_root = false;
312
+
313
+ /**
314
+ * Search recursively
315
+ * @var bool
316
+ */
317
+ var $search_recursive = true;
318
+
319
+ /**
320
+ * Extra function map for custom filters
321
+ * @var array
322
+ * @internal array('root' => 'filter_root') will cause the
323
+ * selector to call $this->filter_root at :root
324
+ * @see DomNode::$filter_map
325
+ */
326
+ var $custom_filter_map = array();
327
+
328
+ /**
329
+ * Class constructor
330
+ * @param DomNode $root {@link $root}
331
+ * @param string $query
332
+ * @param bool $search_root {@link $search_root}
333
+ * @param bool $search_recursive {@link $search_recursive}
334
+ * @param CSSQueryTokenizer $parser If null, then default class will be used
335
+ */
336
+ function __construct($root, $query = '*', $search_root = false, $search_recursive = true, $parser = null) {
337
+ if ($parser === null) {
338
+ $parser = new $this->parser();
339
+ }
340
+ $this->parser = $parser;
341
+ $this->root =& $root;
342
+
343
+ $this->search_root = $search_root;
344
+ $this->search_recursive = $search_recursive;
345
+
346
+ $this->select($query);
347
+ }
348
+
349
+ #php4 PHP4 class constructor compatibility
350
+ #function HtmlSelector($root, $query = '*', $search_root = false, $search_recursive = true, $parser = null) {return $this->__construct($root, $query, $search_root, $search_recursive, $parser);}
351
+ #php4e
352
+
353
+ /**
354
+ * toString method, returns {@link $query}
355
+ * @return string
356
+ * @access private
357
+ */
358
+ function __toString() {
359
+ return $this->query;
360
+ }
361
+
362
+ /**
363
+ * Class magic invoke method, performs {@link select()}
364
+ * @return array
365
+ * @access private
366
+ */
367
+ function __invoke($query = '*') {
368
+ return $this->select($query);
369
+ }
370
+
371
+ /**
372
+ * Perform query
373
+ * @param string $query
374
+ * @return array False on failure
375
+ */
376
+ function select($query = '*') {
377
+ $this->parser->setDoc($query);
378
+ $this->query = $query;
379
+ return (($this->parse()) ? $this->result : false);
380
+ }
381
+
382
+ /**
383
+ * Trigger error
384
+ * @param string $error
385
+ * @internal %pos% and %tok% will be replace in string with position and token(string)
386
+ * @access private
387
+ */
388
+ protected function error($error) {
389
+ $error = htmlentities(str_replace(
390
+ array('%tok%', '%pos%'),
391
+ array($this->parser->getTokenString(), (int) $this->parser->getPos()),
392
+ $error
393
+ ));
394
+
395
+ trigger_error($error);
396
+ }
397
+
398
+ /**
399
+ * Get identifier (parse identifier or string)
400
+ * @param bool $do_error Error on failure
401
+ * @return string False on failure
402
+ * @access private
403
+ */
404
+ protected function parse_getIdentifier($do_error = true) {
405
+ $p =& $this->parser;
406
+ $tok = $p->token;
407
+
408
+ if ($tok === CSSQueryTokenizer::TOK_IDENTIFIER) {
409
+ return $p->getTokenString();
410
+ } elseif($tok === CSSQueryTokenizer::TOK_STRING) {
411
+ return str_replace(array('\\\'', '\\"', '\\\\'), array('\'', '"', '\\'), $p->getTokenString(1, -1));
412
+ } elseif ($do_error) {
413
+ $this->error('Expected identifier at %pos%!');
414
+ }
415
+ return false;
416
+ }
417
+
418
+ /**
419
+ * Get query conditions (tag, attribute and filter conditions)
420
+ * @return array False on failure
421
+ * @see DomNode::match()
422
+ * @access private
423
+ */
424
+ protected function parse_conditions() {
425
+ $p =& $this->parser;
426
+ $tok = $p->token;
427
+
428
+ if ($tok === CSSQueryTokenizer::TOK_NULL) {
429
+ $this->error('Invalid search pattern(1): Empty string!');
430
+ return false;
431
+ }
432
+ $conditions_all = array();
433
+
434
+ //Tags
435
+ while ($tok !== CSSQueryTokenizer::TOK_NULL) {
436
+ $conditions = array('tags' => array(), 'attributes' => array());
437
+
438
+ if ($tok === CSSQueryTokenizer::TOK_ALL) {
439
+ $tok = $p->next();
440
+ if (($tok === CSSQueryTokenizer::TOK_PIPE) && ($tok = $p->next()) && ($tok !== CSSQueryTokenizer::TOK_ALL)) {
441
+ if (($tag = $this->parse_getIdentifier()) === false) {
442
+ return false;
443
+ }
444
+ $conditions['tags'][] = array(
445
+ 'tag' => $tag,
446
+ 'compare' => 'name'
447
+ );
448
+ $tok = $p->next_no_whitespace();
449
+ } else {
450
+ $conditions['tags'][''] = array(
451
+ 'tag' => '',
452
+ 'match' => false
453
+ );
454
+ if ($tok === CSSQueryTokenizer::TOK_ALL) {
455
+ $tok = $p->next_no_whitespace();
456
+ }
457
+ }
458
+ } elseif ($tok === CSSQueryTokenizer::TOK_PIPE) {
459
+ $tok = $p->next();
460
+ if ($tok === CSSQueryTokenizer::TOK_ALL) {
461
+ $conditions['tags'][] = array(
462
+ 'tag' => '',
463
+ 'compare' => 'namespace',
464
+ );
465
+ } elseif (($tag = $this->parse_getIdentifier()) !== false) {
466
+ $conditions['tags'][] = array(
467
+ 'tag' => $tag,
468
+ 'compare' => 'total',
469
+ );
470
+ } else {
471
+ return false;
472
+ }
473
+ $tok = $p->next_no_whitespace();
474
+ } elseif ($tok === CSSQueryTokenizer::TOK_BRACE_OPEN) {
475
+ $tok = $p->next_no_whitespace();
476
+ $last_mode = 'or';
477
+
478
+ while (true) {
479
+ $match = true;
480
+ $compare = 'total';
481
+
482
+ if ($tok === CSSQueryTokenizer::TOK_NOT) {
483
+ $match = false;
484
+ $tok = $p->next_no_whitespace();
485
+ }
486
+
487
+ if ($tok === CSSQueryTokenizer::TOK_ALL) {
488
+ $tok = $p->next();
489
+ if ($tok === CSSQueryTokenizer::TOK_PIPE) {
490
+ $this->next();
491
+ $compare = 'name';
492
+ if (($tag = $this->parse_getIdentifier()) === false) {
493
+ return false;
494
+ }
495
+ }
496
+ } elseif ($tok === CSSQueryTokenizer::TOK_PIPE) {
497
+ $tok = $p->next();
498
+ if ($tok === CSSQueryTokenizer::TOK_ALL) {
499
+ $tag = '';
500
+ $compare = 'namespace';
501
+ } elseif (($tag = $this->parse_getIdentifier()) === false) {
502
+ return false;
503
+ }
504
+ $tok = $p->next_no_whitespace();
505
+ } else {
506
+ if (($tag = $this->parse_getIdentifier()) === false) {
507
+ return false;
508
+ }
509
+ $tok = $p->next();
510
+ if ($tok === CSSQueryTokenizer::TOK_PIPE) {
511
+ $tok = $p->next();
512
+
513
+ if ($tok === CSSQueryTokenizer::TOK_ALL) {
514
+ $compare = 'namespace';
515
+ } elseif (($tag_name = $this->parse_getIdentifier()) !== false) {
516
+ $tag = $tag.':'.$tag_name;
517
+ } else {
518
+ return false;
519
+ }
520
+
521
+ $tok = $p->next_no_whitespace();
522
+ }
523
+ }
524
+ if ($tok === CSSQueryTokenizer::TOK_WHITESPACE) {
525
+ $tok = $p->next_no_whitespace();
526
+ }
527
+
528
+ $conditions['tags'][] = array(
529
+ 'tag' => $tag,
530
+ 'match' => $match,
531
+ 'operator' => $last_mode,
532
+ 'compare' => $compare
533
+ );
534
+ switch($tok) {
535
+ case CSSQueryTokenizer::TOK_COMMA:
536
+ $tok = $p->next_no_whitespace();
537
+ $last_mode = 'or';
538
+ continue 2;
539
+ case CSSQueryTokenizer::TOK_PLUS:
540
+ $tok = $p->next_no_whitespace();
541
+ $last_mode = 'and';
542
+ continue 2;
543
+ case CSSQueryTokenizer::TOK_BRACE_CLOSE:
544
+ $tok = $p->next();
545
+ break 2;
546
+ default:
547
+ $this->error('Expected closing brace or comma at pos %pos%!');
548
+ return false;
549
+ }
550
+ }
551
+ } elseif (($tag = $this->parse_getIdentifier(false)) !== false) {
552
+ $tok = $p->next();
553
+ if ($tok === CSSQueryTokenizer::TOK_PIPE) {
554
+ $tok = $p->next();
555
+
556
+ if ($tok === CSSQueryTokenizer::TOK_ALL) {
557
+ $conditions['tags'][] = array(
558
+ 'tag' => $tag,
559
+ 'compare' => 'namespace'
560
+ );
561
+ } elseif (($tag_name = $this->parse_getIdentifier()) !== false) {
562
+ $tag = $tag.':'.$tag_name;
563
+ $conditions['tags'][] = array(
564
+ 'tag' => $tag,
565
+ 'match' => true
566
+ );
567
+ } else {
568
+ return false;
569
+ }
570
+
571
+ $tok = $p->next();
572
+ } elseif ($tag === 'text' && $tok === CSSQueryTokenizer::TOK_BRACE_OPEN) {
573
+ $pos = $p->getPos();
574
+ $tok = $p->next();
575
+ if ($tok === CSSQueryTokenizer::TOK_BRACE_CLOSE) {
576
+ $conditions['tags'][] = array(
577
+ 'tag' => '~text~',
578
+ 'match' => true
579
+ );
580
+ $p->next();
581
+ } else {
582
+ $p->setPos($pos);
583
+ }
584
+ } else {
585
+ $conditions['tags'][] = array(
586
+ 'tag' => $tag,
587
+ 'match' => true
588
+ );
589
+ }
590
+ } else {
591
+ unset($conditions['tags']);
592
+ }
593
+
594
+ //Class
595
+ $last_mode = 'or';
596
+ if ($tok === CSSQueryTokenizer::TOK_CLASS) {
597
+ $p->next();
598
+ if (($class = $this->parse_getIdentifier()) === false) {
599
+ return false;
600
+ }
601
+
602
+ $conditions['attributes'][] = array(
603
+ 'attribute' => 'class',
604
+ 'operator_value' => 'contains_word',
605
+ 'value' => $class,
606
+ 'operator_result' => $last_mode
607
+ );
608
+ $last_mode = 'and';
609
+ $tok = $p->next();
610
+ }
611
+
612
+ //ID
613
+ if ($tok === CSSQueryTokenizer::TOK_ID) {
614
+ $p->next();
615
+ if (($id = $this->parse_getIdentifier()) === false) {
616
+ return false;
617
+ }
618
+
619
+ $conditions['attributes'][] = array(
620
+ 'attribute' => 'id',
621
+ 'operator_value' => 'equals',
622
+ 'value' => $id,
623
+ 'operator_result' => $last_mode
624
+ );
625
+ $last_mode = 'and';
626
+ $tok = $p->next();
627
+ }
628
+
629
+ //Attributes
630
+ if ($tok === CSSQueryTokenizer::TOK_BRACKET_OPEN) {
631
+ $tok = $p->next_no_whitespace();
632
+
633
+ while (true) {
634
+ $match = true;
635
+ $compare = 'total';
636
+ if ($tok === CSSQueryTokenizer::TOK_NOT) {
637
+ $match = false;
638
+ $tok = $p->next_no_whitespace();
639
+ }
640
+
641
+ if ($tok === CSSQueryTokenizer::TOK_ALL) {
642
+ $tok = $p->next();
643
+ if ($tok === CSSQueryTokenizer::TOK_PIPE) {
644
+ $tok = $p->next();
645
+ if (($attribute = $this->parse_getIdentifier()) === false) {
646
+ return false;
647
+ }
648
+ $compare = 'name';
649
+ $tok = $p->next();
650
+ } else {
651
+ $this->error('Expected pipe at pos %pos%!');
652
+ return false;
653
+ }
654
+ } elseif ($tok === CSSQueryTokenizer::TOK_PIPE) {
655
+ $tok = $p->next();
656
+ if (($tag = $this->parse_getIdentifier()) === false) {
657
+ return false;
658
+ }
659
+ $tok = $p->next_no_whitespace();
660
+ } elseif (($attribute = $this->parse_getIdentifier()) !== false) {
661
+ $tok = $p->next();
662
+ if ($tok === CSSQueryTokenizer::TOK_PIPE) {
663
+ $tok = $p->next();
664
+
665
+ if (($attribute_name = $this->parse_getIdentifier()) !== false) {
666
+ $attribute = $attribute.':'.$attribute_name;
667
+ } else {
668
+ return false;
669
+ }
670
+
671
+ $tok = $p->next();
672
+ }
673
+ } else {
674
+ return false;
675
+ }
676
+ if ($tok === CSSQueryTokenizer::TOK_WHITESPACE) {
677
+ $tok = $p->next_no_whitespace();
678
+ }
679
+
680
+ $operator_value = '';
681
+ $val = '';
682
+ switch($tok) {
683
+ case CSSQueryTokenizer::TOK_COMPARE_PREFIX:
684
+ case CSSQueryTokenizer::TOK_COMPARE_CONTAINS:
685
+ case CSSQueryTokenizer::TOK_COMPARE_CONTAINS_WORD:
686
+ case CSSQueryTokenizer::TOK_COMPARE_ENDS:
687
+ case CSSQueryTokenizer::TOK_COMPARE_EQUALS:
688
+ case CSSQueryTokenizer::TOK_COMPARE_NOT_EQUAL:
689
+ case CSSQueryTokenizer::TOK_COMPARE_REGEX:
690
+ case CSSQueryTokenizer::TOK_COMPARE_STARTS:
691
+ case CSSQueryTokenizer::TOK_COMPARE_BIGGER_THAN:
692
+ case CSSQueryTokenizer::TOK_COMPARE_SMALLER_THAN:
693
+ $operator_value = $p->getTokenString(($tok === CSSQueryTokenizer::TOK_COMPARE_EQUALS) ? 0 : -1);
694
+ $p->next_no_whitespace();
695
+
696
+ if (($val = $this->parse_getIdentifier()) === false) {
697
+ return false;
698
+ }
699
+
700
+ $tok = $p->next_no_whitespace();
701
+ break;
702
+ }
703
+
704
+ if ($operator_value && $val) {
705
+ $conditions['attributes'][] = array(
706
+ 'attribute' => $attribute,
707
+ 'operator_value' => $operator_value,
708
+ 'value' => $val,
709
+ 'match' => $match,
710
+ 'operator_result' => $last_mode,
711
+ 'compare' => $compare
712
+ );
713
+ } else {
714
+ $conditions['attributes'][] = array(
715
+ 'attribute' => $attribute,
716
+ 'value' => $match,
717
+ 'operator_result' => $last_mode,
718
+ 'compare' => $compare
719
+ );
720
+ }
721
+
722
+ switch($tok) {
723
+ case CSSQueryTokenizer::TOK_COMMA:
724
+ $tok = $p->next_no_whitespace();
725
+ $last_mode = 'or';
726
+ continue 2;
727
+ case CSSQueryTokenizer::TOK_PLUS:
728
+ $tok = $p->next_no_whitespace();
729
+ $last_mode = 'and';
730
+ continue 2;
731
+ case CSSQueryTokenizer::TOK_BRACKET_CLOSE:
732
+ $tok = $p->next();
733
+ break 2;
734
+ default:
735
+ $this->error('Expected closing bracket or comma at pos %pos%!');
736
+ return false;
737
+ }
738
+ }
739
+ }
740
+
741
+ if (count($conditions['attributes']) < 1) {
742
+ unset($conditions['attributes']);
743
+ }
744
+
745
+ while($tok === CSSQueryTokenizer::TOK_COLON) {
746
+ if (count($conditions) < 1) {
747
+ $conditions['tags'] = array(array(
748
+ 'tag' => '',
749
+ 'match' => false
750
+ ));
751
+ }
752
+
753
+ $tok = $p->next();
754
+ if (($filter = $this->parse_getIdentifier()) === false) {
755
+ return false;
756
+ }
757
+
758
+ if (($tok = $p->next()) === CSSQueryTokenizer::TOK_BRACE_OPEN) {
759
+ $start = $p->pos;
760
+ $count = 1;
761
+ while ((($tok = $p->next()) !== CSSQueryTokenizer::TOK_NULL) && !(($tok === CSSQueryTokenizer::TOK_BRACE_CLOSE) && (--$count === 0))) {
762
+ if ($tok === CSSQueryTokenizer::TOK_BRACE_OPEN) {
763
+ ++$count;
764
+ }
765
+ }
766
+
767
+
768
+ if ($tok !== CSSQueryTokenizer::TOK_BRACE_CLOSE) {
769
+ $this->error('Expected closing brace at pos %pos%!');
770
+ return false;
771
+ }
772
+ $len = $p->pos - 1 - $start;
773
+ $params = (($len > 0) ? substr($p->doc, $start + 1, $len) : '');
774
+ $tok = $p->next();
775
+ } else {
776
+ $params = '';
777
+ }
778
+
779
+ $conditions['filters'][] = array('filter' => $filter, 'params' => $params);
780
+ }
781
+ if (count($conditions) < 1) {
782
+ $this->error('Invalid search pattern(2): No conditions found!');
783
+ return false;
784
+ }
785
+ $conditions_all[] = $conditions;
786
+
787
+ if ($tok === CSSQueryTokenizer::TOK_WHITESPACE) {
788
+ $tok = $p->next_no_whitespace();
789
+ }
790
+
791
+ if ($tok === CSSQueryTokenizer::TOK_COMMA) {
792
+ $tok = $p->next_no_whitespace();
793
+ continue;
794
+ } else {
795
+ break;
796
+ }
797
+ }
798
+
799
+ return $conditions_all;
800
+ }
801
+
802
+
803
+ /**
804
+ * Evaluate root node using custom callback
805
+ * @param array $conditions {@link parse_conditions()}
806
+ * @param bool|int $recursive
807
+ * @param bool $check_root
808
+ * @return array
809
+ * @access private
810
+ */
811
+ protected function parse_callback($conditions, $recursive = true, $check_root = false) {
812
+ return ($this->result = $this->root->getChildrenByMatch(
813
+ $conditions,
814
+ $recursive,
815
+ $check_root,
816
+ $this->custom_filter_map
817
+ ));
818
+ }
819
+
820
+ /**
821
+ * Parse first bit of query, only root node has to be evaluated now
822
+ * @param bool|int $recursive
823
+ * @return bool
824
+ * @internal Result of query is set in {@link $result}
825
+ * @access private
826
+ */
827
+ protected function parse_single($recursive = true) {
828
+ if (($c = $this->parse_conditions()) === false) {
829
+ return false;
830
+ }
831
+
832
+ $this->parse_callback($c, $recursive, $this->search_root);
833
+ return true;
834
+ }
835
+
836
+ /**
837
+ * Evaluate sibling nodes
838
+ * @return bool
839
+ * @internal Result of query is set in {@link $result}
840
+ * @access private
841
+ */
842
+ protected function parse_adjacent() {
843
+ $tmp = $this->result;
844
+ $this->result = array();
845
+ if (($c = $this->parse_conditions()) === false) {
846
+ return false;
847
+ }
848
+
849
+ foreach($tmp as $t) {
850
+ if (($sibling = $t->getNextSibling()) !== false) {
851
+ if ($sibling->match($c, true, $this->custom_filter_map)) {
852
+ $this->result[] = $sibling;
853
+ }
854
+ }
855
+ }
856
+
857
+ return true;
858
+ }
859
+
860
+ /**
861
+ * Evaluate {@link $result}
862
+ * @param bool $parent Evaluate parent nodes
863
+ * @param bool|int $recursive
864
+ * @return bool
865
+ * @internal Result of query is set in {@link $result}
866
+ * @access private
867
+ */
868
+ protected function parse_result($parent = false, $recursive = true) {
869
+ $tmp = $this->result;
870
+ $tmp_res = array();
871
+ if (($c = $this->parse_conditions()) === false) {
872
+ return false;
873
+ }
874
+
875
+ foreach(array_keys($tmp) as $t) {
876
+ $this->root = (($parent) ? $tmp[$t]->parent : $tmp[$t]);
877
+ $this->parse_callback($c, $recursive);
878
+ foreach(array_keys($this->result) as $r) {
879
+ if (!in_array($this->result[$r], $tmp_res, true)) {
880
+ $tmp_res[] = $this->result[$r];
881
+ }
882
+ }
883
+ }
884
+ $this->result = $tmp_res;
885
+ return true;
886
+ }
887
+
888
+ /**
889
+ * Parse full query
890
+ * @return bool
891
+ * @internal Result of query is set in {@link $result}
892
+ * @access private
893
+ */
894
+ protected function parse() {
895
+ $p =& $this->parser;
896
+ $p->setPos(0);
897
+ $this->result = array();
898
+
899
+ if (!$this->parse_single()) {
900
+ return false;
901
+ }
902
+
903
+ while (count($this->result) > 0) {
904
+ switch($p->token) {
905
+ case CSSQueryTokenizer::TOK_CHILD:
906
+ $this->parser->next_no_whitespace();
907
+ if (!$this->parse_result(false, 1)) {
908
+ return false;
909
+ }
910
+ break;
911
+
912
+ case CSSQueryTokenizer::TOK_SIBLING:
913
+ $this->parser->next_no_whitespace();
914
+ if (!$this->parse_result(true, 1)) {
915
+ return false;
916
+ }
917
+ break;
918
+
919
+ case CSSQueryTokenizer::TOK_PLUS:
920
+ $this->parser->next_no_whitespace();
921
+ if (!$this->parse_adjacent()) {
922
+ return false;
923
+ }
924
+ break;
925
+
926
+ case CSSQueryTokenizer::TOK_ALL:
927
+ case CSSQueryTokenizer::TOK_IDENTIFIER:
928
+ case CSSQueryTokenizer::TOK_STRING:
929
+ case CSSQueryTokenizer::TOK_BRACE_OPEN:
930
+ case CSSQueryTokenizer::TOK_BRACKET_OPEN:
931
+ case CSSQueryTokenizer::TOK_ID:
932
+ case CSSQueryTokenizer::TOK_CLASS:
933
+ case CSSQueryTokenizer::TOK_COLON:
934
+ if (!$this->parse_result()) {
935
+ return false;
936
+ }
937
+ break;
938
+
939
+ case CSSQueryTokenizer::TOK_NULL:
940
+ break 2;
941
+
942
+ default:
943
+ $this->error('Invalid search pattern(3): No result modifier found!');
944
+ return false;
945
+ }
946
+ }
947
+
948
+ return true;
949
+ }
950
+ }
lib-3rd-party/pquery/gan_tokenizer.php ADDED
@@ -0,0 +1,567 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @author Niels A.D.
4
+ * @author Todd Burry <todd@vanillaforums.com>
5
+ * @copyright 2010 Niels A.D., 2014 Todd Burry
6
+ * @license http://opensource.org/licenses/LGPL-2.1 LGPL-2.1
7
+ * @package pQuery
8
+ */
9
+
10
+ namespace MailPoetVendor\pQuery;
11
+
12
+ if (!defined('ABSPATH')) exit;
13
+
14
+
15
+ /**
16
+ * Converts a document into tokens
17
+ *
18
+ * Can convert any string into tokens. The base class only supports
19
+ * identifier/whitespace tokens. For more tokens, the class can be
20
+ * easily extended.
21
+ *
22
+ * Use like:
23
+ * <code>
24
+ * <?php
25
+ * $a = new TokenizerBase('hello word');
26
+ * while ($a->next() !== $a::TOK_NULL) {
27
+ * echo $a->token, ': ',$a->getTokenString(), "<br>\n";
28
+ * }
29
+ * ?>
30
+ * </code>
31
+ *
32
+ * @internal The tokenizer works with a character map that connects a certain
33
+ * character to a certain function/token. This class is build with speed in mind.
34
+ */
35
+ class TokenizerBase {
36
+
37
+ /**
38
+ * NULL Token, used at end of document (parsing should stop after this token)
39
+ */
40
+ const TOK_NULL = 0;
41
+ /**
42
+ * Unknown token, used at unidentified character
43
+ */
44
+ const TOK_UNKNOWN = 1;
45
+ /**
46
+ * Whitespace token, used with whitespace
47
+ */
48
+ const TOK_WHITESPACE = 2;
49
+ /**
50
+ * Identifier token, used with identifiers
51
+ */
52
+ const TOK_IDENTIFIER = 3;
53
+
54
+ /**
55
+ * The document that is being tokenized
56
+ * @var string
57
+ * @internal Public for faster access!
58
+ * @see setDoc()
59
+ * @see getDoc()
60
+ * @access private
61
+ */
62
+ var $doc = '';
63
+
64
+ /**
65
+ * The size of the document (length of string)
66
+ * @var int
67
+ * @internal Public for faster access!
68
+ * @see $doc
69
+ * @access private
70
+ */
71
+ var $size = 0;
72
+
73
+ /**
74
+ * Current (character) position in the document
75
+ * @var int
76
+ * @internal Public for faster access!
77
+ * @see setPos()
78
+ * @see getPos()
79
+ * @access private
80
+ */
81
+ var $pos = 0;
82
+
83
+ /**
84
+ * Current (Line/Column) position in document
85
+ * @var array (Current_Line, Line_Starting_Pos)
86
+ * @internal Public for faster access!
87
+ * @see getLinePos()
88
+ * @access private
89
+ */
90
+ var $line_pos = array(0, 0);
91
+
92
+ /**
93
+ * Current token
94
+ * @var int
95
+ * @internal Public for faster access!
96
+ * @see getToken()
97
+ * @access private
98
+ */
99
+ var $token = self::TOK_NULL;
100
+
101
+ /**
102
+ * Start position of token. If NULL, then current position is used.
103
+ * @var int
104
+ * @internal Public for faster access!
105
+ * @see getTokenString()
106
+ * @access private
107
+ */
108
+ var $token_start = null;
109
+
110
+ /**
111
+ * List with all the character that can be considered as whitespace
112
+ * @var array|string
113
+ * @internal Variable is public + associated array for faster access!
114
+ * @internal array(' ' => true) will recognize space (' ') as whitespace
115
+ * @internal String will be converted to array in constructor
116
+ * @internal Result token will be {@link self::TOK_WHITESPACE};
117
+ * @see setWhitespace()
118
+ * @see getWhitespace()
119
+ * @access private
120
+ */
121
+ var $whitespace = " \t\n\r\0\x0B";
122
+
123
+ /**
124
+ * List with all the character that can be considered as identifier
125
+ * @var array|string
126
+ * @internal Variable is public + associated array for faster access!
127
+ * @internal array('a' => true) will recognize 'a' as identifier
128
+ * @internal String will be converted to array in constructor
129
+ * @internal Result token will be {@link self::TOK_IDENTIFIER};
130
+ * @see setIdentifiers()
131
+ * @see getIdentifiers()
132
+ * @access private
133
+ */
134
+ var $identifiers = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_';
135
+
136
+ /**
137
+ * All characters that should be mapped to a token/function that cannot be considered as whitespace or identifier
138
+ * @var array
139
+ * @internal Variable is public + associated array for faster access!
140
+ * @internal array('a' => 'parse_a') will call $this->parse_a() if it matches the character 'a'
141
+ * @internal array('a' => self::TOK_A) will set token to TOK_A if it matches the character 'a'
142
+ * @see mapChar()
143
+ * @see unmapChar()
144
+ * @access private
145
+ */
146
+ var $custom_char_map = array();
147
+
148
+ /**
149
+ * Automatically built character map. Built using {@link $identifiers}, {@link $whitespace} and {@link $custom_char_map}
150
+ * @var array
151
+ * @internal Public for faster access!
152
+ * @access private
153
+ */
154
+ var $char_map = array();
155
+
156
+ /**
157
+ * All errors found while parsing the document
158
+ * @var array
159
+ * @see addError()
160
+ */
161
+ var $errors = array();
162
+
163
+ /**
164
+ * Class constructor
165
+ * @param string $doc Document to be tokenized
166
+ * @param int $pos Position to start parsing
167
+ * @see setDoc()
168
+ * @see setPos()
169
+ */
170
+ function __construct($doc = '', $pos = 0) {
171
+ $this->setWhitespace($this->whitespace);
172
+ $this->setIdentifiers($this->identifiers);
173
+
174
+ $this->setDoc($doc, $pos);
175
+ }
176
+
177
+ #php4 PHP4 class constructor compatibility
178
+ #function TokenizerBase($doc = '', $pos = 0) {return $this->__construct($doc, $pos);}
179
+ #php4e
180
+
181
+ /**
182
+ * Sets target document
183
+ * @param string $doc Document to be tokenized
184
+ * @param int $pos Position to start parsing
185
+ * @see getDoc()
186
+ * @see setPos()
187
+ */
188
+ function setDoc($doc, $pos = 0) {
189
+ $this->doc = $doc;
190
+ $this->size = strlen($doc);
191
+ $this->setPos($pos);
192
+ }
193
+
194
+ /**
195
+ * Returns target document
196
+ * @return string
197
+ * @see setDoc()
198
+ */
199
+ function getDoc() {
200
+ return $this->doc;
201
+ }
202
+
203
+ /**
204
+ * Sets position in document
205
+ * @param int $pos
206
+ * @see getPos()
207
+ */
208
+ function setPos($pos = 0) {
209
+ $this->pos = $pos - 1;
210
+ $this->line_pos = array(0, 0);
211
+ $this->next();
212
+ }
213
+
214
+ /**
215
+ * Returns current position in document (Index)
216
+ * @return int
217
+ * @see setPos()
218
+ */
219
+ function getPos() {
220
+ return $this->pos;
221
+ }
222
+
223
+ /**
224
+ * Returns current position in document (Line/Char)
225
+ * @return array array(Line, Column)
226
+ */
227
+ function getLinePos() {
228
+ return array($this->line_pos[0], $this->pos - $this->line_pos[1]);
229
+ }
230
+
231
+ /**
232
+ * Returns current token
233
+ * @return int
234
+ * @see $token
235
+ */
236
+ function getToken() {
237
+ return $this->token;
238
+ }
239
+
240
+ /**
241
+ * Returns current token as string
242
+ * @param int $start_offset Offset from token start
243
+ * @param int $end_offset Offset from token end
244
+ * @return string
245
+ */
246
+ function getTokenString($start_offset = 0, $end_offset = 0) {
247
+ $token_start = ((is_int($this->token_start)) ? $this->token_start : $this->pos) + $start_offset;
248
+ $len = $this->pos - $token_start + 1 + $end_offset;
249
+ return (($len > 0) ? substr($this->doc, $token_start, $len) : '');
250
+ }
251
+
252
+ /**
253
+ * Sets characters to be recognized as whitespace
254
+ *
255
+ * Used like: setWhitespace('ab') or setWhitespace(array('a' => true, 'b', 'c'));
256
+ * @param string|array $ws
257
+ * @see getWhitespace();
258
+ */
259
+ function setWhitespace($ws) {
260
+ if (is_array($ws)) {
261
+ $this->whitespace = array_fill_keys(array_values($ws), true);
262
+ $this->buildCharMap();
263
+ } else {
264
+ $this->setWhiteSpace(str_split($ws));
265
+ }
266
+ }
267
+
268
+ /**
269
+ * Returns whitespace characters as string/array
270
+ * @param bool $as_string Should the result be a string or an array?
271
+ * @return string|array
272
+ * @see setWhitespace()
273
+ */
274
+ function getWhitespace($as_string = true) {
275
+ $ws = array_keys($this->whitespace);
276
+ return (($as_string) ? implode('', $ws) : $ws);
277
+ }
278
+
279
+ /**
280
+ * Sets characters to be recognized as identifier
281
+ *
282
+ * Used like: setIdentifiers('ab') or setIdentifiers(array('a' => true, 'b', 'c'));
283
+ * @param string|array $ident
284
+ * @see getIdentifiers();
285
+ */
286
+ function setIdentifiers($ident) {
287
+ if (is_array($ident)) {
288
+ $this->identifiers = array_fill_keys(array_values($ident), true);
289
+ $this->buildCharMap();
290
+ } else {
291
+ $this->setIdentifiers(str_split($ident));
292
+ }
293
+ }
294
+
295
+ /**
296
+ * Returns identifier characters as string/array
297
+ * @param bool $as_string Should the result be a string or an array?
298
+ * @return string|array
299
+ * @see setIdentifiers()
300
+ */
301
+ function getIdentifiers($as_string = true) {
302
+ $ident = array_keys($this->identifiers);
303
+ return (($as_string) ? implode('', $ident) : $ident);
304
+ }
305
+
306
+ /**
307
+ * Maps a custom character to a token/function
308
+ *
309
+ * Used like: mapChar('a', self::{@link TOK_IDENTIFIER}) or mapChar('a', 'parse_identifier');
310
+ * @param string $char Character that should be mapped. If set, it will be overridden
311
+ * @param int|string $map If function name, then $this->function will be called, otherwise token is set to $map
312
+ * @see unmapChar()
313
+ */
314
+ function mapChar($char, $map) {
315
+ $this->custom_char_map[$char] = $map;
316
+ $this->buildCharMap();
317
+ }
318
+
319
+ /**
320
+ * Removes a char mapped with {@link mapChar()}
321
+ * @param string $char Character that should be unmapped
322
+ * @see mapChar()
323
+ */
324
+ function unmapChar($char) {
325
+ unset($this->custom_char_map[$char]);
326
+ $this->buildCharMap();
327
+ }
328
+
329
+ /**
330
+ * Builds the {@link $map_char} array
331
+ * @internal Builds single array that maps all characters. Gets called if {@link $whitespace}, {@link $identifiers} or {@link $custom_char_map} get modified
332
+ */
333
+ protected function buildCharMap() {
334
+ $this->char_map = $this->custom_char_map;
335
+ if (is_array($this->whitespace)) {
336
+ foreach($this->whitespace as $w => $v) {
337
+ $this->char_map[$w] = 'parse_whitespace';
338
+ }
339
+ }
340
+ if (is_array($this->identifiers)) {
341
+ foreach($this->identifiers as $i => $v) {
342
+ $this->char_map[$i] = 'parse_identifier';
343
+ }
344
+ }
345
+ }
346
+
347
+ /**
348
+ * Add error to the array and appends current position
349
+ * @param string $error
350
+ */
351
+ function addError($error) {
352
+ $this->errors[] = htmlentities($error.' at '.($this->line_pos[0] + 1).', '.($this->pos - $this->line_pos[1] + 1).'!');
353
+ }
354
+
355
+ /**
356
+ * Parse line breaks and increase line number
357
+ * @internal Gets called to process line breaks
358
+ */
359
+ protected function parse_linebreak() {
360
+ if($this->doc[$this->pos] === "\r") {
361
+ ++$this->line_pos[0];
362
+ if ((($this->pos + 1) < $this->size) && ($this->doc[$this->pos + 1] === "\n")) {
363
+ ++$this->pos;
364
+ }
365
+ $this->line_pos[1] = $this->pos;
366
+ } elseif($this->doc[$this->pos] === "\n") {
367
+ ++$this->line_pos[0];
368
+ $this->line_pos[1] = $this->pos;
369
+ }
370
+ }
371
+
372
+ /**
373
+ * Parse whitespace
374
+ * @return int Token
375
+ * @internal Gets called with {@link $whitespace} characters
376
+ */
377
+ protected function parse_whitespace() {
378
+ $this->token_start = $this->pos;
379
+
380
+ while(++$this->pos < $this->size) {
381
+ if (!isset($this->whitespace[$this->doc[$this->pos]])) {
382
+ break;
383
+ } else {
384
+ $this->parse_linebreak();
385
+ }
386
+ }
387
+
388
+ --$this->pos;
389
+ return self::TOK_WHITESPACE;
390
+ }
391
+
392
+ /**
393
+ * Parse identifiers
394
+ * @return int Token
395
+ * @internal Gets called with {@link $identifiers} characters
396
+ */
397
+ protected function parse_identifier() {
398
+ $this->token_start = $this->pos;
399
+
400
+ while((++$this->pos < $this->size) && isset($this->identifiers[$this->doc[$this->pos]])) {}
401
+
402
+ --$this->pos;
403
+ return self::TOK_IDENTIFIER;
404
+ }
405
+
406
+ /**
407
+ * Continues to the next token
408
+ * @return int Next token ({@link TOK_NULL} if none)
409
+ */
410
+ function next() {
411
+ $this->token_start = null;
412
+
413
+ if (++$this->pos < $this->size) {
414
+ if (isset($this->char_map[$this->doc[$this->pos]])) {
415
+ if (is_string($this->char_map[$this->doc[$this->pos]])) {
416
+ return ($this->token = $this->{$this->char_map[$this->doc[$this->pos]]}());
417
+ } else {
418
+ return ($this->token = $this->char_map[$this->doc[$this->pos]]);
419
+ }
420
+ } else {
421
+ return ($this->token = self::TOK_UNKNOWN);
422
+ }
423
+ } else {
424
+ return ($this->token = self::TOK_NULL);
425
+ }
426
+ }
427
+
428
+ /**
429
+ * Finds the next token, but skips whitespace
430
+ * @return int Next token ({@link TOK_NULL} if none)
431
+ */
432
+ function next_no_whitespace() {
433
+ $this->token_start = null;
434
+
435
+ while (++$this->pos < $this->size) {
436
+ if (!isset($this->whitespace[$this->doc[$this->pos]])) {
437
+ if (isset($this->char_map[$this->doc[$this->pos]])) {
438
+ if (is_string($this->char_map[$this->doc[$this->pos]])) {
439
+ return ($this->token = $this->{$this->char_map[$this->doc[$this->pos]]}());
440
+ } else {
441
+ return ($this->token = $this->char_map[$this->doc[$this->pos]]);
442
+ }
443
+ } else {
444
+ return ($this->token = self::TOK_UNKNOWN);
445
+ }
446
+ } else {
447
+ $this->parse_linebreak();
448
+ }
449
+ }
450
+
451
+ return ($this->token = self::TOK_NULL);
452
+ }
453
+
454
+ /**
455
+ * Finds the next token using stop characters.
456
+ *
457
+ * Used like: next_search('abc') or next_search(array('a' => true, 'b' => true, 'c' => true));
458
+ * @param string|array $characters Characters to search for
459
+ * @param bool $callback Should the function check the charmap after finding a character?
460
+ * @return int Next token ({@link TOK_NULL} if none)
461
+ */
462
+ function next_search($characters, $callback = true) {
463
+ $this->token_start = $this->pos;
464
+ if (!is_array($characters)) {
465
+ $characters = array_fill_keys(str_split($characters), true);
466
+ }
467
+
468
+ while(++$this->pos < $this->size) {
469
+ if (isset($characters[$this->doc[$this->pos]])) {
470
+ if ($callback && isset($this->char_map[$this->doc[$this->pos]])) {
471
+ if (is_string($this->char_map[$this->doc[$this->pos]])) {
472
+ return ($this->token = $this->{$this->char_map[$this->doc[$this->pos]]}());
473
+ } else {
474
+ return ($this->token = $this->char_map[$this->doc[$this->pos]]);
475
+ }
476
+ } else {
477
+ return ($this->token = self::TOK_UNKNOWN);
478
+ }
479
+ } else {
480
+ $this->parse_linebreak();
481
+ }
482
+ }
483
+
484
+ return ($this->token = self::TOK_NULL);
485
+ }
486
+
487
+ /**
488
+ * Finds the next token by searching for a string
489
+ * @param string $needle The needle that's being searched for
490
+ * @param bool $callback Should the function check the charmap after finding the needle?
491
+ * @return int Next token ({@link TOK_NULL} if none)
492
+ */
493
+ function next_pos($needle, $callback = true) {
494
+ $this->token_start = $this->pos;
495
+ if (($this->pos < $this->size) && (($p = stripos($this->doc, $needle, $this->pos + 1)) !== false)) {
496
+
497
+ $len = $p - $this->pos - 1;
498
+ if ($len > 0) {
499
+ $str = substr($this->doc, $this->pos + 1, $len);
500
+
501
+ if (($l = strrpos($str, "\n")) !== false) {
502
+ ++$this->line_pos[0];
503
+ $this->line_pos[1] = $l + $this->pos + 1;
504
+
505
+ $len -= $l;
506
+ if ($len > 0) {
507
+ $str = substr($str, 0, -$len);
508
+ $this->line_pos[0] += substr_count($str, "\n");
509
+ }
510
+ }
511
+ }
512
+
513
+ $this->pos = $p;
514
+ if ($callback && isset($this->char_map[$this->doc[$this->pos]])) {
515
+ if (is_string($this->char_map[$this->doc[$this->pos]])) {
516
+ return ($this->token = $this->{$this->char_map[$this->doc[$this->pos]]}());
517
+ } else {
518
+ return ($this->token = $this->char_map[$this->doc[$this->pos]]);
519
+ }
520
+ } else {
521
+ return ($this->token = self::TOK_UNKNOWN);
522
+ }
523
+ } else {
524
+ $this->pos = $this->size;
525
+ return ($this->token = self::TOK_NULL);
526
+ }
527
+ }
528
+
529
+ /**
530
+ * Expect a specific token or character. Adds error if token doesn't match.
531
+ * @param string|int $token Character or token to expect
532
+ * @param bool|int $do_next Go to next character before evaluating. 1 for next char, true to ignore whitespace
533
+ * @param bool|int $try_next Try next character if current doesn't match. 1 for next char, true to ignore whitespace
534
+ * @param bool|int $next_on_match Go to next character after evaluating. 1 for next char, true to ignore whitespace
535
+ * @return bool
536
+ */
537
+ protected function expect($token, $do_next = true, $try_next = false, $next_on_match = 1) {
538
+ if ($do_next) {
539
+ if ($do_next === 1) {
540
+ $this->next();
541
+ } else {
542
+ $this->next_no_whitespace();
543
+ }
544
+ }
545
+
546
+ if (is_int($token)) {
547
+ if (($this->token !== $token) && ((!$try_next) || ((($try_next === 1) && ($this->next() !== $token)) || (($try_next === true) && ($this->next_no_whitespace() !== $token))))) {
548
+ $this->addError('Unexpected "'.$this->getTokenString().'"');
549
+ return false;
550
+ }
551
+ } else {
552
+ if (($this->doc[$this->pos] !== $token) && ((!$try_next) || (((($try_next === 1) && ($this->next() !== self::TOK_NULL)) || (($try_next === true) && ($this->next_no_whitespace() !== self::TOK_NULL))) && ($this->doc[$this->pos] !== $token)))) {
553
+ $this->addError('Expected "'.$token.'", but found "'.$this->getTokenString().'"');
554
+ return false;
555
+ }
556
+ }
557
+
558
+ if ($next_on_match) {
559
+ if ($next_on_match === 1) {
560
+ $this->next();
561
+ } else {
562
+ $this->next_no_whitespace();
563
+ }
564
+ }
565
+ return true;
566
+ }
567
+ }
lib-3rd-party/pquery/gan_xml2array.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @author Niels A.D.
4
+ * @author Todd Burry <todd@vanillaforums.com>
5
+ * @copyright 2010 Niels A.D., 2014 Todd Burry
6
+ * @license http://opensource.org/licenses/LGPL-2.1 LGPL-2.1
7
+ * @package pQuery
8
+ */
9
+
10
+ namespace MailPoetVendor\pQuery;
11
+
12
+ if (!defined('ABSPATH')) exit;
13
+
14
+
15
+ /**
16
+ * Converts a XML document to an array
17
+ */
18
+ class XML2ArrayParser extends HtmlParserBase {
19
+
20
+ /**
21
+ * Holds the document structure
22
+ * @var array array('name' => 'tag', 'attrs' => array('attr' => 'val'), 'childen' => array())
23
+ */
24
+ var $root = array(
25
+ 'name' => '',
26
+ 'attrs' => array(),
27
+ 'children' => array()
28
+ );
29
+
30
+ /**
31
+ * Current parsing hierarchy
32
+ * @var array
33
+ * @access private
34
+ */
35
+ var $hierarchy = array();
36
+
37
+ protected function parse_hierarchy($self_close) {
38
+ if ($this->status['closing_tag']) {
39
+ $found = false;
40
+ for ($count = count($this->hierarchy), $i = $count - 1; $i >= 0; $i--) {
41
+ if (strcasecmp($this->hierarchy[$i]['name'], $this->status['tag_name']) === 0) {
42
+
43
+ for($ii = ($count - $i - 1); $ii >= 0; $ii--) {
44
+ $e = array_pop($this->hierarchy);
45
+ if ($ii > 0) {
46
+ $this->addError('Closing tag "'.$this->status['tag_name'].'" while "'.$e['name'].'" is not closed yet');
47
+ }
48
+ }
49
+
50
+ $found = true;
51
+ break;
52
+ }
53
+ }
54
+
55
+ if (!$found) {
56
+ $this->addError('Closing tag "'.$this->status['tag_name'].'" which is not open');
57
+ }
58
+ } else {
59
+ $tag = array(
60
+ 'name' => $this->status['tag_name'],
61
+ 'attrs' => $this->status['attributes'],
62
+ 'children' => array()
63
+ );
64
+ if ($this->hierarchy) {
65
+ $current =& $this->hierarchy[count($this->hierarchy) - 1];
66
+ $current['children'][] = $tag;
67
+ $tag =& $current['children'][count($current['children']) - 1];
68
+ unset($current['tagData']);
69
+ } else {
70
+ $this->root = $tag;
71
+ $tag =& $this->root;
72
+ $self_close = false;
73
+ }
74
+ if (!$self_close) {
75
+ $this->hierarchy[] =& $tag;
76
+ }
77
+ }
78
+ }
79
+
80
+ function parse_tag_default() {
81
+ if (!parent::parse_tag_default()) {return false;}
82
+
83
+ if ($this->status['tag_name'][0] !== '?') {
84
+ $this->parse_hierarchy(($this->status['self_close']) ? true : null);
85
+ }
86
+ return true;
87
+ }
88
+
89
+ function parse_text() {
90
+ parent::parse_text();
91
+ if (($this->status['text'] !== '') && $this->hierarchy) {
92
+ $current =& $this->hierarchy[count($this->hierarchy) - 1];
93
+ if (!$current['children']) {
94
+ $current['tagData'] = $this->status['text'];
95
+ }
96
+ }
97
+ }
98
+
99
+ function parse_all() {
100
+ return ((parent::parse_all()) ? $this->root : false);
101
+ }
102
+ }
lib-3rd-party/pquery/ganon.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if (!defined('ABSPATH')) exit;
4
+
5
+ /**
6
+ * @author Niels A.D.
7
+ * @author Todd Burry <todd@vanillaforums.com>
8
+ * @copyright 2010 Niels A.D., 2014 Todd Burry
9
+ * @license http://opensource.org/licenses/LGPL-2.1 LGPL-2.1
10
+ * @package pQuery
11
+ */
12
+
13
+ use MailPoetVendor\pQuery\Html5Parser;
14
+ use MailPoetVendor\pQuery\HtmlFormatter;
15
+
16
+ /**
17
+ * Returns HTML DOM from string
18
+ * @param string $str
19
+ * @param bool $return_root Return root node or return parser object
20
+ * @return Html5Parser|DomNode
21
+ */
22
+ function str_get_dom($str, $return_root = true) {
23
+ $a = new Html5Parser($str);
24
+ return (($return_root) ? $a->root : $a);
25
+ }
26
+
27
+ /**
28
+ * Returns HTML DOM from file/website
29
+ * @param string $str
30
+ * @param bool $return_root Return root node or return parser object
31
+ * @param bool $use_include_path Use include path search in file_get_contents
32
+ * @param resource $context Context resource used in file_get_contents (PHP >= 5.0.0)
33
+ * @return Html5Parser|DomNode
34
+ */
35
+ function file_get_dom($file, $return_root = true, $use_include_path = false, $context = null) {
36
+ if (version_compare(PHP_VERSION, '5.0.0', '>='))
37
+ $f = file_get_contents($file, $use_include_path, $context);
38
+ else {
39
+ if ($context !== null)
40
+ trigger_error('Context parameter not supported in this PHP version');
41
+ $f = file_get_contents($file, $use_include_path);
42
+ }
43
+
44
+ return (($f === false) ? false : str_get_dom($f, $return_root));
45
+ }
46
+
47
+ /**
48
+ * Format/beautify DOM
49
+ * @param DomNode $root
50
+ * @param array $options Extra formatting options {@link Formatter::$options}
51
+ * @return bool
52
+ */
53
+ function dom_format(&$root, $options = array()) {
54
+ $formatter = new HtmlFormatter($options);
55
+ return $formatter->format($root);
56
+ }
57
+
58
+ if (version_compare(PHP_VERSION, '5.0.0', '<')) {
59
+ /**
60
+ * PHP alternative to str_split, for backwards compatibility
61
+ * @param string $string
62
+ * @return string
63
+ */
64
+ function str_split($string) {
65
+ $res = array();
66
+ $size = strlen($string);
67
+ for ($i = 0; $i < $size; $i++) {
68
+ $res[] = $string[$i];
69
+ }
70
+
71
+ return $res;
72
+ }
73
+ }
74
+
75
+ if (version_compare(PHP_VERSION, '5.2.0', '<')) {
76
+ /**
77
+ * PHP alternative to array_fill_keys, for backwards compatibility
78
+ * @param array $keys
79
+ * @param mixed $value
80
+ * @return array
81
+ */
82
+ function array_fill_keys($keys, $value) {
83
+ $res = array();
84
+ foreach($keys as $k) {
85
+ $res[$k] = $value;
86
+ }
87
+
88
+ return $res;
89
+ }
90
+ }
91
+
92
+ #!! <- Ignore when converting to single file
93
+ if (!defined('GANON_NO_INCLUDES')) {
94
+ define('GANON_NO_INCLUDES', true);
95
+ include_once('IQuery.php');
96
+ include_once('gan_tokenizer.php');
97
+ include_once('gan_parser_html.php');
98
+ include_once('gan_node_html.php');
99
+ include_once('gan_selector_html.php');
100
+ include_once('gan_formatter.php');
101
+ }
102
+ #!
{vendor/tburry → lib-3rd-party/pquery}/index.php RENAMED
File without changes
lib-3rd-party/pquery/pQuery.php ADDED
@@ -0,0 +1,284 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @author Niels A.D.
4
+ * @author Todd Burry <todd@vanillaforums.com>
5
+ * @copyright 2010 Niels A.D., 2014 Todd Burry
6
+ * @license http://opensource.org/licenses/LGPL-2.1 LGPL-2.1
7
+ * @package pQuery
8
+ */
9
+
10
+ namespace MailPoetVendor\pQuery;
11
+
12
+ if (!defined('ABSPATH')) exit;
13
+
14
+
15
+
16
+ /**
17
+ * A jQuery-like object for php.
18
+ */
19
+ class pQuery implements \ArrayAccess, \IteratorAggregate, IQuery {
20
+ /// Properties ///
21
+
22
+ /**
23
+ * @var IQuery[]
24
+ */
25
+ protected $nodes = array();
26
+
27
+ /// Methods ///
28
+
29
+ public function __construct($nodes = array()) {
30
+ $this->nodes = $nodes;
31
+ }
32
+
33
+ public function addClass($classname) {
34
+ foreach ($this->nodes as $node) {
35
+ $node->addClass($classname);
36
+ }
37
+ return $this;
38
+ }
39
+
40
+ public function after($content) {
41
+ foreach ($this->nodes as $node) {
42
+ $node->after($content);
43
+ }
44
+ return $this;
45
+ }
46
+
47
+ public function append($content) {
48
+ foreach ($this->nodes as $node) {
49
+ $node->append($content);
50
+ }
51
+ return $this;
52
+ }
53
+
54
+ public function attr($name, $value = null) {
55
+ if (empty($this->nodes) && $value === null)
56
+ return '';
57
+
58
+ foreach ($this->nodes as $node) {
59
+ if ($value === null)
60
+ return $node->attr($name);
61
+ $node->attr($name, $value);
62
+ }
63
+ return $this;
64
+ }
65
+
66
+ public function before($content) {
67
+ foreach ($this->nodes as $node) {
68
+ $node->before($content);
69
+ }
70
+ return $this;
71
+ }
72
+
73
+ public function clear() {
74
+ foreach ($this->nodes as $node) {
75
+ $node->clear();
76
+ }
77
+ return $this;
78
+ }
79
+
80
+ /**
81
+ * Get the count of matched elements.
82
+ *
83
+ * @return int Returns the count of matched elements.
84
+ */
85
+ public function count(): int {
86
+ return count($this->nodes);
87
+ }
88
+
89
+ /**
90
+ * Format/beautify a DOM.
91
+ *
92
+ * @param DomNode $dom The dom to format.
93
+ * @param array $options Extra formatting options. See {@link HtmlFormatter::$options}.
94
+ * @return bool Returns `true` on sucess and `false` on failure.
95
+ */
96
+ // public static function format($dom, $options = array()) {
97
+ // $formatter = new pQuery\HtmlFormatter($options);
98
+ // return $formatter->format($dom);
99
+ // }
100
+
101
+ public function getIterator(): \ArrayIterator {
102
+ return new \ArrayIterator($this->nodes);
103
+ }
104
+
105
+ public function hasClass($classname) {
106
+ foreach ($this->nodes as $node) {
107
+ if ($node->hasClass($classname))
108
+ return true;
109
+ }
110
+ return false;
111
+ }
112
+
113
+ public function html($value = null) {
114
+ if (empty($this->nodes) && $value === null)
115
+ return '';
116
+
117
+ foreach ($this->nodes as $node) {
118
+ if ($value === null)
119
+ return $node->html();
120
+ $node->html($value);
121
+ }
122
+ return $this;
123
+ }
124
+
125
+ public function offsetExists($offset): bool {
126
+ return isset($this->nodes[$offset]);
127
+ }
128
+
129
+ #[\ReturnTypeWillChange]
130
+ public function offsetGet($offset) {
131
+ return isset($this->nodes[$offset]) ? $this->nodes[$offset] : null;
132
+ }
133
+
134
+ public function offsetSet($offset, $value): void {
135
+
136
+ if (is_null($offset) || !isset($this->nodes[$offset])) {
137
+ throw new \BadMethodCallException("You are not allowed to add new nodes to the pQuery object.");
138
+ } else {
139
+ $this->nodes[$offset]->replaceWith($value);
140
+ }
141
+ }
142
+
143
+ public function offsetUnset($offset): void {
144
+ if (isset($this->nodes[$offset])) {
145
+ $this->nodes[$offset]->remove();
146
+ unset($this->nodes[$offset]);
147
+ }
148
+ }
149
+
150
+ /**
151
+ * Query a file or url.
152
+ *
153
+ * @param string $path The path to the url.
154
+ * @param resource $context A context suitable to be passed into {@link file_get_contents}
155
+ * @return DomNode Returns the root dom node for the html file.
156
+ */
157
+ public static function parseFile($path, $context = null) {
158
+ $html_str = file_get_contents($path, false, $context);
159
+ return static::parseStr($html_str);
160
+ }
161
+
162
+ /**
163
+ * Query a string of html.
164
+ *
165
+ * @param string $html
166
+ * @return DomNode Returns the root dom node for the html string.
167
+ */
168
+ public static function parseStr($html) {
169
+ $parser = new Html5Parser($html);
170
+ return $parser->root;
171
+ }
172
+
173
+ public function prepend($content = null) {
174
+ foreach ($this->nodes as $node) {
175
+ $node->prepend($content);
176
+ }
177
+ return $this;
178
+ }
179
+
180
+ public function prop($name, $value = null) {
181
+ if (empty($this->nodes) && $value === null)
182
+ return '';
183
+
184
+ foreach ($this->nodes as $node) {
185
+ if ($value === null)
186
+ return $node->prop($name);
187
+ $node->prop($name, $value);
188
+ }
189
+ return $this;
190
+ }
191
+
192
+ public function remove($selector = null) {
193
+ foreach ($this->nodes as $node) {
194
+ $node->remove($selector);
195
+ }
196
+ if ($selector === null)
197
+ $this->nodes = array();
198
+
199
+ return $this;
200
+ }
201
+
202
+ public function removeAttr($name) {
203
+ foreach ($this->nodes as $node) {
204
+ $node->removeAttr($name);
205
+ }
206
+ return $this;
207
+ }
208
+
209
+ public function removeClass($classname) {
210
+ foreach ($this->nodes as $node) {
211
+ $node->removeClass($classname);
212
+ }
213
+ return $this;
214
+ }
215
+
216
+ public function replaceWith($content) {
217
+ foreach ($this->nodes as &$node) {
218
+ $node = $node->replaceWith($content);
219
+ }
220
+ return $this;
221
+ }
222
+
223
+ public function tagName($value = null) {
224
+ foreach ($this->nodes as $node) {
225
+ if ($value === null)
226
+ return $node->tagName();
227
+ $node->tagName($value);
228
+ }
229
+ return $this;
230
+ }
231
+
232
+ public function text($value = null) {
233
+ if (empty($this->nodes) && $value === null)
234
+ return '';
235
+
236
+ foreach ($this->nodes as $node) {
237
+ if ($value === null)
238
+ return $node->text();
239
+ $node->text($value);
240
+ }
241
+ return $this;
242
+ }
243
+
244
+ public function toggleClass($classname, $switch = null) {
245
+ foreach ($this->nodes as $node) {
246
+ $node->toggleClass($classname, $switch);
247
+ }
248
+
249
+ return $this;
250
+ }
251
+
252
+ public function unwrap() {
253
+ foreach ($this->nodes as $node) {
254
+ $node->unwrap();
255
+ }
256
+ return $this;
257
+ }
258
+
259
+ public function val($value = null) {
260
+ if (empty($this->nodes) && $value === null)
261
+ return '';
262
+
263
+ foreach ($this->nodes as $node) {
264
+ if ($value === null)
265
+ return $node->val();
266
+ $node->val($value);
267
+ }
268
+ return $this;
269
+ }
270
+
271
+ public function wrap($wrapping_element) {
272
+ foreach ($this->nodes as $node) {
273
+ $node->wrap($wrapping_element);
274
+ }
275
+ return $this;
276
+ }
277
+
278
+ public function wrapInner($wrapping_element) {
279
+ foreach ($this->nodes as $node) {
280
+ $node->wrapInner($wrapping_element);
281
+ }
282
+ return $this;
283
+ }
284
+ }
{vendor/tburry/pquery → lib-3rd-party/pquery/third_party}/index.php RENAMED
File without changes
lib-3rd-party/pquery/third_party/jsminplus.php ADDED
@@ -0,0 +1,2091 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace MailPoetVendor\pQuery;
4
+
5
+ if (!defined('ABSPATH')) exit;
6
+
7
+
8
+ /**
9
+ * JSMinPlus version 1.4
10
+ *
11
+ * Minifies a javascript file using a javascript parser
12
+ *
13
+ * This implements a PHP port of Brendan Eich's Narcissus open source javascript engine (in javascript)
14
+ * References: http://en.wikipedia.org/wiki/Narcissus_(JavaScript_engine)
15
+ * Narcissus sourcecode: http://mxr.mozilla.org/mozilla/source/js/narcissus/
16
+ * JSMinPlus weblog: http://crisp.tweakblogs.net/blog/cat/716
17
+ *
18
+ * Tino Zijdel <crisp@tweakers.net>
19
+ *
20
+ * Usage: $minified = JSMinPlus::minify($script [, $filename])
21
+ *
22
+ * Versionlog (see also changelog.txt):
23
+ * 23-07-2011 - remove dynamic creation of OP_* and KEYWORD_* defines and declare them on top
24
+ * reduce memory footprint by minifying by block-scope
25
+ * some small byte-saving and performance improvements
26
+ * 12-05-2009 - fixed hook:colon precedence, fixed empty body in loop and if-constructs
27
+ * 18-04-2009 - fixed crashbug in PHP 5.2.9 and several other bugfixes
28
+ * 12-04-2009 - some small bugfixes and performance improvements
29
+ * 09-04-2009 - initial open sourced version 1.0
30
+ *
31
+ * Latest version of this script: http://files.tweakers.net/jsminplus/jsminplus.zip
32
+ *
33
+ */
34
+
35
+ /* ***** BEGIN LICENSE BLOCK *****
36
+ * Version: MPL 1.1/GPL 2.0/LGPL 2.1
37
+ *
38
+ * The contents of this file are subject to the Mozilla Public License Version
39
+ * 1.1 (the "License"); you may not use this file except in compliance with
40
+ * the License. You may obtain a copy of the License at
41
+ * http://www.mozilla.org/MPL/
42
+ *
43
+ * Software distributed under the License is distributed on an "AS IS" basis,
44
+ * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
45
+ * for the specific language governing rights and limitations under the
46
+ * License.
47
+ *
48
+ * The Original Code is the Narcissus JavaScript engine.
49
+ *
50
+ * The Initial Developer of the Original Code is
51
+ * Brendan Eich <brendan@mozilla.org>.
52
+ * Portions created by the Initial Developer are Copyright (C) 2004
53
+ * the Initial Developer. All Rights Reserved.
54
+ *
55
+ * Contributor(s): Tino Zijdel <crisp@tweakers.net>
56
+ * PHP port, modifications and minifier routine are (C) 2009-2011
57
+ *
58
+ * Alternatively, the contents of this file may be used under the terms of
59
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
60
+ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
61
+ * in which case the provisions of the GPL or the LGPL are applicable instead
62
+ * of those above. If you wish to allow use of your version of this file only
63
+ * under the terms of either the GPL or the LGPL, and not to allow others to
64
+ * use your version of this file under the terms of the MPL, indicate your
65
+ * decision by deleting the provisions above and replace them with the notice
66
+ * and other provisions required by the GPL or the LGPL. If you do not delete
67
+ * the provisions above, a recipient may use your version of this file under
68
+ * the terms of any one of the MPL, the GPL or the LGPL.
69
+ *
70
+ * ***** END LICENSE BLOCK ***** */
71
+
72
+ define('TOKEN_END', 1);
73
+ define('TOKEN_NUMBER', 2);
74
+ define('TOKEN_IDENTIFIER', 3);
75
+ define('TOKEN_STRING', 4);
76
+ define('TOKEN_REGEXP', 5);
77
+ define('TOKEN_NEWLINE', 6);
78
+ define('TOKEN_CONDCOMMENT_START', 7);
79
+ define('TOKEN_CONDCOMMENT_END', 8);
80
+
81
+ define('JS_SCRIPT', 100);
82
+ define('JS_BLOCK', 101);
83
+ define('JS_LABEL', 102);
84
+ define('JS_FOR_IN', 103);
85
+ define('JS_CALL', 104);
86
+ define('JS_NEW_WITH_ARGS', 105);
87
+ define('JS_INDEX', 106);
88
+ define('JS_ARRAY_INIT', 107);
89
+ define('JS_OBJECT_INIT', 108);
90
+ define('JS_PROPERTY_INIT', 109);
91
+ define('JS_GETTER', 110);
92
+ define('JS_SETTER', 111);
93
+ define('JS_GROUP', 112);
94
+ define('JS_LIST', 113);
95
+
96
+ define('JS_MINIFIED', 999);
97
+
98
+ define('DECLARED_FORM', 0);
99
+ define('EXPRESSED_FORM', 1);
100
+ define('STATEMENT_FORM', 2);
101
+
102
+ /* Operators */
103
+ define('OP_SEMICOLON', ';');
104
+ define('OP_COMMA', ',');
105
+ define('OP_HOOK', '?');
106
+ define('OP_COLON', ':');
107
+ define('OP_OR', '||');
108
+ define('OP_AND', '&&');
109
+ define('OP_BITWISE_OR', '|');
110
+ define('OP_BITWISE_XOR', '^');
111
+ define('OP_BITWISE_AND', '&');
112
+ define('OP_STRICT_EQ', '===');
113
+ define('OP_EQ', '==');
114
+ define('OP_ASSIGN', '=');
115
+ define('OP_STRICT_NE', '!==');
116
+ define('OP_NE', '!=');
117
+ define('OP_LSH', '<<');
118
+ define('OP_LE', '<=');
119
+ define('OP_LT', '<');
120
+ define('OP_URSH', '>>>');
121
+ define('OP_RSH', '>>');
122
+ define('OP_GE', '>=');
123
+ define('OP_GT', '>');
124
+ define('OP_INCREMENT', '++');
125
+ define('OP_DECREMENT', '--');
126
+ define('OP_PLUS', '+');
127
+ define('OP_MINUS', '-');
128
+ define('OP_MUL', '*');
129
+ define('OP_DIV', '/');
130
+ define('OP_MOD', '%');
131
+ define('OP_NOT', '!');
132
+ define('OP_BITWISE_NOT', '~');
133
+ define('OP_DOT', '.');
134
+ define('OP_LEFT_BRACKET', '[');
135
+ define('OP_RIGHT_BRACKET', ']');
136
+ define('OP_LEFT_CURLY', '{');
137
+ define('OP_RIGHT_CURLY', '}');
138
+ define('OP_LEFT_PAREN', '(');
139
+ define('OP_RIGHT_PAREN', ')');
140
+ define('OP_CONDCOMMENT_END', '@*/');
141
+
142
+ define('OP_UNARY_PLUS', 'U+');
143
+ define('OP_UNARY_MINUS', 'U-');
144
+
145
+ /* Keywords */
146
+ define('KEYWORD_BREAK', 'break');
147
+ define('KEYWORD_CASE', 'case');
148
+ define('KEYWORD_CATCH', 'catch');
149
+ define('KEYWORD_CONST', 'const');
150
+ define('KEYWORD_CONTINUE', 'continue');
151
+ define('KEYWORD_DEBUGGER', 'debugger');
152
+ define('KEYWORD_DEFAULT', 'default');
153
+ define('KEYWORD_DELETE', 'delete');
154
+ define('KEYWORD_DO', 'do');
155
+ define('KEYWORD_ELSE', 'else');
156
+ define('KEYWORD_ENUM', 'enum');
157
+ define('KEYWORD_FALSE', 'false');
158
+ define('KEYWORD_FINALLY', 'finally');
159
+ define('KEYWORD_FOR', 'for');
160
+ define('KEYWORD_FUNCTION', 'function');
161
+ define('KEYWORD_IF', 'if');
162
+ define('KEYWORD_IN', 'in');
163
+ define('KEYWORD_INSTANCEOF', 'instanceof');
164
+ define('KEYWORD_NEW', 'new');
165
+ define('KEYWORD_NULL', 'null');
166
+ define('KEYWORD_RETURN', 'return');
167
+ define('KEYWORD_SWITCH', 'switch');
168
+ define('KEYWORD_THIS', 'this');
169
+ define('KEYWORD_THROW', 'throw');
170
+ define('KEYWORD_TRUE', 'true');
171
+ define('KEYWORD_TRY', 'try');
172
+ define('KEYWORD_TYPEOF', 'typeof');
173
+ define('KEYWORD_VAR', 'var');
174
+ define('KEYWORD_VOID', 'void');
175
+ define('KEYWORD_WHILE', 'while');
176
+ define('KEYWORD_WITH', 'with');
177
+
178
+
179
+ class JSMinPlus
180
+ {
181
+ private $parser;
182
+ private $reserved = array(
183
+ 'break', 'case', 'catch', 'continue', 'default', 'delete', 'do',
184
+ 'else', 'finally', 'for', 'function', 'if', 'in', 'instanceof',
185
+ 'new', 'return', 'switch', 'this', 'throw', 'try', 'typeof', 'var',
186
+ 'void', 'while', 'with',
187
+ // Words reserved for future use
188
+ 'abstract', 'boolean', 'byte', 'char', 'class', 'const', 'debugger',
189
+ 'double', 'enum', 'export', 'extends', 'final', 'float', 'goto',
190
+ 'implements', 'import', 'int', 'interface', 'long', 'native',
191
+ 'package', 'private', 'protected', 'public', 'short', 'static',
192
+ 'super', 'synchronized', 'throws', 'transient', 'volatile',
193
+ // These are not reserved, but should be taken into account
194
+ // in isValidIdentifier (See jslint source code)
195
+ 'arguments', 'eval', 'true', 'false', 'Infinity', 'NaN', 'null', 'undefined'
196
+ );
197
+
198
+ private function __construct()
199
+ {
200
+ $this->parser = new JSParser($this);
201
+ }
202
+
203
+ public static function minify($js, $filename='')
204
+ {
205
+ static $instance;
206
+
207
+ // this is a singleton
208
+ if(!$instance)
209
+ $instance = new JSMinPlus();
210
+
211
+ return $instance->min($js, $filename);
212
+ }
213
+
214
+ private function min($js, $filename)
215
+ {
216
+ try
217
+ {
218
+ $n = $this->parser->parse($js, $filename, 1);
219
+ return $this->parseTree($n);
220
+ }
221
+ catch(Exception $e)
222
+ {
223
+ echo $e->getMessage() . "\n";
224
+ }
225
+
226
+ return false;
227
+ }
228
+
229
+ public function parseTree($n, $noBlockGrouping = false)
230
+ {
231
+ $s = '';
232
+
233
+ switch ($n->type)
234
+ {
235
+ case JS_MINIFIED:
236
+ $s = $n->value;
237
+ break;
238
+
239
+ case JS_SCRIPT:
240
+ // we do nothing yet with funDecls or varDecls
241
+ $noBlockGrouping = true;
242
+ // FALL THROUGH
243
+
244
+ case JS_BLOCK:
245
+ $childs = $n->treeNodes;
246
+ $lastType = 0;
247
+ for ($c = 0, $i = 0, $j = count($childs); $i < $j; $i++)
248
+ {
249
+ $type = $childs[$i]->type;
250
+ $t = $this->parseTree($childs[$i]);
251
+ if (strlen($t))
252
+ {
253
+ if ($c)
254
+ {
255
+ $s = rtrim($s, ';');
256
+
257
+ if ($type == KEYWORD_FUNCTION && $childs[$i]->functionForm == DECLARED_FORM)
258
+ {
259
+ // put declared functions on a new line
260
+ $s .= "\n";
261
+ }
262
+ elseif ($type == KEYWORD_VAR && $type == $lastType)
263
+ {
264
+ // mutiple var-statements can go into one
265
+ $t = ',' . substr($t, 4);
266
+ }
267
+ else
268
+ {
269
+ // add terminator
270
+ $s .= ';';
271
+ }
272
+ }
273
+
274
+ $s .= $t;
275
+
276
+ $c++;
277
+ $lastType = $type;
278
+ }
279
+ }
280
+
281
+ if ($c > 1 && !$noBlockGrouping)
282
+ {
283
+ $s = '{' . $s . '}';
284
+ }
285
+ break;
286
+
287
+ case KEYWORD_FUNCTION:
288
+ $s .= 'function' . ($n->name ? ' ' . $n->name : '') . '(';
289
+ $params = $n->params;
290
+ for ($i = 0, $j = count($params); $i < $j; $i++)
291
+ $s .= ($i ? ',' : '') . $params[$i];
292
+ $s .= '){' . $this->parseTree($n->body, true) . '}';
293
+ break;
294
+
295
+ case KEYWORD_IF:
296
+ $s = 'if(' . $this->parseTree($n->condition) . ')';
297
+ $thenPart = $this->parseTree($n->thenPart);
298
+ $elsePart = $n->elsePart ? $this->parseTree($n->elsePart) : null;
299
+
300
+ // empty if-statement
301
+ if ($thenPart == '')
302
+ $thenPart = ';';
303
+
304
+ if ($elsePart)
305
+ {
306
+ // be carefull and always make a block out of the thenPart; could be more optimized but is a lot of trouble
307
+ if ($thenPart != ';' && $thenPart[0] != '{')
308
+ $thenPart = '{' . $thenPart . '}';
309
+
310
+ $s .= $thenPart . 'else';
311
+
312
+ // we could check for more, but that hardly ever applies so go for performance
313
+ if ($elsePart[0] != '{')
314
+ $s .= ' ';
315
+
316
+ $s .= $elsePart;
317
+ }
318
+ else
319
+ {
320
+ $s .= $thenPart;
321
+ }
322
+ break;
323
+
324
+ case KEYWORD_SWITCH:
325
+ $s = 'switch(' . $this->parseTree($n->discriminant) . '){';
326
+ $cases = $n->cases;
327
+ for ($i = 0, $j = count($cases); $i < $j; $i++)
328
+ {
329
+ $case = $cases[$i];
330
+ if ($case->type == KEYWORD_CASE)
331
+ $s .= 'case' . ($case->caseLabel->type != TOKEN_STRING ? ' ' : '') . $this->parseTree($case->caseLabel) . ':';
332
+ else
333
+ $s .= 'default:';
334
+
335
+ $statement = $this->parseTree($case->statements, true);
336
+ if ($statement)
337
+ {
338
+ $s .= $statement;
339
+ // no terminator for last statement
340
+ if ($i + 1 < $j)
341
+ $s .= ';';
342
+ }
343
+ }
344
+ $s .= '}';
345
+ break;
346
+
347
+ case KEYWORD_FOR:
348
+ $s = 'for(' . ($n->setup ? $this->parseTree($n->setup) : '')
349
+ . ';' . ($n->condition ? $this->parseTree($n->condition) : '')
350
+ . ';' . ($n->update ? $this->parseTree($n->update) : '') . ')';
351
+
352
+ $body = $this->parseTree($n->body);
353
+ if ($body == '')
354
+ $body = ';';
355
+
356
+ $s .= $body;
357
+ break;
358
+
359
+ case KEYWORD_WHILE:
360
+ $s = 'while(' . $this->parseTree($n->condition) . ')';
361
+
362
+ $body = $this->parseTree($n->body);
363
+ if ($body == '')
364
+ $body = ';';
365
+
366
+ $s .= $body;
367
+ break;
368
+
369
+ case JS_FOR_IN:
370
+ $s = 'for(' . ($n->varDecl ? $this->parseTree($n->varDecl) : $this->parseTree($n->iterator)) . ' in ' . $this->parseTree($n->object) . ')';
371
+
372
+ $body = $this->parseTree($n->body);
373
+ if ($body == '')
374
+ $body = ';';
375
+
376
+ $s .= $body;
377
+ break;
378
+
379
+ case KEYWORD_DO:
380
+ $s = 'do{' . $this->parseTree($n->body, true) . '}while(' . $this->parseTree($n->condition) . ')';
381
+ break;
382
+
383
+ case KEYWORD_BREAK:
384
+ case KEYWORD_CONTINUE:
385
+ $s = $n->value . ($n->label ? ' ' . $n->label : '');
386
+ break;
387
+
388
+ case KEYWORD_TRY:
389
+ $s = 'try{' . $this->parseTree($n->tryBlock, true) . '}';
390
+ $catchClauses = $n->catchClauses;
391
+ for ($i = 0, $j = count($catchClauses); $i < $j; $i++)
392
+ {
393
+ $t = $catchClauses[$i];
394
+ $s .= 'catch(' . $t->varName . ($t->guard ? ' if ' . $this->parseTree($t->guard) : '') . '){' . $this->parseTree($t->block, true) . '}';
395
+ }
396
+ if ($n->finallyBlock)
397
+ $s .= 'finally{' . $this->parseTree($n->finallyBlock, true) . '}';
398
+ break;
399
+
400
+ case KEYWORD_THROW:
401
+ case KEYWORD_RETURN:
402
+ $s = $n->type;
403
+ if ($n->value)
404
+ {
405
+ $t = $this->parseTree($n->value);
406
+ if (strlen($t))
407
+ {
408
+ if ($this->isWordChar($t[0]) || $t[0] == '\\')
409
+ $s .= ' ';
410
+
411
+ $s .= $t;
412
+ }
413
+ }
414
+ break;
415
+
416
+ case KEYWORD_WITH:
417
+ $s = 'with(' . $this->parseTree($n->object) . ')' . $this->parseTree($n->body);
418
+ break;
419
+
420
+ case KEYWORD_VAR:
421
+ case KEYWORD_CONST:
422
+ $s = $n->value . ' ';
423
+ $childs = $n->treeNodes;
424
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
425
+ {
426
+ $t = $childs[$i];
427
+ $s .= ($i ? ',' : '') . $t->name;
428
+ $u = $t->initializer;
429
+ if ($u)
430
+ $s .= '=' . $this->parseTree($u);
431
+ }
432
+ break;
433
+
434
+ case KEYWORD_IN:
435
+ case KEYWORD_INSTANCEOF:
436
+ $left = $this->parseTree($n->treeNodes[0]);
437
+ $right = $this->parseTree($n->treeNodes[1]);
438
+
439
+ $s = $left;
440
+
441
+ if ($this->isWordChar(substr($left, -1)))
442
+ $s .= ' ';
443
+
444
+ $s .= $n->type;
445
+
446
+ if ($this->isWordChar($right[0]) || $right[0] == '\\')
447
+ $s .= ' ';
448
+
449
+ $s .= $right;
450
+ break;
451
+
452
+ case KEYWORD_DELETE:
453
+ case KEYWORD_TYPEOF:
454
+ $right = $this->parseTree($n->treeNodes[0]);
455
+
456
+ $s = $n->type;
457
+
458
+ if ($this->isWordChar($right[0]) || $right[0] == '\\')
459
+ $s .= ' ';
460
+
461
+ $s .= $right;
462
+ break;
463
+
464
+ case KEYWORD_VOID:
465
+ $s = 'void(' . $this->parseTree($n->treeNodes[0]) . ')';
466
+ break;
467
+
468
+ case KEYWORD_DEBUGGER:
469
+ throw new Exception('NOT IMPLEMENTED: DEBUGGER');
470
+ break;
471
+
472
+ case TOKEN_CONDCOMMENT_START:
473
+ case TOKEN_CONDCOMMENT_END:
474
+ $s = $n->value . ($n->type == TOKEN_CONDCOMMENT_START ? ' ' : '');
475
+ $childs = $n->treeNodes;
476
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
477
+ $s .= $this->parseTree($childs[$i]);
478
+ break;
479
+
480
+ case OP_SEMICOLON:
481
+ if ($expression = $n->expression)
482
+ $s = $this->parseTree($expression);
483
+ break;
484
+
485
+ case JS_LABEL:
486
+ $s = $n->label . ':' . $this->parseTree($n->statement);
487
+ break;
488
+
489
+ case OP_COMMA:
490
+ $childs = $n->treeNodes;
491
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
492
+ $s .= ($i ? ',' : '') . $this->parseTree($childs[$i]);
493
+ break;
494
+
495
+ case OP_ASSIGN:
496
+ $s = $this->parseTree($n->treeNodes[0]) . $n->value . $this->parseTree($n->treeNodes[1]);
497
+ break;
498
+
499
+ case OP_HOOK:
500
+ $s = $this->parseTree($n->treeNodes[0]) . '?' . $this->parseTree($n->treeNodes[1]) . ':' . $this->parseTree($n->treeNodes[2]);
501
+ break;
502
+
503
+ case OP_OR: case OP_AND:
504
+ case OP_BITWISE_OR: case OP_BITWISE_XOR: case OP_BITWISE_AND:
505
+ case OP_EQ: case OP_NE: case OP_STRICT_EQ: case OP_STRICT_NE:
506
+ case OP_LT: case OP_LE: case OP_GE: case OP_GT:
507
+ case OP_LSH: case OP_RSH: case OP_URSH:
508
+ case OP_MUL: case OP_DIV: case OP_MOD:
509
+ $s = $this->parseTree($n->treeNodes[0]) . $n->type . $this->parseTree($n->treeNodes[1]);
510
+ break;
511
+
512
+ case OP_PLUS:
513
+ case OP_MINUS:
514
+ $left = $this->parseTree($n->treeNodes[0]);
515
+ $right = $this->parseTree($n->treeNodes[1]);
516
+
517
+ switch ($n->treeNodes[1]->type)
518
+ {
519
+ case OP_PLUS:
520
+ case OP_MINUS:
521
+ case OP_INCREMENT:
522
+ case OP_DECREMENT:
523
+ case OP_UNARY_PLUS:
524
+ case OP_UNARY_MINUS:
525
+ $s = $left . $n->type . ' ' . $right;
526
+ break;
527
+
528
+ case TOKEN_STRING:
529
+ //combine concatted strings with same quotestyle
530
+ if ($n->type == OP_PLUS && substr($left, -1) == $right[0])
531
+ {
532
+ $s = substr($left, 0, -1) . substr($right, 1);
533
+ break;
534
+ }
535
+ // FALL THROUGH
536
+
537
+ default:
538
+ $s = $left . $n->type . $right;
539
+ }
540
+ break;
541
+
542
+ case OP_NOT:
543
+ case OP_BITWISE_NOT:
544
+ case OP_UNARY_PLUS:
545
+ case OP_UNARY_MINUS:
546
+ $s = $n->value . $this->parseTree($n->treeNodes[0]);
547
+ break;
548
+
549
+ case OP_INCREMENT:
550
+ case OP_DECREMENT:
551
+ if ($n->postfix)
552
+ $s = $this->parseTree($n->treeNodes[0]) . $n->value;
553
+ else
554
+ $s = $n->value . $this->parseTree($n->treeNodes[0]);
555
+ break;
556
+
557
+ case OP_DOT:
558
+ $s = $this->parseTree($n->treeNodes[0]) . '.' . $this->parseTree($n->treeNodes[1]);
559
+ break;
560
+
561
+ case JS_INDEX:
562
+ $s = $this->parseTree($n->treeNodes[0]);
563
+ // See if we can replace named index with a dot saving 3 bytes
564
+ if ( $n->treeNodes[0]->type == TOKEN_IDENTIFIER &&
565
+ $n->treeNodes[1]->type == TOKEN_STRING &&
566
+ $this->isValidIdentifier(substr($n->treeNodes[1]->value, 1, -1))
567
+ )
568
+ $s .= '.' . substr($n->treeNodes[1]->value, 1, -1);
569
+ else
570
+ $s .= '[' . $this->parseTree($n->treeNodes[1]) . ']';
571
+ break;
572
+
573
+ case JS_LIST:
574
+ $childs = $n->treeNodes;
575
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
576
+ $s .= ($i ? ',' : '') . $this->parseTree($childs[$i]);
577
+ break;
578
+
579
+ case JS_CALL:
580
+ $s = $this->parseTree($n->treeNodes[0]) . '(' . $this->parseTree($n->treeNodes[1]) . ')';
581
+ break;
582
+
583
+ case KEYWORD_NEW:
584
+ case JS_NEW_WITH_ARGS:
585
+ $s = 'new ' . $this->parseTree($n->treeNodes[0]) . '(' . ($n->type == JS_NEW_WITH_ARGS ? $this->parseTree($n->treeNodes[1]) : '') . ')';
586
+ break;
587
+
588
+ case JS_ARRAY_INIT:
589
+ $s = '[';
590
+ $childs = $n->treeNodes;
591
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
592
+ {
593
+ $s .= ($i ? ',' : '') . $this->parseTree($childs[$i]);
594
+ }
595
+ $s .= ']';
596
+ break;
597
+
598
+ case JS_OBJECT_INIT:
599
+ $s = '{';
600
+ $childs = $n->treeNodes;
601
+ for ($i = 0, $j = count($childs); $i < $j; $i++)
602
+ {
603
+ $t = $childs[$i];
604
+ if ($i)
605
+ $s .= ',';
606
+ if ($t->type == JS_PROPERTY_INIT)
607
+ {
608
+ // Ditch the quotes when the index is a valid identifier
609
+ if ( $t->treeNodes[0]->type == TOKEN_STRING &&
610
+ $this->isValidIdentifier(substr($t->treeNodes[0]->value, 1, -1))
611
+ )
612
+ $s .= substr($t->treeNodes[0]->value, 1, -1);
613
+ else
614
+ $s .= $t->treeNodes[0]->value;
615
+
616
+ $s .= ':' . $this->parseTree($t->treeNodes[1]);
617
+ }
618
+ else
619
+ {
620
+ $s .= $t->type == JS_GETTER ? 'get' : 'set';
621
+ $s .= ' ' . $t->name . '(';
622
+ $params = $t->params;
623
+ for ($i = 0, $j = count($params); $i < $j; $i++)
624
+ $s .= ($i ? ',' : '') . $params[$i];
625
+ $s .= '){' . $this->parseTree($t->body, true) . '}';
626
+ }
627
+ }
628
+ $s .= '}';
629
+ break;
630
+
631
+ case TOKEN_NUMBER:
632
+ $s = $n->value;
633
+ if (preg_match('/^([1-9]+)(0{3,})$/', $s, $m))
634
+ $s = $m[1] . 'e' . strlen($m[2]);
635
+ break;
636
+
637
+ case KEYWORD_NULL: case KEYWORD_THIS: case KEYWORD_TRUE: case KEYWORD_FALSE:
638
+ case TOKEN_IDENTIFIER: case TOKEN_STRING: case TOKEN_REGEXP:
639
+ $s = $n->value;
640
+ break;
641
+
642
+ case JS_GROUP:
643
+ if (in_array(
644
+ $n->treeNodes[0]->type,
645
+ array(
646
+ JS_ARRAY_INIT, JS_OBJECT_INIT, JS_GROUP,
647
+ TOKEN_NUMBER, TOKEN_STRING, TOKEN_REGEXP, TOKEN_IDENTIFIER,
648
+ KEYWORD_NULL, KEYWORD_THIS, KEYWORD_TRUE, KEYWORD_FALSE
649
+ )
650
+ ))
651
+ {
652
+ $s = $this->parseTree($n->treeNodes[0]);
653
+ }
654
+ else
655
+ {
656
+ $s = '(' . $this->parseTree($n->treeNodes[0]) . ')';
657
+ }
658
+ break;
659
+
660
+ default:
661
+ throw new Exception('UNKNOWN TOKEN TYPE: ' . $n->type);
662
+ }
663
+
664
+ return $s;
665
+ }
666
+
667
+ private function isValidIdentifier($string)
668
+ {
669
+ return preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/', $string) && !in_array($string, $this->reserved);
670
+ }
671
+
672
+ private function isWordChar($char)
673
+ {
674
+ return $char == '_' || $char == '$' || ctype_alnum($char);
675
+ }
676
+ }
677
+
678
+ class JSParser
679
+ {
680
+ private $t;
681
+ private $minifier;
682
+
683
+ private $opPrecedence = array(
684
+ ';' => 0,
685
+ ',' => 1,
686
+ '=' => 2, '?' => 2, ':' => 2,
687
+ // The above all have to have the same precedence, see bug 330975
688
+ '||' => 4,
689
+ '&&' => 5,
690
+ '|' => 6,
691
+ '^' => 7,
692
+ '&' => 8,
693
+ '==' => 9, '!=' => 9, '===' => 9, '!==' => 9,
694
+ '<' => 10, '<=' => 10, '>=' => 10, '>' => 10, 'in' => 10, 'instanceof' => 10,
695
+ '<<' => 11, '>>' => 11, '>>>' => 11,
696
+ '+' => 12, '-' => 12,
697
+ '*' => 13, '/' => 13, '%' => 13,
698
+ 'delete' => 14, 'void' => 14, 'typeof' => 14,
699
+ '!' => 14, '~' => 14, 'U+' => 14, 'U-' => 14,
700
+ '++' => 15, '--' => 15,
701
+ 'new' => 16,
702
+ '.' => 17,
703
+ JS_NEW_WITH_ARGS => 0, JS_INDEX => 0, JS_CALL => 0,
704
+ JS_ARRAY_INIT => 0, JS_OBJECT_INIT => 0, JS_GROUP => 0
705
+ );
706
+
707
+ private $opArity = array(
708
+ ',' => -2,
709
+ '=' => 2,
710
+ '?' => 3,
711
+ '||' => 2,
712
+ '&&' => 2,
713
+ '|' => 2,
714
+ '^' => 2,
715
+ '&' => 2,
716
+ '==' => 2, '!=' => 2, '===' => 2, '!==' => 2,
717
+ '<' => 2, '<=' => 2, '>=' => 2, '>' => 2, 'in' => 2, 'instanceof' => 2,
718
+ '<<' => 2, '>>' => 2, '>>>' => 2,
719
+ '+' => 2, '-' => 2,
720
+ '*' => 2, '/' => 2, '%' => 2,
721
+ 'delete' => 1, 'void' => 1, 'typeof' => 1,
722
+ '!' => 1, '~' => 1, 'U+' => 1, 'U-' => 1,
723
+ '++' => 1, '--' => 1,
724
+ 'new' => 1,
725
+ '.' => 2,
726
+ JS_NEW_WITH_ARGS => 2, JS_INDEX => 2, JS_CALL => 2,
727
+ JS_ARRAY_INIT => 1, JS_OBJECT_INIT => 1, JS_GROUP => 1,
728
+ TOKEN_CONDCOMMENT_START => 1, TOKEN_CONDCOMMENT_END => 1
729
+ );
730
+
731
+ public function __construct($minifier=null)
732
+ {
733
+ $this->minifier = $minifier;
734
+ $this->t = new JSTokenizer();
735
+ }
736
+
737
+ public function parse($s, $f, $l)
738
+ {
739
+ // initialize tokenizer
740
+ $this->t->init($s, $f, $l);
741
+
742
+ $x = new JSCompilerContext(false);
743
+ $n = $this->Script($x);
744
+ if (!$this->t->isDone())
745
+ throw $this->t->newSyntaxError('Syntax error');
746
+
747
+ return $n;
748
+ }
749
+
750
+ private function Script($x)
751
+ {
752
+ $n = $this->Statements($x);
753
+ $n->type = JS_SCRIPT;
754
+ $n->funDecls = $x->funDecls;
755
+ $n->varDecls = $x->varDecls;
756
+
757
+ // minify by scope
758
+ if ($this->minifier)
759
+ {
760
+ $n->value = $this->minifier->parseTree($n);
761
+
762
+ // clear tree from node to save memory
763
+ $n->treeNodes = null;
764
+ $n->funDecls = null;
765
+ $n->varDecls = null;
766
+
767
+ $n->type = JS_MINIFIED;
768
+ }
769
+
770
+ return $n;
771
+ }
772
+
773
+ private function Statements($x)
774
+ {
775
+ $n = new JSNode($this->t, JS_BLOCK);
776
+ array_push($x->stmtStack, $n);
777
+
778
+ while (!$this->t->isDone() && $this->t->peek() != OP_RIGHT_CURLY)
779
+ $n->addNode($this->Statement($x));
780
+
781
+ array_pop($x->stmtStack);
782
+
783
+ return $n;
784
+ }
785
+
786
+ private function Block($x)
787
+ {
788
+ $this->t->mustMatch(OP_LEFT_CURLY);
789
+ $n = $this->Statements($x);
790
+ $this->t->mustMatch(OP_RIGHT_CURLY);
791
+
792
+ return $n;
793
+ }
794
+
795
+ private function Statement($x)
796
+ {
797
+ $tt = $this->t->get();
798
+ $n2 = null;
799
+
800
+ // Cases for statements ending in a right curly return early, avoiding the
801
+ // common semicolon insertion magic after this switch.
802
+ switch ($tt)
803
+ {
804
+ case KEYWORD_FUNCTION:
805
+ return $this->FunctionDefinition(
806
+ $x,
807
+ true,
808
+ count($x->stmtStack) > 1 ? STATEMENT_FORM : DECLARED_FORM
809
+ );
810
+ break;
811
+
812
+ case OP_LEFT_CURLY:
813
+ $n = $this->Statements($x);
814
+ $this->t->mustMatch(OP_RIGHT_CURLY);
815
+ return $n;
816
+
817
+ case KEYWORD_IF:
818
+ $n = new JSNode($this->t);
819
+ $n->condition = $this->ParenExpression($x);
820
+ array_push($x->stmtStack, $n);
821
+ $n->thenPart = $this->Statement($x);
822
+ $n->elsePart = $this->t->match(KEYWORD_ELSE) ? $this->Statement($x) : null;
823
+ array_pop($x->stmtStack);
824
+ return $n;
825
+
826
+ case KEYWORD_SWITCH:
827
+ $n = new JSNode($this->t);
828
+ $this->t->mustMatch(OP_LEFT_PAREN);
829
+ $n->discriminant = $this->Expression($x);
830
+ $this->t->mustMatch(OP_RIGHT_PAREN);
831
+ $n->cases = array();
832
+ $n->defaultIndex = -1;
833
+
834
+ array_push($x->stmtStack, $n);
835
+
836
+ $this->t->mustMatch(OP_LEFT_CURLY);
837
+
838
+ while (($tt = $this->t->get()) != OP_RIGHT_CURLY)
839
+ {
840
+ switch ($tt)
841
+ {
842
+ case KEYWORD_DEFAULT:
843
+ if ($n->defaultIndex >= 0)
844
+ throw $this->t->newSyntaxError('More than one switch default');
845
+ // FALL THROUGH
846
+ case KEYWORD_CASE:
847
+ $n2 = new JSNode($this->t);
848
+ if ($tt == KEYWORD_DEFAULT)
849
+ $n->defaultIndex = count($n->cases);
850
+ else
851
+ $n2->caseLabel = $this->Expression($x, OP_COLON);
852
+ break;
853
+ default:
854
+ throw $this->t->newSyntaxError('Invalid switch case');
855
+ }
856
+
857
+ $this->t->mustMatch(OP_COLON);
858
+ $n2->statements = new JSNode($this->t, JS_BLOCK);
859
+ while (($tt = $this->t->peek()) != KEYWORD_CASE && $tt != KEYWORD_DEFAULT && $tt != OP_RIGHT_CURLY)
860
+ $n2->statements->addNode($this->Statement($x));
861
+
862
+ array_push($n->cases, $n2);
863
+ }
864
+
865
+ array_pop($x->stmtStack);
866
+ return $n;
867
+
868
+ case KEYWORD_FOR:
869
+ $n = new JSNode($this->t);
870
+ $n->isLoop = true;
871
+ $this->t->mustMatch(OP_LEFT_PAREN);
872
+
873
+ if (($tt = $this->t->peek()) != OP_SEMICOLON)
874
+ {
875
+ $x->inForLoopInit = true;
876
+ if ($tt == KEYWORD_VAR || $tt == KEYWORD_CONST)
877
+ {
878
+ $this->t->get();
879
+ $n2 = $this->Variables($x);
880
+ }
881
+ else
882
+ {
883
+ $n2 = $this->Expression($x);
884
+ }
885
+ $x->inForLoopInit = false;
886
+ }
887
+
888
+ if ($n2 && $this->t->match(KEYWORD_IN))
889
+ {
890
+ $n->type = JS_FOR_IN;
891
+ if ($n2->type == KEYWORD_VAR)
892
+ {
893
+ if (count($n2->treeNodes) != 1)
894
+ {
895
+ throw $this->t->newSyntaxError(
896
+ 'Invalid for..in left-hand side',
897
+ $this->t->filename,
898
+ $n2->lineno
899
+ );
900
+ }
901
+
902
+ // NB: n2[0].type == IDENTIFIER and n2[0].value == n2[0].name.
903
+ $n->iterator = $n2->treeNodes[0];
904
+ $n->varDecl = $n2;
905
+ }
906
+ else
907
+ {
908
+ $n->iterator = $n2;
909
+ $n->varDecl = null;
910
+ }
911
+
912
+ $n->object = $this->Expression($x);
913
+ }
914
+ else
915
+ {
916
+ $n->setup = $n2 ? $n2 : null;
917
+ $this->t->mustMatch(OP_SEMICOLON);
918
+ $n->condition = $this->t->peek() == OP_SEMICOLON ? null : $this->Expression($x);
919
+ $this->t->mustMatch(OP_SEMICOLON);
920
+ $n->update = $this->t->peek() == OP_RIGHT_PAREN ? null : $this->Expression($x);
921
+ }
922
+
923
+ $this->t->mustMatch(OP_RIGHT_PAREN);
924
+ $n->body = $this->nest($x, $n);
925
+ return $n;
926
+
927
+ case KEYWORD_WHILE:
928
+ $n = new JSNode($this->t);
929
+ $n->isLoop = true;
930
+ $n->condition = $this->ParenExpression($x);
931
+ $n->body = $this->nest($x, $n);
932
+ return $n;
933
+
934
+ case KEYWORD_DO:
935
+ $n = new JSNode($this->t);
936
+ $n->isLoop = true;
937
+ $n->body = $this->nest($x, $n, KEYWORD_WHILE);
938
+ $n->condition = $this->ParenExpression($x);
939
+ if (!$x->ecmaStrictMode)
940
+ {
941
+ // <script language="JavaScript"> (without version hints) may need
942
+ // automatic semicolon insertion without a newline after do-while.
943
+ // See http://bugzilla.mozilla.org/show_bug.cgi?id=238945.
944
+ $this->t->match(OP_SEMICOLON);
945
+ return $n;
946
+ }
947
+ break;
948
+
949
+ case KEYWORD_BREAK:
950
+ case KEYWORD_CONTINUE:
951
+ $n = new JSNode($this->t);
952
+
953
+ if ($this->t->peekOnSameLine() == TOKEN_IDENTIFIER)
954
+ {
955
+ $this->t->get();
956
+ $n->label = $this->t->currentToken()->value;
957
+ }
958
+
959
+ $ss = $x->stmtStack;
960
+ $i = count($ss);
961
+ $label = $n->label;
962
+ if ($label)
963
+ {
964
+ do
965
+ {
966
+ if (--$i < 0)
967
+ throw $this->t->newSyntaxError('Label not found');
968
+ }
969
+ while ($ss[$i]->label != $label);
970
+ }
971
+ else
972
+ {
973
+ do
974
+ {
975
+ if (--$i < 0)
976
+ throw $this->t->newSyntaxError('Invalid ' . $tt);
977
+ }
978
+ while (!$ss[$i]->isLoop && ($tt != KEYWORD_BREAK || $ss[$i]->type != KEYWORD_SWITCH));
979
+ }
980
+
981
+ $n->target = $ss[$i];
982
+ break;
983
+
984
+ case KEYWORD_TRY:
985
+ $n = new JSNode($this->t);
986
+ $n->tryBlock = $this->Block($x);
987
+ $n->catchClauses = array();
988
+
989
+ while ($this->t->match(KEYWORD_CATCH))
990
+ {
991
+ $n2 = new JSNode($this->t);
992
+ $this->t->mustMatch(OP_LEFT_PAREN);
993
+ $n2->varName = $this->t->mustMatch(TOKEN_IDENTIFIER)->value;
994
+
995
+ if ($this->t->match(KEYWORD_IF))
996
+ {
997
+ if ($x->ecmaStrictMode)
998
+ throw $this->t->newSyntaxError('Illegal catch guard');
999
+
1000
+ if (count($n->catchClauses) && !end($n->catchClauses)->guard)
1001
+ throw $this->t->newSyntaxError('Guarded catch after unguarded');
1002
+
1003
+ $n2->guard = $this->Expression($x);
1004
+ }
1005
+ else
1006
+ {
1007
+ $n2->guard = null;
1008
+ }
1009
+
1010
+ $this->t->mustMatch(OP_RIGHT_PAREN);
1011
+ $n2->block = $this->Block($x);
1012
+ array_push($n->catchClauses, $n2);
1013
+ }
1014
+
1015
+ if ($this->t->match(KEYWORD_FINALLY))
1016
+ $n->finallyBlock = $this->Block($x);
1017
+
1018
+ if (!count($n->catchClauses) && !$n->finallyBlock)
1019
+ throw $this->t->newSyntaxError('Invalid try statement');
1020
+ return $n;
1021
+
1022
+ case KEYWORD_CATCH:
1023
+ case KEYWORD_FINALLY:
1024
+ throw $this->t->newSyntaxError($tt + ' without preceding try');
1025
+
1026
+ case KEYWORD_THROW:
1027
+ $n = new JSNode($this->t);
1028
+ $n->value = $this->Expression($x);
1029
+ break;
1030
+
1031
+ case KEYWORD_RETURN:
1032
+ if (!$x->inFunction)
1033
+ throw $this->t->newSyntaxError('Invalid return');
1034
+
1035
+ $n = new JSNode($this->t);
1036
+ $tt = $this->t->peekOnSameLine();
1037
+ if ($tt != TOKEN_END && $tt != TOKEN_NEWLINE && $tt != OP_SEMICOLON && $tt != OP_RIGHT_CURLY)
1038
+ $n->value = $this->Expression($x);
1039
+ else
1040
+ $n->value = null;
1041
+ break;
1042
+
1043
+ case KEYWORD_WITH:
1044
+ $n = new JSNode($this->t);
1045
+ $n->object = $this->ParenExpression($x);
1046
+ $n->body = $this->nest($x, $n);
1047
+ return $n;
1048
+
1049
+ case KEYWORD_VAR:
1050
+ case KEYWORD_CONST:
1051
+ $n = $this->Variables($x);
1052
+ break;
1053
+
1054
+ case TOKEN_CONDCOMMENT_START:
1055
+ case TOKEN_CONDCOMMENT_END:
1056
+ $n = new JSNode($this->t);
1057
+ return $n;
1058
+
1059
+ case KEYWORD_DEBUGGER:
1060
+ $n = new JSNode($this->t);
1061
+ break;
1062
+
1063
+ case TOKEN_NEWLINE:
1064
+ case OP_SEMICOLON:
1065
+ $n = new JSNode($this->t, OP_SEMICOLON);
1066
+ $n->expression = null;
1067
+ return $n;
1068
+
1069
+ default:
1070
+ if ($tt == TOKEN_IDENTIFIER)
1071
+ {
1072
+ $this->t->scanOperand = false;
1073
+ $tt = $this->t->peek();
1074
+ $this->t->scanOperand = true;
1075
+ if ($tt == OP_COLON)
1076
+ {
1077
+ $label = $this->t->currentToken()->value;
1078
+ $ss = $x->stmtStack;
1079
+ for ($i = count($ss) - 1; $i >= 0; --$i)
1080
+ {
1081
+ if ($ss[$i]->label == $label)
1082
+ throw $this->t->newSyntaxError('Duplicate label');
1083
+ }
1084
+
1085
+ $this->t->get();
1086
+ $n = new JSNode($this->t, JS_LABEL);
1087
+ $n->label = $label;
1088
+ $n->statement = $this->nest($x, $n);
1089
+
1090
+ return $n;
1091
+ }
1092
+ }
1093
+
1094
+ $n = new JSNode($this->t, OP_SEMICOLON);
1095
+ $this->t->unget();
1096
+ $n->expression = $this->Expression($x);
1097
+ $n->end = $n->expression->end;
1098
+ break;
1099
+ }
1100
+
1101
+ if ($this->t->lineno == $this->t->currentToken()->lineno)
1102
+ {
1103
+ $tt = $this->t->peekOnSameLine();
1104
+ if ($tt != TOKEN_END && $tt != TOKEN_NEWLINE && $tt != OP_SEMICOLON && $tt != OP_RIGHT_CURLY)
1105
+ throw $this->t->newSyntaxError('Missing ; before statement');
1106
+ }
1107
+
1108
+ $this->t->match(OP_SEMICOLON);
1109
+
1110
+ return $n;
1111
+ }
1112
+
1113
+ private function FunctionDefinition($x, $requireName, $functionForm)
1114
+ {
1115
+ $f = new JSNode($this->t);
1116
+
1117
+ if ($f->type != KEYWORD_FUNCTION)
1118
+ $f->type = ($f->value == 'get') ? JS_GETTER : JS_SETTER;
1119
+
1120
+ if ($this->t->match(TOKEN_IDENTIFIER))
1121
+ $f->name = $this->t->currentToken()->value;
1122
+ elseif ($requireName)
1123
+ throw $this->t->newSyntaxError('Missing function identifier');
1124
+
1125
+ $this->t->mustMatch(OP_LEFT_PAREN);
1126
+ $f->params = array();
1127
+
1128
+ while (($tt = $this->t->get()) != OP_RIGHT_PAREN)
1129
+ {
1130
+ if ($tt != TOKEN_IDENTIFIER)
1131
+ throw $this->t->newSyntaxError('Missing formal parameter');
1132
+
1133
+ array_push($f->params, $this->t->currentToken()->value);
1134
+
1135
+ if ($this->t->peek() != OP_RIGHT_PAREN)
1136
+ $this->t->mustMatch(OP_COMMA);
1137
+ }
1138
+
1139
+ $this->t->mustMatch(OP_LEFT_CURLY);
1140
+
1141
+ $x2 = new JSCompilerContext(true);
1142
+ $f->body = $this->Script($x2);
1143
+
1144
+ $this->t->mustMatch(OP_RIGHT_CURLY);
1145
+ $f->end = $this->t->currentToken()->end;
1146
+
1147
+ $f->functionForm = $functionForm;
1148
+ if ($functionForm == DECLARED_FORM)
1149
+ array_push($x->funDecls, $f);
1150
+
1151
+ return $f;
1152
+ }
1153
+
1154
+ private function Variables($x)
1155
+ {
1156
+ $n = new JSNode($this->t);
1157
+
1158
+ do
1159
+ {
1160
+ $this->t->mustMatch(TOKEN_IDENTIFIER);
1161
+
1162
+ $n2 = new JSNode($this->t);
1163
+ $n2->name = $n2->value;
1164
+
1165
+ if ($this->t->match(OP_ASSIGN))
1166
+ {
1167
+ if ($this->t->currentToken()->assignOp)
1168
+ throw $this->t->newSyntaxError('Invalid variable initialization');
1169
+
1170
+ $n2->initializer = $this->Expression($x, OP_COMMA);
1171
+ }
1172
+
1173
+ $n2->readOnly = $n->type == KEYWORD_CONST;
1174
+
1175
+ $n->addNode($n2);
1176
+ array_push($x->varDecls, $n2);
1177
+ }
1178
+ while ($this->t->match(OP_COMMA));
1179
+
1180
+ return $n;
1181
+ }
1182
+
1183
+ private function Expression($x, $stop=false)
1184
+ {
1185
+ $operators = array();
1186
+ $operands = array();
1187
+ $n = false;
1188
+
1189
+ $bl = $x->bracketLevel;
1190
+ $cl = $x->curlyLevel;
1191
+ $pl = $x->parenLevel;
1192
+ $hl = $x->hookLevel;
1193
+
1194
+ while (($tt = $this->t->get()) != TOKEN_END)
1195
+ {
1196
+ if ($tt == $stop &&
1197
+ $x->bracketLevel == $bl &&
1198
+ $x->curlyLevel == $cl &&
1199
+ $x->parenLevel == $pl &&
1200
+ $x->hookLevel == $hl
1201
+ )
1202
+ {
1203
+ // Stop only if tt matches the optional stop parameter, and that
1204
+ // token is not quoted by some kind of bracket.
1205
+ break;
1206
+ }
1207
+
1208
+ switch ($tt)
1209
+ {
1210
+ case OP_SEMICOLON:
1211
+ // NB: cannot be empty, Statement handled that.
1212
+ break 2;
1213
+
1214
+ case OP_HOOK:
1215
+ if ($this->t->scanOperand)
1216
+ break 2;
1217
+
1218
+ while ( !empty($operators) &&
1219
+ $this->opPrecedence[end($operators)->type] > $this->opPrecedence[$tt]
1220
+ )
1221
+ $this->reduce($operators, $operands);
1222
+
1223
+ array_push($operators, new JSNode($this->t));
1224
+
1225
+ ++$x->hookLevel;
1226
+ $this->t->scanOperand = true;
1227
+ $n = $this->Expression($x);
1228
+
1229
+ if (!$this->t->match(OP_COLON))
1230
+ break 2;
1231
+
1232
+ --$x->hookLevel;
1233
+ array_push($operands, $n);
1234
+ break;
1235
+
1236
+ case OP_COLON:
1237
+ if ($x->hookLevel)
1238
+ break 2;
1239
+
1240
+ throw $this->t->newSyntaxError('Invalid label');
1241
+ break;
1242
+
1243
+ case OP_ASSIGN:
1244
+ if ($this->t->scanOperand)
1245
+ break 2;
1246
+
1247
+ // Use >, not >=, for right-associative ASSIGN
1248
+ while ( !empty($operators) &&
1249
+ $this->opPrecedence[end($operators)->type] > $this->opPrecedence[$tt]
1250
+ )
1251
+ $this->reduce($operators, $operands);
1252
+
1253
+ array_push($operators, new JSNode($this->t));
1254
+ end($operands)->assignOp = $this->t->currentToken()->assignOp;
1255
+ $this->t->scanOperand = true;
1256
+ break;
1257
+
1258
+ case KEYWORD_IN:
1259
+ // An in operator should not be parsed if we're parsing the head of
1260
+ // a for (...) loop, unless it is in the then part of a conditional
1261
+ // expression, or parenthesized somehow.
1262
+ if ($x->inForLoopInit && !$x->hookLevel &&
1263
+ !$x->bracketLevel && !$x->curlyLevel &&
1264
+ !$x->parenLevel
1265
+ )
1266
+ break 2;
1267
+ // FALL THROUGH
1268
+ case OP_COMMA:
1269
+ // A comma operator should not be parsed if we're parsing the then part
1270
+ // of a conditional expression unless it's parenthesized somehow.
1271
+ if ($tt == OP_COMMA && $x->hookLevel &&
1272
+ !$x->bracketLevel && !$x->curlyLevel &&
1273
+ !$x->parenLevel
1274
+ )
1275
+ break 2;
1276
+ // Treat comma as left-associative so reduce can fold left-heavy
1277
+ // COMMA trees into a single array.
1278
+ // FALL THROUGH
1279
+ case OP_OR:
1280
+ case OP_AND:
1281
+ case OP_BITWISE_OR:
1282
+ case OP_BITWISE_XOR:
1283
+ case OP_BITWISE_AND:
1284
+ case OP_EQ: case OP_NE: case OP_STRICT_EQ: case OP_STRICT_NE:
1285
+ case OP_LT: case OP_LE: case OP_GE: case OP_GT:
1286
+ case KEYWORD_INSTANCEOF:
1287
+ case OP_LSH: case OP_RSH: case OP_URSH:
1288
+ case OP_PLUS: case OP_MINUS:
1289
+ case OP_MUL: case OP_DIV: case OP_MOD:
1290
+ case OP_DOT:
1291
+ if ($this->t->scanOperand)
1292
+ break 2;
1293
+
1294
+ while ( !empty($operators) &&
1295
+ $this->opPrecedence[end($operators)->type] >= $this->opPrecedence[$tt]
1296
+ )
1297
+ $this->reduce($operators, $operands);
1298
+
1299
+ if ($tt == OP_DOT)
1300
+ {
1301
+ $this->t->mustMatch(TOKEN_IDENTIFIER);
1302
+ array_push($operands, new JSNode($this->t, OP_DOT, array_pop($operands), new JSNode($this->t)));
1303
+ }
1304
+ else
1305
+ {
1306
+ array_push($operators, new JSNode($this->t));
1307
+ $this->t->scanOperand = true;
1308
+ }
1309
+ break;
1310
+
1311
+ case KEYWORD_DELETE: case KEYWORD_VOID: case KEYWORD_TYPEOF:
1312
+ case OP_NOT: case OP_BITWISE_NOT: case OP_UNARY_PLUS: case OP_UNARY_MINUS:
1313
+ case KEYWORD_NEW:
1314
+ if (!$this->t->scanOperand)
1315
+ break 2;
1316
+
1317
+ array_push($operators, new JSNode($this->t));
1318
+ break;
1319
+
1320
+ case OP_INCREMENT: case OP_DECREMENT:
1321
+ if ($this->t->scanOperand)
1322
+ {
1323
+ array_push($operators, new JSNode($this->t)); // prefix increment or decrement
1324
+ }
1325
+ else
1326
+ {
1327
+ // Don't cross a line boundary for postfix {in,de}crement.
1328
+ $t = $this->t->tokens[($this->t->tokenIndex + $this->t->lookahead - 1) & 3];
1329
+ if ($t && $t->lineno != $this->t->lineno)
1330
+ break 2;
1331
+
1332
+ if (!empty($operators))
1333
+ {
1334
+ // Use >, not >=, so postfix has higher precedence than prefix.
1335
+ while ($this->opPrecedence[end($operators)->type] > $this->opPrecedence[$tt])
1336
+ $this->reduce($operators, $operands);
1337
+ }
1338
+
1339
+ $n = new JSNode($this->t, $tt, array_pop($operands));
1340
+ $n->postfix = true;
1341
+ array_push($operands, $n);
1342
+ }
1343
+ break;
1344
+
1345
+ case KEYWORD_FUNCTION:
1346
+ if (!$this->t->scanOperand)
1347
+ break 2;
1348
+
1349
+ array_push($operands, $this->FunctionDefinition($x, false, EXPRESSED_FORM));
1350
+ $this->t->scanOperand = false;
1351
+ break;
1352
+
1353
+ case KEYWORD_NULL: case KEYWORD_THIS: case KEYWORD_TRUE: case KEYWORD_FALSE:
1354
+ case TOKEN_IDENTIFIER: case TOKEN_NUMBER: case TOKEN_STRING: case TOKEN_REGEXP:
1355
+ if (!$this->t->scanOperand)
1356
+ break 2;
1357
+
1358
+ array_push($operands, new JSNode($this->t));
1359
+ $this->t->scanOperand = false;
1360
+ break;
1361
+
1362
+ case TOKEN_CONDCOMMENT_START:
1363
+ case TOKEN_CONDCOMMENT_END:
1364
+ if ($this->t->scanOperand)
1365
+ array_push($operators, new JSNode($this->t));
1366
+ else
1367
+ array_push($operands, new JSNode($this->t));
1368
+ break;
1369
+
1370
+ case OP_LEFT_BRACKET:
1371
+ if ($this->t->scanOperand)
1372
+ {
1373
+ // Array initialiser. Parse using recursive descent, as the
1374
+ // sub-grammar here is not an operator grammar.
1375
+ $n = new JSNode($this->t, JS_ARRAY_INIT);
1376
+ while (($tt = $this->t->peek()) != OP_RIGHT_BRACKET)
1377
+ {
1378
+ if ($tt == OP_COMMA)
1379
+ {
1380
+ $this->t->get();
1381
+ $n->addNode(null);
1382
+ continue;
1383
+ }
1384
+
1385
+ $n->addNode($this->Expression($x, OP_COMMA));
1386
+ if (!$this->t->match(OP_COMMA))
1387
+ break;
1388
+ }
1389
+
1390
+ $this->t->mustMatch(OP_RIGHT_BRACKET);
1391
+ array_push($operands, $n);
1392
+ $this->t->scanOperand = false;
1393
+ }
1394
+ else
1395
+ {
1396
+ // Property indexing operator.
1397
+ array_push($operators, new JSNode($this->t, JS_INDEX));
1398
+ $this->t->scanOperand = true;
1399
+ ++$x->bracketLevel;
1400
+ }
1401
+ break;
1402
+
1403
+ case OP_RIGHT_BRACKET:
1404
+ if ($this->t->scanOperand || $x->bracketLevel == $bl)
1405
+ break 2;
1406
+
1407
+ while ($this->reduce($operators, $operands)->type != JS_INDEX)
1408
+ continue;
1409
+
1410
+ --$x->bracketLevel;
1411
+ break;
1412
+
1413
+ case OP_LEFT_CURLY:
1414
+ if (!$this->t->scanOperand)
1415
+ break 2;
1416
+
1417
+ // Object initialiser. As for array initialisers (see above),
1418
+ // parse using recursive descent.
1419
+ ++$x->curlyLevel;
1420
+ $n = new JSNode($this->t, JS_OBJECT_INIT);
1421
+ while (!$this->t->match(OP_RIGHT_CURLY))
1422
+ {
1423
+ do
1424
+ {
1425
+ $tt = $this->t->get();
1426
+ $tv = $this->t->currentToken()->value;
1427
+ if (($tv == 'get' || $tv == 'set') && $this->t->peek() == TOKEN_IDENTIFIER)
1428
+ {
1429
+ if ($x->ecmaStrictMode)
1430
+ throw $this->t->newSyntaxError('Illegal property accessor');
1431
+
1432
+ $n->addNode($this->FunctionDefinition($x, true, EXPRESSED_FORM));
1433
+ }
1434
+ else
1435
+ {
1436
+ switch ($tt)
1437
+ {
1438
+ case TOKEN_IDENTIFIER:
1439
+ case TOKEN_NUMBER:
1440
+ case TOKEN_STRING:
1441
+ $id = new JSNode($this->t);
1442
+ break;
1443
+
1444
+ case OP_RIGHT_CURLY:
1445
+ if ($x->ecmaStrictMode)
1446
+ throw $this->t->newSyntaxError('Illegal trailing ,');
1447
+ break 3;
1448
+
1449
+ default:
1450
+ throw $this->t->newSyntaxError('Invalid property name');
1451
+ }
1452
+
1453
+ $this->t->mustMatch(OP_COLON);
1454
+ $n->addNode(new JSNode($this->t, JS_PROPERTY_INIT, $id, $this->Expression($x, OP_COMMA)));
1455
+ }
1456
+ }
1457
+ while ($this->t->match(OP_COMMA));
1458
+
1459
+ $this->t->mustMatch(OP_RIGHT_CURLY);
1460
+ break;
1461
+ }
1462
+
1463
+ array_push($operands, $n);
1464
+ $this->t->scanOperand = false;
1465
+ --$x->curlyLevel;
1466
+ break;
1467
+
1468
+ case OP_RIGHT_CURLY:
1469
+ if (!$this->t->scanOperand && $x->curlyLevel != $cl)
1470
+ throw new Exception('PANIC: right curly botch');
1471
+ break 2;
1472
+
1473
+ case OP_LEFT_PAREN:
1474
+ if ($this->t->scanOperand)
1475
+ {
1476
+ array_push($operators, new JSNode($this->t, JS_GROUP));
1477
+ }
1478
+ else
1479
+ {
1480
+ while ( !empty($operators) &&
1481
+ $this->opPrecedence[end($operators)->type] > $this->opPrecedence[KEYWORD_NEW]
1482
+ )
1483
+ $this->reduce($operators, $operands);
1484
+
1485
+ // Handle () now, to regularize the n-ary case for n > 0.
1486
+ // We must set scanOperand in case there are arguments and
1487
+ // the first one is a regexp or unary+/-.
1488
+ $n = end($operators);
1489
+ $this->t->scanOperand = true;
1490
+ if ($this->t->match(OP_RIGHT_PAREN))
1491
+ {
1492
+ if ($n && $n->type == KEYWORD_NEW)
1493
+ {
1494
+ array_pop($operators);
1495
+ $n->addNode(array_pop($operands));
1496
+ }
1497
+ else
1498
+ {
1499
+ $n = new JSNode($this->t, JS_CALL, array_pop($operands), new JSNode($this->t, JS_LIST));
1500
+ }
1501
+
1502
+ array_push($operands, $n);
1503
+ $this->t->scanOperand = false;
1504
+ break;
1505
+ }
1506
+
1507
+ if ($n && $n->type == KEYWORD_NEW)
1508
+ $n->type = JS_NEW_WITH_ARGS;
1509
+ else
1510
+ array_push($operators, new JSNode($this->t, JS_CALL));
1511
+ }
1512
+
1513
+ ++$x->parenLevel;
1514
+ break;
1515
+
1516
+ case OP_RIGHT_PAREN:
1517
+ if ($this->t->scanOperand || $x->parenLevel == $pl)
1518
+ break 2;
1519
+
1520
+ while (($tt = $this->reduce($operators, $operands)->type) != JS_GROUP &&
1521
+ $tt != JS_CALL && $tt != JS_NEW_WITH_ARGS
1522
+ )
1523
+ {
1524
+ continue;
1525
+ }
1526
+
1527
+ if ($tt != JS_GROUP)
1528
+ {
1529
+ $n = end($operands);
1530
+ if ($n->treeNodes[1]->type != OP_COMMA)
1531
+ $n->treeNodes[1] = new JSNode($this->t, JS_LIST, $n->treeNodes[1]);
1532
+ else
1533
+ $n->treeNodes[1]->type = JS_LIST;
1534
+ }
1535
+
1536
+ --$x->parenLevel;
1537
+ break;
1538
+
1539
+ // Automatic semicolon insertion means we may scan across a newline
1540
+ // and into the beginning of another statement. If so, break out of
1541
+ // the while loop and let the t.scanOperand logic handle errors.
1542
+ default:
1543
+ break 2;
1544
+ }
1545
+ }
1546
+
1547
+ if ($x->hookLevel != $hl)
1548
+ throw $this->t->newSyntaxError('Missing : in conditional expression');
1549
+
1550
+ if ($x->parenLevel != $pl)
1551
+ throw $this->t->newSyntaxError('Missing ) in parenthetical');
1552
+
1553
+ if ($x->bracketLevel != $bl)
1554
+ throw $this->t->newSyntaxError('Missing ] in index expression');
1555
+
1556
+ if ($this->t->scanOperand)
1557
+ throw $this->t->newSyntaxError('Missing operand');
1558
+
1559
+ // Resume default mode, scanning for operands, not operators.
1560
+ $this->t->scanOperand = true;
1561
+ $this->t->unget();
1562
+
1563
+ while (count($operators))
1564
+ $this->reduce($operators, $operands);
1565
+
1566
+ return array_pop($operands);
1567
+ }
1568
+
1569
+ private function ParenExpression($x)
1570
+ {
1571
+ $this->t->mustMatch(OP_LEFT_PAREN);
1572
+ $n = $this->Expression($x);
1573
+ $this->t->mustMatch(OP_RIGHT_PAREN);
1574
+
1575
+ return $n;
1576
+ }
1577
+
1578
+ // Statement stack and nested statement handler.
1579
+ private function nest($x, $node, $end = false)
1580
+ {
1581
+ array_push($x->stmtStack, $node);
1582
+ $n = $this->statement($x);
1583
+ array_pop($x->stmtStack);
1584
+
1585
+ if ($end)
1586
+ $this->t->mustMatch($end);
1587
+
1588
+ return $n;
1589
+ }
1590
+
1591
+ private function reduce(&$operators, &$operands)
1592
+ {
1593
+ $n = array_pop($operators);
1594
+ $op = $n->type;
1595
+ $arity = $this->opArity[$op];
1596
+ $c = count($operands);
1597
+ if ($arity == -2)
1598
+ {
1599
+ // Flatten left-associative trees
1600
+ if ($c >= 2)
1601
+ {
1602
+ $left = $operands[$c - 2];
1603
+ if ($left->type == $op)
1604
+ {
1605
+ $right = array_pop($operands);
1606
+ $left->addNode($right);
1607
+ return $left;
1608
+ }
1609
+ }
1610
+ $arity = 2;
1611
+ }
1612
+
1613
+ // Always use push to add operands to n, to update start and end
1614
+ $a = array_splice($operands, $c - $arity);
1615
+ for ($i = 0; $i < $arity; $i++)
1616
+ $n->addNode($a[$i]);
1617
+
1618
+ // Include closing bracket or postfix operator in [start,end]
1619
+ $te = $this->t->currentToken()->end;
1620
+ if ($n->end < $te)
1621
+ $n->end = $te;
1622
+
1623
+ array_push($operands, $n);
1624
+
1625
+ return $n;
1626
+ }
1627
+ }
1628
+
1629
+ class JSCompilerContext
1630
+ {
1631
+ public $inFunction = false;
1632
+ public $inForLoopInit = false;
1633
+ public $ecmaStrictMode = false;
1634
+ public $bracketLevel = 0;
1635
+ public $curlyLevel = 0;
1636
+ public $parenLevel = 0;
1637
+ public $hookLevel = 0;
1638
+
1639
+ public $stmtStack = array();
1640
+ public $funDecls = array();
1641
+ public $varDecls = array();
1642
+
1643
+ public function __construct($inFunction)
1644
+ {
1645
+ $this->inFunction = $inFunction;
1646
+ }
1647
+ }
1648
+
1649
+ class JSNode
1650
+ {
1651
+ private $type;
1652
+ private $value;
1653
+ private $lineno;
1654
+ private $start;
1655
+ private $end;
1656
+
1657
+ public $treeNodes = array();
1658
+ public $funDecls = array();
1659
+ public $varDecls = array();
1660
+
1661
+ public function __construct($t, $type=0)
1662
+ {
1663
+ if ($token = $t->currentToken())
1664
+ {
1665
+ $this->type = $type ? $type : $token->type;
1666
+ $this->value = $token->value;
1667
+ $this->lineno = $token->lineno;
1668
+ $this->start = $token->start;
1669
+ $this->end = $token->end;
1670
+ }
1671
+ else
1672
+ {
1673
+ $this->type = $type;
1674
+ $this->lineno = $t->lineno;
1675
+ }
1676
+
1677
+ if (($numargs = func_num_args()) > 2)
1678
+ {
1679
+ $args = func_get_args();
1680
+ for ($i = 2; $i < $numargs; $i++)
1681
+ $this->addNode($args[$i]);
1682
+ }
1683
+ }
1684
+
1685
+ // we don't want to bloat our object with all kind of specific properties, so we use overloading
1686
+ public function __set($name, $value)
1687
+ {
1688
+ $this->$name = $value;
1689
+ }
1690
+
1691
+ public function __get($name)
1692
+ {
1693
+ if (isset($this->$name))
1694
+ return $this->$name;
1695
+
1696
+ return null;
1697
+ }
1698
+
1699
+ public function addNode($node)
1700
+ {
1701
+ if ($node !== null)
1702
+ {
1703
+ if ($node->start < $this->start)
1704
+ $this->start = $node->start;
1705
+ if ($this->end < $node->end)
1706
+ $this->end = $node->end;
1707
+ }
1708
+
1709
+ $this->treeNodes[] = $node;
1710
+ }
1711
+ }
1712
+
1713
+ class JSTokenizer
1714
+ {
1715
+ private $cursor = 0;
1716
+ private $source;
1717
+
1718
+ public $tokens = array();
1719
+ public $tokenIndex = 0;
1720
+ public $lookahead = 0;
1721
+ public $scanNewlines = false;
1722
+ public $scanOperand = true;
1723
+
1724
+ public $filename;
1725
+ public $lineno;
1726
+
1727
+ private $keywords = array(
1728
+ 'break',
1729
+ 'case', 'catch', 'const', 'continue',
1730
+ 'debugger', 'default', 'delete', 'do',
1731
+ 'else', 'enum',
1732
+ 'false', 'finally', 'for', 'function',
1733
+ 'if', 'in', 'instanceof',
1734
+ 'new', 'null',
1735
+ 'return',
1736
+ 'switch',
1737
+ 'this', 'throw', 'true', 'try', 'typeof',
1738
+ 'var', 'void',
1739
+ 'while', 'with'
1740
+ );
1741
+
1742
+ private $opTypeNames = array(
1743
+ ';', ',', '?', ':', '||', '&&', '|', '^',
1744
+ '&', '===', '==', '=', '!==', '!=', '<<', '<=',
1745
+ '<', '>>>', '>>', '>=', '>', '++', '--', '+',
1746
+ '-', '*', '/', '%', '!', '~', '.', '[',
1747
+ ']', '{', '}', '(', ')', '@*/'
1748
+ );
1749
+
1750
+ private $assignOps = array('|', '^', '&', '<<', '>>', '>>>', '+', '-', '*', '/', '%');
1751
+ private $opRegExp;
1752
+
1753
+ public function __construct()
1754
+ {
1755
+ $this->opRegExp = '#^(' . implode('|', array_map('preg_quote', $this->opTypeNames)) . ')#';
1756
+ }
1757
+
1758
+ public function init($source, $filename = '', $lineno = 1)
1759
+ {
1760
+ $this->source = $source;
1761
+ $this->filename = $filename ? $filename : '[inline]';
1762
+ $this->lineno = $lineno;
1763
+
1764
+ $this->cursor = 0;
1765
+ $this->tokens = array();
1766
+ $this->tokenIndex = 0;
1767
+ $this->lookahead = 0;
1768
+ $this->scanNewlines = false;
1769
+ $this->scanOperand = true;
1770
+ }
1771
+
1772
+ public function getInput($chunksize)
1773
+ {
1774
+ if ($chunksize)
1775
+ return substr($this->source, $this->cursor, $chunksize);
1776
+
1777
+ return substr($this->source, $this->cursor);
1778
+ }
1779
+
1780
+ public function isDone()
1781
+ {
1782
+ return $this->peek() == TOKEN_END;
1783
+ }
1784
+
1785
+ public function match($tt)
1786
+ {
1787
+ return $this->get() == $tt || $this->unget();
1788
+ }
1789
+
1790
+ public function mustMatch($tt)
1791
+ {
1792
+ if (!$this->match($tt))
1793
+ throw $this->newSyntaxError('Unexpected token; token ' . $tt . ' expected');
1794
+
1795
+ return $this->currentToken();
1796
+ }
1797
+
1798
+ public function peek()
1799
+ {
1800
+ if ($this->lookahead)
1801
+ {
1802
+ $next = $this->tokens[($this->tokenIndex + $this->lookahead) & 3];
1803
+ if ($this->scanNewlines && $next->lineno != $this->lineno)
1804
+ $tt = TOKEN_NEWLINE;
1805
+ else
1806
+ $tt = $next->type;
1807
+ }
1808
+ else
1809
+ {
1810
+ $tt = $this->get();
1811
+ $this->unget();
1812
+ }
1813
+
1814
+ return $tt;
1815
+ }
1816
+
1817
+ public function peekOnSameLine()
1818
+ {
1819
+ $this->scanNewlines = true;
1820
+ $tt = $this->peek();
1821
+ $this->scanNewlines = false;
1822
+
1823
+ return $tt;
1824
+ }
1825
+
1826
+ public function currentToken()
1827
+ {
1828
+ if (!empty($this->tokens))
1829
+ return $this->tokens[$this->tokenIndex];
1830
+ }
1831
+
1832
+ public function get($chunksize = 1000)
1833
+ {
1834
+ while($this->lookahead)
1835
+ {
1836
+ $this->lookahead--;
1837
+ $this->tokenIndex = ($this->tokenIndex + 1) & 3;
1838
+ $token = $this->tokens[$this->tokenIndex];
1839
+ if ($token->type != TOKEN_NEWLINE || $this->scanNewlines)
1840
+ return $token->type;
1841
+ }
1842
+
1843
+ $conditional_comment = false;
1844
+
1845
+ // strip whitespace and comments
1846
+ while(true)
1847
+ {
1848
+ $input = $this->getInput($chunksize);
1849
+
1850
+ // whitespace handling; gobble up \r as well (effectively we don't have support for MAC newlines!)
1851
+ $re = $this->scanNewlines ? '/^[ \r\t]+/' : '/^\s+/';
1852
+ if (preg_match($re, $input, $match))
1853
+ {
1854
+ $spaces = $match[0];
1855
+ $spacelen = strlen($spaces);
1856
+ $this->cursor += $spacelen;
1857
+ if (!$this->scanNewlines)
1858
+ $this->lineno += substr_count($spaces, "\n");
1859
+
1860
+ if ($spacelen == $chunksize)
1861
+ continue; // complete chunk contained whitespace
1862
+
1863
+ $input = $this->getInput($chunksize);
1864
+ if ($input == '' || $input[0] != '/')
1865
+ break;
1866
+ }
1867
+
1868
+ // Comments
1869
+ if (!preg_match('/^\/(?:\*(@(?:cc_on|if|elif|else|end))?.*?\*\/|\/[^\n]*)/s', $input, $match))
1870
+ {
1871
+ if (!$chunksize)
1872
+ break;
1873
+
1874
+ // retry with a full chunk fetch; this also prevents breakage of long regular expressions (which will never match a comment)
1875
+ $chunksize = null;
1876
+ continue;
1877
+ }
1878
+
1879
+ // check if this is a conditional (JScript) comment
1880
+ if (!empty($match[1]))
1881
+ {
1882
+ $match[0] = '/*' . $match[1];
1883
+ $conditional_comment = true;
1884
+ break;
1885
+ }
1886
+ else
1887
+ {
1888
+ $this->cursor += strlen($match[0]);
1889
+ $this->lineno += substr_count($match[0], "\n");
1890
+ }
1891
+ }
1892
+
1893
+ if ($input == '')
1894
+ {
1895
+ $tt = TOKEN_END;
1896
+ $match = array('');
1897
+ }
1898
+ elseif ($conditional_comment)
1899
+ {
1900
+ $tt = TOKEN_CONDCOMMENT_START;
1901
+ }
1902
+ else
1903
+ {
1904
+ switch ($input[0])
1905
+ {
1906
+ case '0':
1907
+ // hexadecimal
1908
+ if (($input[1] == 'x' || $input[1] == 'X') && preg_match('/^0x[0-9a-f]+/i', $input, $match))
1909
+ {
1910
+ $tt = TOKEN_NUMBER;
1911
+ break;
1912
+ }
1913
+ // FALL THROUGH
1914
+
1915
+ case '1': case '2': case '3': case '4': case '5':
1916
+ case '6': case '7': case '8': case '9':
1917
+ // should always match
1918
+ preg_match('/^\d+(?:\.\d*)?(?:[eE][-+]?\d+)?/', $input, $match);
1919
+ $tt = TOKEN_NUMBER;
1920
+ break;
1921
+
1922
+ case "'":
1923
+ if (preg_match('/^\'(?:[^\\\\\'\r\n]++|\\\\(?:.|\r?\n))*\'/', $input, $match))
1924
+ {
1925
+ $tt = TOKEN_STRING;
1926
+ }
1927
+ else
1928
+ {
1929
+ if ($chunksize)
1930
+ return $this->get(null); // retry with a full chunk fetch
1931
+
1932
+ throw $this->newSyntaxError('Unterminated string literal');
1933
+ }
1934
+ break;
1935
+
1936
+ case '"':
1937
+ if (preg_match('/^"(?:[^\\\\"\r\n]++|\\\\(?:.|\r?\n))*"/', $input, $match))
1938
+ {
1939
+ $tt = TOKEN_STRING;
1940
+ }
1941
+ else
1942
+ {
1943
+ if ($chunksize)
1944
+ return $this->get(null); // retry with a full chunk fetch
1945
+
1946
+ throw $this->newSyntaxError('Unterminated string literal');
1947
+ }
1948
+ break;
1949
+
1950
+ case '/':
1951
+ if ($this->scanOperand && preg_match('/^\/((?:\\\\.|\[(?:\\\\.|[^\]])*\]|[^\/])+)\/([gimy]*)/', $input, $match))
1952
+ {
1953
+ $tt = TOKEN_REGEXP;
1954
+ break;
1955
+ }
1956
+ // FALL THROUGH
1957
+
1958
+ case '|':
1959
+ case '^':
1960
+ case '&':
1961
+ case '<':
1962
+ case '>':
1963
+ case '+':
1964
+ case '-':
1965
+ case '*':
1966
+ case '%':
1967
+ case '=':
1968
+ case '!':
1969
+ // should always match
1970
+ preg_match($this->opRegExp, $input, $match);
1971
+ $op = $match[0];
1972
+ if (in_array($op, $this->assignOps) && $input[strlen($op)] == '=')
1973
+ {
1974
+ $tt = OP_ASSIGN;
1975
+ $match[0] .= '=';
1976
+ }
1977
+ else
1978
+ {
1979
+ $tt = $op;
1980
+ if ($this->scanOperand)
1981
+ {
1982
+ if ($op == OP_PLUS)
1983
+ $tt = OP_UNARY_PLUS;
1984
+ elseif ($op == OP_MINUS)
1985
+ $tt = OP_UNARY_MINUS;
1986
+ }
1987
+ $op = null;
1988
+ }
1989
+ break;
1990
+
1991
+ case '.':
1992
+ if (preg_match('/^\.\d+(?:[eE][-+]?\d+)?/', $input, $match))
1993
+ {
1994
+ $tt = TOKEN_NUMBER;
1995
+ break;
1996
+ }
1997
+ // FALL THROUGH
1998
+
1999
+ case ';':
2000
+ case ',':
2001
+ case '?':
2002
+ case ':':
2003
+ case '~':
2004
+ case '[':
2005
+ case ']':
2006
+ case '{':
2007
+ case '}':
2008
+ case '(':
2009
+ case ')':
2010
+ // these are all single
2011
+ $match = array($input[0]);
2012
+ $tt = $input[0];
2013
+ break;
2014
+
2015
+ case '@':
2016
+ // check end of conditional comment
2017
+ if (substr($input, 0, 3) == '@*/')
2018
+ {
2019
+ $match = array('@*/');
2020
+ $tt = TOKEN_CONDCOMMENT_END;
2021
+ }
2022
+ else
2023
+ throw $this->newSyntaxError('Illegal token');
2024
+ break;
2025
+
2026
+ case "\n":
2027
+ if ($this->scanNewlines)
2028
+ {
2029
+ $match = array("\n");
2030
+ $tt = TOKEN_NEWLINE;
2031
+ }
2032
+ else
2033
+ throw $this->newSyntaxError('Illegal token');
2034
+ break;
2035
+
2036
+ default:
2037
+ // FIXME: add support for unicode and unicode escape sequence \uHHHH
2038
+ if (preg_match('/^[$\w]+/', $input, $match))
2039
+ {
2040
+ $tt = in_array($match[0], $this->keywords) ? $match[0] : TOKEN_IDENTIFIER;
2041
+ }
2042
+ else
2043
+ throw $this->newSyntaxError('Illegal token');
2044
+ }
2045
+ }
2046
+
2047
+ $this->tokenIndex = ($this->tokenIndex + 1) & 3;
2048
+
2049
+ if (!isset($this->tokens[$this->tokenIndex]))
2050
+ $this->tokens[$this->tokenIndex] = new JSToken();
2051
+
2052
+ $token = $this->tokens[$this->tokenIndex];
2053
+ $token->type = $tt;
2054
+
2055
+ if ($tt == OP_ASSIGN)
2056
+ $token->assignOp = $op;
2057
+
2058
+ $token->start = $this->cursor;
2059
+
2060
+ $token->value = $match[0];
2061
+ $this->cursor += strlen($match[0]);
2062
+
2063
+ $token->end = $this->cursor;
2064
+ $token->lineno = $this->lineno;
2065
+
2066
+ return $tt;
2067
+ }
2068
+
2069
+ public function unget()
2070
+ {
2071
+ if (++$this->lookahead == 4)
2072
+ throw $this->newSyntaxError('PANIC: too much lookahead!');
2073
+
2074
+ $this->tokenIndex = ($this->tokenIndex - 1) & 3;
2075
+ }
2076
+
2077
+ public function newSyntaxError($m)
2078
+ {
2079
+ return new Exception('Parse error: ' . $m . ' in file \'' . $this->filename . '\' on line ' . $this->lineno);
2080
+ }
2081
+ }
2082
+
2083
+ class JSToken
2084
+ {
2085
+ public $type;
2086
+ public $value;
2087
+ public $start;
2088
+ public $end;
2089
+ public $lineno;
2090
+ public $assignOp;
2091
+ }
lib/API/JSON/v1/Subscribers.php CHANGED
@@ -200,14 +200,21 @@ class Subscribers extends APIEndpoint {
200
 
201
  public function sendConfirmationEmail($data = []) {
202
  $id = (isset($data['id']) ? (int)$data['id'] : false);
203
- $subscriber = Subscriber::findOne($id);
204
- if ($subscriber instanceof Subscriber) {
205
- if ($this->confirmationEmailMailer->sendConfirmationEmail($subscriber)) {
206
- return $this->successResponse();
 
 
 
 
 
 
 
 
 
 
207
  }
208
- return $this->errorResponse([
209
- APIError::UNKNOWN => __('There was a problem with your sending method. Please check if your sending method is properly configured.', 'mailpoet'),
210
- ]);
211
  } else {
212
  return $this->errorResponse([
213
  APIError::NOT_FOUND => WPFunctions::get()->__('This subscriber does not exist.', 'mailpoet'),
200
 
201
  public function sendConfirmationEmail($data = []) {
202
  $id = (isset($data['id']) ? (int)$data['id'] : false);
203
+ $subscriber = $this->subscribersRepository->findOneById($id);
204
+ if ($subscriber instanceof SubscriberEntity) {
205
+ try {
206
+ if ($this->confirmationEmailMailer->sendConfirmationEmail($subscriber)) {
207
+ return $this->successResponse();
208
+ } else {
209
+ return $this->errorResponse([
210
+ APIError::UNKNOWN => __('There was a problem with your sending method. Please check if your sending method is properly configured.', 'mailpoet'),
211
+ ]);
212
+ }
213
+ } catch (\Exception $e) {
214
+ return $this->errorResponse([
215
+ APIError::UNKNOWN => __('There was a problem with your sending method. Please check if your sending method is properly configured.', 'mailpoet'),
216
+ ]);
217
  }
 
 
 
218
  } else {
219
  return $this->errorResponse([
220
  APIError::NOT_FOUND => WPFunctions::get()->__('This subscriber does not exist.', 'mailpoet'),
lib/API/MP/v1/API.php CHANGED
@@ -5,6 +5,7 @@ namespace MailPoet\API\MP\v1;
5
  if (!defined('ABSPATH')) exit;
6
 
7
 
 
8
  use MailPoet\Models\Segment;
9
  use MailPoet\Models\Subscriber;
10
  use MailPoet\Models\SubscriberSegment;
@@ -14,6 +15,7 @@ use MailPoet\Subscribers\ConfirmationEmailMailer;
14
  use MailPoet\Subscribers\NewSubscriberNotificationMailer;
15
  use MailPoet\Subscribers\RequiredCustomFieldValidator;
16
  use MailPoet\Subscribers\Source;
 
17
  use MailPoet\Tasks\Sending;
18
  use MailPoet\Util\Helpers;
19
  use MailPoet\WP\Functions as WPFunctions;
@@ -38,13 +40,17 @@ class API {
38
  /** @var CustomFields */
39
  private $customFields;
40
 
 
 
 
41
  public function __construct(
42
  NewSubscriberNotificationMailer $newSubscriberNotificationMailer,
43
  ConfirmationEmailMailer $confirmationEmailMailer,
44
  RequiredCustomFieldValidator $requiredCustomFieldValidator,
45
  WelcomeScheduler $welcomeScheduler,
46
  CustomFields $customFields,
47
- SettingsController $settings
 
48
  ) {
49
  $this->newSubscriberNotificationMailer = $newSubscriberNotificationMailer;
50
  $this->confirmationEmailMailer = $confirmationEmailMailer;
@@ -52,6 +58,7 @@ class API {
52
  $this->welcomeScheduler = $welcomeScheduler;
53
  $this->settings = $settings;
54
  $this->customFields = $customFields;
 
55
  }
56
 
57
  public function getSubscriberFields() {
@@ -144,11 +151,13 @@ class API {
144
 
145
  // send confirmation email
146
  if ($sendConfirmationEmail) {
147
- $result = $this->_sendConfirmationEmail($subscriber);
148
- if (!$result && $subscriber->getErrors()) {
 
149
  throw new APIException(
150
- __(sprintf('Subscriber added to lists, but confirmation email failed to send: %s', strtolower(implode(', ', $subscriber->getErrors()))), 'mailpoet'),
151
- APIException::CONFIRMATION_FAILED_TO_SEND);
 
152
  }
153
  }
154
 
@@ -327,7 +336,10 @@ class API {
327
  }
328
 
329
  protected function _sendConfirmationEmail(Subscriber $subscriber) {
330
- return $this->confirmationEmailMailer->sendConfirmationEmailOnce($subscriber);
 
 
 
331
  }
332
 
333
  protected function _scheduleWelcomeNotification(Subscriber $subscriber, array $segments) {
5
  if (!defined('ABSPATH')) exit;
6
 
7
 
8
+ use MailPoet\Entities\SubscriberEntity;
9
  use MailPoet\Models\Segment;
10
  use MailPoet\Models\Subscriber;
11
  use MailPoet\Models\SubscriberSegment;
15
  use MailPoet\Subscribers\NewSubscriberNotificationMailer;
16
  use MailPoet\Subscribers\RequiredCustomFieldValidator;
17
  use MailPoet\Subscribers\Source;
18
+ use MailPoet\Subscribers\SubscribersRepository;
19
  use MailPoet\Tasks\Sending;
20
  use MailPoet\Util\Helpers;
21
  use MailPoet\WP\Functions as WPFunctions;
40
  /** @var CustomFields */
41
  private $customFields;
42
 
43
+ /** @var SubscribersRepository */
44
+ private $subscribersRepository;
45
+
46
  public function __construct(
47
  NewSubscriberNotificationMailer $newSubscriberNotificationMailer,
48
  ConfirmationEmailMailer $confirmationEmailMailer,
49
  RequiredCustomFieldValidator $requiredCustomFieldValidator,
50
  WelcomeScheduler $welcomeScheduler,
51
  CustomFields $customFields,
52
+ SettingsController $settings,
53
+ SubscribersRepository $subscribersRepository
54
  ) {
55
  $this->newSubscriberNotificationMailer = $newSubscriberNotificationMailer;
56
  $this->confirmationEmailMailer = $confirmationEmailMailer;
58
  $this->welcomeScheduler = $welcomeScheduler;
59
  $this->settings = $settings;
60
  $this->customFields = $customFields;
61
+ $this->subscribersRepository = $subscribersRepository;
62
  }
63
 
64
  public function getSubscriberFields() {
151
 
152
  // send confirmation email
153
  if ($sendConfirmationEmail) {
154
+ try {
155
+ $this->_sendConfirmationEmail($subscriber);
156
+ } catch (\Exception $e) {
157
  throw new APIException(
158
+ __(sprintf('Subscriber added to lists, but confirmation email failed to send: %s', strtolower($e->getMessage())), 'mailpoet'),
159
+ APIException::CONFIRMATION_FAILED_TO_SEND
160
+ );
161
  }
162
  }
163
 
336
  }
337
 
338
  protected function _sendConfirmationEmail(Subscriber $subscriber) {
339
+ $subscriberEntity = $this->subscribersRepository->findOneById($subscriber->id);
340
+ if ($subscriberEntity instanceof SubscriberEntity) {
341
+ return $this->confirmationEmailMailer->sendConfirmationEmailOnce($subscriberEntity);
342
+ }
343
  }
344
 
345
  protected function _scheduleWelcomeNotification(Subscriber $subscriber, array $segments) {
lib/Config/RequirementsChecker.php CHANGED
@@ -17,7 +17,6 @@ class RequirementsChecker {
17
 
18
  public $displayErrorNotice;
19
  public $vendorClasses = [
20
- '\pQuery',
21
  '\Cron\CronExpression',
22
  '\Html2Text\Html2Text',
23
  ];
17
 
18
  public $displayErrorNotice;
19
  public $vendorClasses = [
 
20
  '\Cron\CronExpression',
21
  '\Html2Text\Html2Text',
22
  ];
lib/Config/ServicesChecker.php CHANGED
@@ -135,6 +135,19 @@ class ServicesChecker {
135
  return $mssActive && $mssKeyValid && $mssKeyPendingApproval;
136
  }
137
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
  /**
139
  * Returns MSS or Premium valid key.
140
  */
135
  return $mssActive && $mssKeyValid && $mssKeyPendingApproval;
136
  }
137
 
138
+ public function isUserActivelyPaying(): bool {
139
+ $isPremiumKeyValid = $this->isPremiumKeyValid(false);
140
+
141
+ $mssActive = Bridge::isMPSendingServiceEnabled();
142
+ $isMssKeyValid = $this->isMailPoetAPIKeyValid(false);
143
+
144
+ if (!$mssActive || ($isPremiumKeyValid && !$isMssKeyValid)) {
145
+ return $this->subscribersFeature->hasPremiumSupport();
146
+ } else {
147
+ return $this->subscribersFeature->hasMssPremiumSupport();
148
+ }
149
+ }
150
+
151
  /**
152
  * Returns MSS or Premium valid key.
153
  */
lib/DI/ContainerConfigurator.php CHANGED
@@ -223,8 +223,6 @@ class ContainerConfigurator implements IContainerConfigurator {
223
  // Helpscout
224
  $container->autowire(\MailPoet\Helpscout\Beacon::class)->setPublic(true);
225
  // Listing
226
- $container->autowire(\MailPoet\Listing\BulkActionController::class)->setPublic(true);
227
- $container->autowire(\MailPoet\Listing\BulkActionFactory::class)->setPublic(true);
228
  $container->autowire(\MailPoet\Listing\Handler::class)->setPublic(true);
229
  $container->autowire(\MailPoet\Listing\PageLimit::class)->setPublic(true);
230
  // Logging
223
  // Helpscout
224
  $container->autowire(\MailPoet\Helpscout\Beacon::class)->setPublic(true);
225
  // Listing
 
 
226
  $container->autowire(\MailPoet\Listing\Handler::class)->setPublic(true);
227
  $container->autowire(\MailPoet\Listing\PageLimit::class)->setPublic(true);
228
  // Logging
lib/Form/Block/Date.php CHANGED
@@ -131,11 +131,11 @@ class Date {
131
  if (!empty($block['params']['value'])) {
132
  $date = CarbonImmutable::createFromFormat('Y-m-d H:i:s', $block['params']['value']);
133
  if ($date instanceof CarbonImmutable) {
134
- $defaults['selected'] = (int)strftime('%m', $date->getTimestamp());
135
  }
136
  } elseif (!empty($block['params']['is_default_today'])) {
137
  // is default today
138
- $defaults['selected'] = (int)strftime('%m');
139
  }
140
  // merge block with defaults
141
  $block = array_merge($defaults, $block);
@@ -160,18 +160,18 @@ class Date {
160
  private function getYears(array $block = []): string {
161
  $defaults = [
162
  'selected' => null,
163
- 'from' => (int)strftime('%Y') - 100,
164
- 'to' => (int)strftime('%Y'),
165
  ];
166
 
167
  if (!empty($block['params']['value'])) {
168
  $date = CarbonImmutable::createFromFormat('Y-m-d H:i:s', $block['params']['value']);
169
  if ($date instanceof CarbonImmutable) {
170
- $defaults['selected'] = (int)strftime('%Y', $date->getTimestamp());
171
  }
172
  } elseif (!empty($block['params']['is_default_today'])) {
173
  // is default today
174
- $defaults['selected'] = (int)strftime('%Y');
175
  }
176
 
177
  // merge block with defaults
@@ -198,11 +198,11 @@ class Date {
198
  if (!empty($block['params']['value'])) {
199
  $date = CarbonImmutable::createFromFormat('Y-m-d H:i:s', $block['params']['value']);
200
  if ($date instanceof CarbonImmutable) {
201
- $defaults['selected'] = (int)strftime('%d', $date->getTimestamp());
202
  }
203
  } elseif (!empty($block['params']['is_default_today'])) {
204
  // is default today
205
- $defaults['selected'] = (int)strftime('%d');
206
  }
207
 
208
  // merge block with defaults
131
  if (!empty($block['params']['value'])) {
132
  $date = CarbonImmutable::createFromFormat('Y-m-d H:i:s', $block['params']['value']);
133
  if ($date instanceof CarbonImmutable) {
134
+ $defaults['selected'] = (int)date('m', $date->getTimestamp());
135
  }
136
  } elseif (!empty($block['params']['is_default_today'])) {
137
  // is default today
138
+ $defaults['selected'] = (int)date('m');
139
  }
140
  // merge block with defaults
141
  $block = array_merge($defaults, $block);
160
  private function getYears(array $block = []): string {
161
  $defaults = [
162
  'selected' => null,
163
+ 'from' => (int)date('Y') - 100,
164
+ 'to' => (int)date('Y'),
165
  ];
166
 
167
  if (!empty($block['params']['value'])) {
168
  $date = CarbonImmutable::createFromFormat('Y-m-d H:i:s', $block['params']['value']);
169
  if ($date instanceof CarbonImmutable) {
170
+ $defaults['selected'] = (int)date('Y', $date->getTimestamp());
171
  }
172
  } elseif (!empty($block['params']['is_default_today'])) {
173
  // is default today
174
+ $defaults['selected'] = (int)date('Y');
175
  }
176
 
177
  // merge block with defaults
198
  if (!empty($block['params']['value'])) {
199
  $date = CarbonImmutable::createFromFormat('Y-m-d H:i:s', $block['params']['value']);
200
  if ($date instanceof CarbonImmutable) {
201
+ $defaults['selected'] = (int)date('d', $date->getTimestamp());
202
  }
203
  } elseif (!empty($block['params']['is_default_today'])) {
204
  // is default today
205
+ $defaults['selected'] = (int)date('d');
206
  }
207
 
208
  // merge block with defaults
lib/Listing/BulkActionController.php DELETED
@@ -1,37 +0,0 @@
1
- <?php
2
-
3
- namespace MailPoet\Listing;
4
-
5
- if (!defined('ABSPATH')) exit;
6
-
7
-
8
- class BulkActionController {
9
- /** @var BulkActionFactory */
10
- private $factory;
11
-
12
- /** @var Handler */
13
- private $handler;
14
-
15
- public function __construct(
16
- BulkActionFactory $factory,
17
- Handler $handler
18
- ) {
19
- $this->factory = $factory;
20
- $this->handler = $handler;
21
- }
22
-
23
- public function apply($modelClass, array $data) {
24
- $bulkActionMethod = 'bulk' . ucfirst($data['action']);
25
- unset($data['action']);
26
-
27
- $actionClass = $this->factory->getActionClass($modelClass, $bulkActionMethod);
28
- $callback = [$actionClass, $bulkActionMethod];
29
-
30
- if (is_callable($callback)) {
31
- return call_user_func_array(
32
- $callback,
33
- [$this->handler->getSelection($modelClass, $data['listing']), $data]
34
- );
35
- }
36
- }
37
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/Listing/BulkActionFactory.php DELETED
@@ -1,33 +0,0 @@
1
- <?php
2
-
3
- namespace MailPoet\Listing;
4
-
5
- if (!defined('ABSPATH')) exit;
6
-
7
-
8
- class BulkActionFactory {
9
- /** @var array */
10
- private $actions = [];
11
-
12
- public function registerAction($modelClass, $bulkActionMethod, $actionClass) {
13
- $this->ensureMethodExists($actionClass, $bulkActionMethod);
14
- $this->actions[$modelClass][$bulkActionMethod] = $actionClass;
15
- }
16
-
17
- public function getActionClass($modelClass, $bulkActionMethod) {
18
- $resultingClass = $modelClass;
19
- if (!empty($this->actions[$modelClass][$bulkActionMethod])) {
20
- $resultingClass = $this->actions[$modelClass][$bulkActionMethod];
21
- }
22
- $this->ensureMethodExists($resultingClass, $bulkActionMethod);
23
- return $resultingClass;
24
- }
25
-
26
- private function ensureMethodExists($actionClass, $bulkActionMethod) {
27
- if (!method_exists($actionClass, $bulkActionMethod)) {
28
- throw new \Exception(
29
- (is_object($actionClass) ? get_class($actionClass) : $actionClass) . ' has no method "' . $bulkActionMethod . '"'
30
- );
31
- }
32
- }
33
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/Listing/Handler.php CHANGED
@@ -11,33 +11,6 @@ use MailPoetVendor\Paris\ORMWrapper;
11
  class Handler {
12
  const DEFAULT_LIMIT_PER_PAGE = 20;
13
 
14
- public function getSelection($modelClass, array $data) {
15
- $data = $this->processData($data);
16
- $tableName = $modelClass::$_table;
17
- $model = Model::factory($modelClass);
18
- $callback = [$modelClass, 'listingQuery'];
19
-
20
- if (method_exists($modelClass, 'listingQuery') && is_callable($callback)) {
21
- $customQuery = call_user_func_array(
22
- $callback,
23
- [$data]
24
- );
25
- if (!empty($data['selection'])) {
26
- $customQuery->whereIn($tableName . '.id', $data['selection']);
27
- }
28
- return $customQuery;
29
- } else {
30
- $model = $this->setFilter($model, $data);
31
- $this->setGroup($model, $data);
32
- $this->setSearch($model, $data);
33
-
34
- if (!empty($data['selection'])) {
35
- $model->whereIn($tableName . '.id', $data['selection']);
36
- }
37
- return $model;
38
- }
39
- }
40
-
41
  public function get($modelClass, array $data) {
42
  $data = $this->processData($data);
43
  $tableName = $modelClass::$_table;
@@ -143,6 +116,15 @@ class Handler {
143
  return $model->filter('filterBy', $data['filter']);
144
  }
145
 
 
 
 
 
 
 
 
 
 
146
  private function processData(array $data) {
147
  // check if sort order was specified or default to "asc"
148
  $sortOrder = (!empty($data['sort_order'])) ? $data['sort_order'] : 'asc';
@@ -151,7 +133,7 @@ class Handler {
151
 
152
  // sanitize sort by
153
  $sortBy = (!empty($data['sort_by']))
154
- ? filter_var($data['sort_by'], FILTER_SANITIZE_STRING)
155
  : '';
156
 
157
  if (empty($sortBy)) {
11
  class Handler {
12
  const DEFAULT_LIMIT_PER_PAGE = 20;
13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  public function get($modelClass, array $data) {
15
  $data = $this->processData($data);
16
  $tableName = $modelClass::$_table;
116
  return $model->filter('filterBy', $data['filter']);
117
  }
118
 
119
+ /**
120
+ * Polyfill for deprecated FILTER_SANITIZE_STRING which was used to sanitize
121
+ * $data['sort_by'].
122
+ */
123
+ private function filterString(string $string): string {
124
+ $str = (string)preg_replace('/\x00|<[^>]*>?/', '', $string);
125
+ return str_replace(["'", '"'], ['&#39;', '&#34;'], $str);
126
+ }
127
+
128
  private function processData(array $data) {
129
  // check if sort order was specified or default to "asc"
130
  $sortOrder = (!empty($data['sort_order'])) ? $data['sort_order'] : 'asc';
133
 
134
  // sanitize sort by
135
  $sortBy = (!empty($data['sort_by']))
136
+ ? $this->filterString($data['sort_by'])
137
  : '';
138
 
139
  if (empty($sortBy)) {
lib/Mailer/Mailer.php CHANGED
@@ -6,6 +6,7 @@ if (!defined('ABSPATH')) exit;
6
 
7
 
8
  use MailPoet\DI\ContainerWrapper;
 
9
  use MailPoet\Mailer\Methods\AmazonSES;
10
  use MailPoet\Mailer\Methods\ErrorMappers\AmazonSESMapper;
11
  use MailPoet\Mailer\Methods\ErrorMappers\MailPoetMapper;
@@ -16,6 +17,7 @@ use MailPoet\Mailer\Methods\MailPoet;
16
  use MailPoet\Mailer\Methods\PHPMail;
17
  use MailPoet\Mailer\Methods\SendGrid;
18
  use MailPoet\Mailer\Methods\SMTP;
 
19
  use MailPoet\Services\AuthorizedEmailsController;
20
  use MailPoet\Settings\SettingsController;
21
  use MailPoet\WP\Functions as WPFunctions;
@@ -63,6 +65,11 @@ class Mailer {
63
  }
64
 
65
  public function send($newsletter, $subscriber, $extraParams = []) {
 
 
 
 
 
66
  if (!$this->mailerInstance) {
67
  $this->init();
68
  }
6
 
7
 
8
  use MailPoet\DI\ContainerWrapper;
9
+ use MailPoet\Entities\SubscriberEntity;
10
  use MailPoet\Mailer\Methods\AmazonSES;
11
  use MailPoet\Mailer\Methods\ErrorMappers\AmazonSESMapper;
12
  use MailPoet\Mailer\Methods\ErrorMappers\MailPoetMapper;
17
  use MailPoet\Mailer\Methods\PHPMail;
18
  use MailPoet\Mailer\Methods\SendGrid;
19
  use MailPoet\Mailer\Methods\SMTP;
20
+ use MailPoet\Models\Subscriber;
21
  use MailPoet\Services\AuthorizedEmailsController;
22
  use MailPoet\Settings\SettingsController;
23
  use MailPoet\WP\Functions as WPFunctions;
65
  }
66
 
67
  public function send($newsletter, $subscriber, $extraParams = []) {
68
+ // This if adds support for code that calls this method to use SubscriberEntity while the Mailer class is still using the old model.
69
+ // Once we add support for SubscriberEntity in the Mailer class, this if can be removed.
70
+ if ($subscriber instanceof SubscriberEntity) {
71
+ $subscriber = Subscriber::findOne($subscriber->getId());
72
+ }
73
  if (!$this->mailerInstance) {
74
  $this->init();
75
  }
lib/Mailer/MetaInfo.php CHANGED
@@ -30,8 +30,8 @@ class MetaInfo {
30
  );
31
  }
32
 
33
- public function getConfirmationMetaInfo(Subscriber $subscriber) {
34
- return $this->makeMetaInfo('confirmation', $subscriber->status, $subscriber->source);
35
  }
36
 
37
  public function getNewSubscriberNotificationMetaInfo() {
30
  );
31
  }
32
 
33
+ public function getConfirmationMetaInfo(SubscriberEntity $subscriber) {
34
+ return $this->makeMetaInfo('confirmation', $subscriber->getStatus(), $subscriber->getSource());
35
  }
36
 
37
  public function getNewSubscriberNotificationMetaInfo() {
lib/Newsletter/Editor/StructureTransformer.php CHANGED
@@ -6,8 +6,8 @@ if (!defined('ABSPATH')) exit;
6
 
7
 
8
  use MailPoet\Util\DOM as DOMUtil;
9
- use pQuery;
10
- use pQuery\DomNode;
11
 
12
  class StructureTransformer {
13
  public function transform($content, $imageFullWidth) {
6
 
7
 
8
  use MailPoet\Util\DOM as DOMUtil;
9
+ use MailPoet\Util\pQuery\DomNode;
10
+ use MailPoet\Util\pQuery\pQuery;
11
 
12
  class StructureTransformer {
13
  public function transform($content, $imageFullWidth) {
lib/Newsletter/Links/Links.php CHANGED
@@ -235,9 +235,9 @@ class Links {
235
  $subscriberId, $subscriberLinkToken, $queueId, $linkHash, $preview
236
  ) {
237
  return [
238
- $subscriberId,
239
  $subscriberLinkToken,
240
- $queueId,
241
  $linkHash,
242
  $preview,
243
  ];
235
  $subscriberId, $subscriberLinkToken, $queueId, $linkHash, $preview
236
  ) {
237
  return [
238
+ (string)$subscriberId,
239
  $subscriberLinkToken,
240
+ (string)$queueId,
241
  $linkHash,
242
  $preview,
243
  ];
lib/Newsletter/Renderer/Renderer.php CHANGED
@@ -6,15 +6,14 @@ if (!defined('ABSPATH')) exit;
6
 
7
 
8
  use MailPoet\Config\Env;
 
9
  use MailPoet\Entities\NewsletterEntity;
10
  use MailPoet\InvalidStateException;
11
  use MailPoet\Models\Newsletter;
12
  use MailPoet\Newsletter\NewslettersRepository;
13
  use MailPoet\Newsletter\Renderer\EscapeHelper as EHelper;
14
  use MailPoet\RuntimeException;
15
- use MailPoet\Services\Bridge;
16
  use MailPoet\Tasks\Sending as SendingTask;
17
- use MailPoet\Util\License\License;
18
  use MailPoet\Util\pQuery\DomNode;
19
  use MailPoet\WP\Functions as WPFunctions;
20
 
@@ -34,31 +33,26 @@ class Renderer {
34
  /** @var \MailPoetVendor\CSS */
35
  private $cSSInliner;
36
 
37
- /** @var Bridge */
38
- private $bridge;
39
-
40
- /** @var License */
41
- private $license;
42
-
43
  /** @var NewslettersRepository */
44
  private $newslettersRepository;
45
 
 
 
 
46
  public function __construct(
47
  Blocks\Renderer $blocksRenderer,
48
  Columns\Renderer $columnsRenderer,
49
  Preprocessor $preprocessor,
50
  \MailPoetVendor\CSS $cSSInliner,
51
- Bridge $bridge,
52
  NewslettersRepository $newslettersRepository,
53
- License $license
54
  ) {
55
  $this->blocksRenderer = $blocksRenderer;
56
  $this->columnsRenderer = $columnsRenderer;
57
  $this->preprocessor = $preprocessor;
58
  $this->cSSInliner = $cSSInliner;
59
- $this->bridge = $bridge;
60
- $this->license = $license;
61
  $this->newslettersRepository = $newslettersRepository;
 
62
  }
63
 
64
  /**
@@ -100,9 +94,7 @@ class Renderer {
100
  : [];
101
 
102
  if (
103
- !$this->license->hasLicense()
104
- && !$this->bridge->isMailpoetSendingServiceEnabled()
105
- && !$preview
106
  ) {
107
  $content = $this->addMailpoetLogoContentBlock($content, $styles);
108
  }
@@ -267,7 +259,7 @@ class Renderer {
267
  'link' => 'http://www.mailpoet.com',
268
  'src' => Env::$assetsUrl . '/img/mailpoet_logo_newsletter.png',
269
  'fullWidth' => false,
270
- 'alt' => 'MailPoet',
271
  'width' => '108px',
272
  'height' => '65px',
273
  'styles' => [
6
 
7
 
8
  use MailPoet\Config\Env;
9
+ use MailPoet\Config\ServicesChecker;
10
  use MailPoet\Entities\NewsletterEntity;
11
  use MailPoet\InvalidStateException;
12
  use MailPoet\Models\Newsletter;
13
  use MailPoet\Newsletter\NewslettersRepository;
14
  use MailPoet\Newsletter\Renderer\EscapeHelper as EHelper;
15
  use MailPoet\RuntimeException;
 
16
  use MailPoet\Tasks\Sending as SendingTask;
 
17
  use MailPoet\Util\pQuery\DomNode;
18
  use MailPoet\WP\Functions as WPFunctions;
19
 
33
  /** @var \MailPoetVendor\CSS */
34
  private $cSSInliner;
35
 
 
 
 
 
 
 
36
  /** @var NewslettersRepository */
37
  private $newslettersRepository;
38
 
39
+ /** @var ServicesChecker */
40
+ private $servicesChecker;
41
+
42
  public function __construct(
43
  Blocks\Renderer $blocksRenderer,
44
  Columns\Renderer $columnsRenderer,
45
  Preprocessor $preprocessor,
46
  \MailPoetVendor\CSS $cSSInliner,
 
47
  NewslettersRepository $newslettersRepository,
48
+ ServicesChecker $servicesChecker
49
  ) {
50
  $this->blocksRenderer = $blocksRenderer;
51
  $this->columnsRenderer = $columnsRenderer;
52
  $this->preprocessor = $preprocessor;
53
  $this->cSSInliner = $cSSInliner;
 
 
54
  $this->newslettersRepository = $newslettersRepository;
55
+ $this->servicesChecker = $servicesChecker;
56
  }
57
 
58
  /**
94
  : [];
95
 
96
  if (
97
+ !$this->servicesChecker->isUserActivelyPaying() && !$preview
 
 
98
  ) {
99
  $content = $this->addMailpoetLogoContentBlock($content, $styles);
100
  }
259
  'link' => 'http://www.mailpoet.com',
260
  'src' => Env::$assetsUrl . '/img/mailpoet_logo_newsletter.png',
261
  'fullWidth' => false,
262
+ 'alt' => 'Email Marketing Powered by MailPoet',
263
  'width' => '108px',
264
  'height' => '65px',
265
  'styles' => [
lib/Segments/DynamicSegments/FilterFactory.php CHANGED
@@ -127,7 +127,8 @@ class FilterFactory {
127
  }
128
 
129
  private function email($action) {
130
- if ($action === EmailOpensAbsoluteCountAction::TYPE) {
 
131
  return $this->emailOpensAbsoluteCount;
132
  }
133
  return $this->emailAction;
127
  }
128
 
129
  private function email($action) {
130
+ $countActions = [EmailOpensAbsoluteCountAction::TYPE, EmailOpensAbsoluteCountAction::MACHINE_TYPE];
131
+ if (in_array($action, $countActions)) {
132
  return $this->emailOpensAbsoluteCount;
133
  }
134
  return $this->emailAction;
lib/Segments/SegmentsSimpleListRepository.php CHANGED
@@ -117,6 +117,8 @@ class SegmentsSimpleListRepository {
117
 
118
  // Fetch subscribers counts for dynamic segments and correct data types
119
  foreach ($segments as $key => $segment) {
 
 
120
  if ($segment['type'] === SegmentEntity::TYPE_DYNAMIC) {
121
  $statisticsKey = $subscriberGlobalStatus ?: 'all';
122
  $segments[$key]['subscribers'] = (int)$this->subscribersCountsController->getSegmentStatisticsCountById($segment['id'])[$statisticsKey];
117
 
118
  // Fetch subscribers counts for dynamic segments and correct data types
119
  foreach ($segments as $key => $segment) {
120
+ // BC compatibility fix. PHP8.1+ returns integer but JS apps expect string
121
+ $segments[$key]['id'] = (string)$segment['id'];
122
  if ($segment['type'] === SegmentEntity::TYPE_DYNAMIC) {
123
  $statisticsKey = $subscriberGlobalStatus ?: 'all';
124
  $segments[$key]['subscribers'] = (int)$this->subscribersCountsController->getSegmentStatisticsCountById($segment['id'])[$statisticsKey];
lib/Segments/WP.php CHANGED
@@ -16,6 +16,7 @@ use MailPoet\Newsletter\Scheduler\WelcomeScheduler;
16
  use MailPoet\Settings\SettingsController;
17
  use MailPoet\Subscribers\ConfirmationEmailMailer;
18
  use MailPoet\Subscribers\Source;
 
19
  use MailPoet\WooCommerce\Helper as WooCommerceHelper;
20
  use MailPoet\WooCommerce\Subscription as WooCommerceSubscription;
21
  use MailPoet\WP\Functions as WPFunctions;
@@ -33,14 +34,19 @@ class WP {
33
  /** @var WooCommerceHelper */
34
  private $wooHelper;
35
 
 
 
 
36
  public function __construct(
37
  WPFunctions $wp,
38
  WelcomeScheduler $welcomeScheduler,
39
- WooCommerceHelper $wooHelper
 
40
  ) {
41
  $this->wp = $wp;
42
  $this->welcomeScheduler = $welcomeScheduler;
43
  $this->wooHelper = $wooHelper;
 
44
  }
45
 
46
  public function synchronizeUser($wpUserId, $oldWpUserData = false) {
@@ -146,7 +152,14 @@ class WP {
146
  if ($sendConfirmationEmail && ($subscriber->status === Subscriber::STATUS_UNCONFIRMED)) {
147
  /** @var ConfirmationEmailMailer $confirmationEmailMailer */
148
  $confirmationEmailMailer = ContainerWrapper::getInstance()->get(ConfirmationEmailMailer::class);
149
- $confirmationEmailMailer->sendConfirmationEmailOnce($subscriber);
 
 
 
 
 
 
 
150
  }
151
 
152
  // welcome email
16
  use MailPoet\Settings\SettingsController;
17
  use MailPoet\Subscribers\ConfirmationEmailMailer;
18
  use MailPoet\Subscribers\Source;
19
+ use MailPoet\Subscribers\SubscribersRepository;
20
  use MailPoet\WooCommerce\Helper as WooCommerceHelper;
21
  use MailPoet\WooCommerce\Subscription as WooCommerceSubscription;
22
  use MailPoet\WP\Functions as WPFunctions;
34
  /** @var WooCommerceHelper */
35
  private $wooHelper;
36
 
37
+ /** @var SubscribersRepository */
38
+ private $subscribersRepository;
39
+
40
  public function __construct(
41
  WPFunctions $wp,
42
  WelcomeScheduler $welcomeScheduler,
43
+ WooCommerceHelper $wooHelper,
44
+ SubscribersRepository $subscribersRepository
45
  ) {
46
  $this->wp = $wp;
47
  $this->welcomeScheduler = $welcomeScheduler;
48
  $this->wooHelper = $wooHelper;
49
+ $this->subscribersRepository = $subscribersRepository;
50
  }
51
 
52
  public function synchronizeUser($wpUserId, $oldWpUserData = false) {
152
  if ($sendConfirmationEmail && ($subscriber->status === Subscriber::STATUS_UNCONFIRMED)) {
153
  /** @var ConfirmationEmailMailer $confirmationEmailMailer */
154
  $confirmationEmailMailer = ContainerWrapper::getInstance()->get(ConfirmationEmailMailer::class);
155
+ $subscriberEntity = $this->subscribersRepository->findOneById($subscriber->id);
156
+ if ($subscriberEntity instanceof SubscriberEntity) {
157
+ try {
158
+ $confirmationEmailMailer->sendConfirmationEmailOnce($subscriberEntity);
159
+ } catch (\Exception $e) {
160
+ // ignore errors
161
+ }
162
+ }
163
  }
164
 
165
  // welcome email
lib/Subscribers/ConfirmationEmailMailer.php CHANGED
@@ -6,9 +6,10 @@ if (!defined('ABSPATH')) exit;
6
 
7
 
8
  use Html2Text\Html2Text;
 
 
9
  use MailPoet\Mailer\Mailer;
10
  use MailPoet\Mailer\MetaInfo;
11
- use MailPoet\Models\Subscriber;
12
  use MailPoet\Services\AuthorizedEmailsController;
13
  use MailPoet\Services\Bridge;
14
  use MailPoet\Settings\SettingsController;
@@ -60,20 +61,24 @@ class ConfirmationEmailMailer {
60
  * Use this method if you want to make sure the confirmation email
61
  * is not sent multiple times within a single request
62
  * e.g. if sending confirmation emails from hooks
 
63
  */
64
- public function sendConfirmationEmailOnce(Subscriber $subscriber): bool {
65
- if (isset($this->sentEmails[$subscriber->id])) {
66
  return true;
67
  }
68
  return $this->sendConfirmationEmail($subscriber);
69
  }
70
 
71
- public function sendConfirmationEmail(Subscriber $subscriber) {
 
 
 
72
  $signupConfirmation = $this->settings->get('signup_confirmation');
73
  if ((bool)$signupConfirmation['enabled'] === false) {
74
  return false;
75
  }
76
- if (!$this->wp->isUserLoggedIn() && $subscriber->countConfirmations >= self::MAX_CONFIRMATION_EMAILS) {
77
  return false;
78
  }
79
 
@@ -83,9 +88,9 @@ class ConfirmationEmailMailer {
83
  return false;
84
  }
85
 
86
- $segments = $subscriber->segments()->findMany();
87
- $segmentNames = array_map(function($segment) {
88
- return $segment->name;
89
  }, $segments);
90
 
91
  $body = nl2br($signupConfirmation['body']);
@@ -98,10 +103,9 @@ class ConfirmationEmailMailer {
98
  );
99
 
100
  // replace activation link
101
- $subscriberEntity = $this->subscribersRepository->findOneById($subscriber->id);
102
  $body = Helpers::replaceLinkTags(
103
  $body,
104
- $this->subscriptionUrlFactory->getConfirmationUrl($subscriberEntity),
105
  ['target' => '_blank'],
106
  'activation_link'
107
  );
@@ -122,25 +126,26 @@ class ConfirmationEmailMailer {
122
  ];
123
 
124
  // send email
 
 
 
125
  try {
126
- $extraParams = [
127
- 'meta' => $this->mailerMetaInfo->getConfirmationMetaInfo($subscriber),
128
- ];
129
  $result = $this->mailer->send($email, $subscriber, $extraParams);
130
- if ($result['response'] === false) {
131
- $subscriber->setError(__('Something went wrong with your subscription. Please contact the website owner.', 'mailpoet'));
132
- return false;
133
- };
134
-
135
- if (!$this->wp->isUserLoggedIn()) {
136
- $subscriber->countConfirmations++;
137
- $subscriber->save();
138
- }
139
- $this->sentEmails[$subscriber->id] = true;
140
- return true;
141
  } catch (\Exception $e) {
142
- $subscriber->setError(__('Something went wrong with your subscription. Please contact the website owner.', 'mailpoet'));
143
- return false;
144
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
145
  }
146
  }
6
 
7
 
8
  use Html2Text\Html2Text;
9
+ use MailPoet\Entities\SegmentEntity;
10
+ use MailPoet\Entities\SubscriberEntity;
11
  use MailPoet\Mailer\Mailer;
12
  use MailPoet\Mailer\MetaInfo;
 
13
  use MailPoet\Services\AuthorizedEmailsController;
14
  use MailPoet\Services\Bridge;
15
  use MailPoet\Settings\SettingsController;
61
  * Use this method if you want to make sure the confirmation email
62
  * is not sent multiple times within a single request
63
  * e.g. if sending confirmation emails from hooks
64
+ * @throws \Exception if unable to send the email.
65
  */
66
+ public function sendConfirmationEmailOnce(SubscriberEntity $subscriber): bool {
67
+ if (isset($this->sentEmails[$subscriber->getId()])) {
68
  return true;
69
  }
70
  return $this->sendConfirmationEmail($subscriber);
71
  }
72
 
73
+ /**
74
+ * @throws \Exception if unable to send the email.
75
+ */
76
+ public function sendConfirmationEmail(SubscriberEntity $subscriber) {
77
  $signupConfirmation = $this->settings->get('signup_confirmation');
78
  if ((bool)$signupConfirmation['enabled'] === false) {
79
  return false;
80
  }
81
+ if (!$this->wp->isUserLoggedIn() && $subscriber->getConfirmationsCount() >= self::MAX_CONFIRMATION_EMAILS) {
82
  return false;
83
  }
84
 
88
  return false;
89
  }
90
 
91
+ $segments = $subscriber->getSegments()->toArray();
92
+ $segmentNames = array_map(function(SegmentEntity $segment) {
93
+ return $segment->getName();
94
  }, $segments);
95
 
96
  $body = nl2br($signupConfirmation['body']);
103
  );
104
 
105
  // replace activation link
 
106
  $body = Helpers::replaceLinkTags(
107
  $body,
108
+ $this->subscriptionUrlFactory->getConfirmationUrl($subscriber),
109
  ['target' => '_blank'],
110
  'activation_link'
111
  );
126
  ];
127
 
128
  // send email
129
+ $extraParams = [
130
+ 'meta' => $this->mailerMetaInfo->getConfirmationMetaInfo($subscriber),
131
+ ];
132
  try {
 
 
 
133
  $result = $this->mailer->send($email, $subscriber, $extraParams);
 
 
 
 
 
 
 
 
 
 
 
134
  } catch (\Exception $e) {
135
+ throw new \Exception(__('Something went wrong with your subscription. Please contact the website owner.', 'mailpoet'));
 
136
  }
137
+
138
+ if ($result['response'] === false) {
139
+ throw new \Exception(__('Something went wrong with your subscription. Please contact the website owner.', 'mailpoet'));
140
+ };
141
+
142
+ if (!$this->wp->isUserLoggedIn()) {
143
+ $subscriber->setConfirmationsCount($subscriber->getConfirmationsCount() + 1);
144
+ $this->subscribersRepository->persist($subscriber);
145
+ $this->subscribersRepository->flush();
146
+ }
147
+ $this->sentEmails[$subscriber->getId()] = true;
148
+
149
+ return true;
150
  }
151
  }
lib/Subscribers/SubscriberActions.php CHANGED
@@ -107,11 +107,14 @@ class SubscriberActions {
107
  $segments = $this->segmentsRepository->findBy(['id' => $segmentIds]);
108
  $this->subscriberSegmentRepository->subscribeToSegments($subscriber, $segments);
109
 
110
- $subscriberModel = Subscriber::findOne($subscriber->getId());
111
- if ($subscriberModel) {
112
- $this->confirmationEmailMailer->sendConfirmationEmailOnce($subscriberModel);
 
113
  }
114
 
 
 
115
  // We want to send the notification on subscribe only when signupConfirmation is disabled
116
  if ($signupConfirmationEnabled === false && $subscriber->getStatus() === SubscriberEntity::STATUS_SUBSCRIBED && $subscriberModel) {
117
  $this->newSubscriberNotificationMailer->send($subscriberModel, Segment::whereIn('id', $segmentIds)->findMany());
107
  $segments = $this->segmentsRepository->findBy(['id' => $segmentIds]);
108
  $this->subscriberSegmentRepository->subscribeToSegments($subscriber, $segments);
109
 
110
+ try {
111
+ $this->confirmationEmailMailer->sendConfirmationEmailOnce($subscriber);
112
+ } catch (\Exception $e) {
113
+ // ignore errors
114
  }
115
 
116
+ $subscriberModel = Subscriber::findOne($subscriber->getId());
117
+
118
  // We want to send the notification on subscribe only when signupConfirmation is disabled
119
  if ($signupConfirmationEnabled === false && $subscriber->getStatus() === SubscriberEntity::STATUS_SUBSCRIBED && $subscriberModel) {
120
  $this->newSubscriberNotificationMailer->send($subscriberModel, Segment::whereIn('id', $segmentIds)->findMany());
lib/Util/DOM.php CHANGED
@@ -5,7 +5,7 @@ namespace MailPoet\Util;
5
  if (!defined('ABSPATH')) exit;
6
 
7
 
8
- use pQuery\DomNode;
9
 
10
  class DOM {
11
  /**
5
  if (!defined('ABSPATH')) exit;
6
 
7
 
8
+ use MailPoet\Util\pQuery\DomNode;
9
 
10
  class DOM {
11
  /**
lib/Util/License/Features/Subscribers.php CHANGED
@@ -15,6 +15,7 @@ class Subscribers {
15
  const NEW_LIMIT_DATE = '2019-11-00';
16
  const MSS_KEY_STATE = 'mta.mailpoet_api_key_state.state';
17
  const MSS_SUBSCRIBERS_LIMIT_SETTING_KEY = 'mta.mailpoet_api_key_state.data.site_active_subscriber_limit';
 
18
  const PREMIUM_KEY_STATE = 'premium.premium_key_state.state';
19
  const PREMIUM_SUBSCRIBERS_LIMIT_SETTING_KEY = 'premium.premium_key_state.data.site_active_subscriber_limit';
20
  const PREMIUM_SUPPORT_SETTING_KEY = 'premium.premium_key_state.data.support_tier';
@@ -77,6 +78,10 @@ class Subscribers {
77
  return (int)$this->settings->get(self::MSS_SUBSCRIBERS_LIMIT_SETTING_KEY);
78
  }
79
 
 
 
 
 
80
  private function hasValidPremiumKey() {
81
  $state = $this->settings->get(self::PREMIUM_KEY_STATE);
82
  return $state === Bridge::KEY_VALID || $state === Bridge::KEY_EXPIRING;
15
  const NEW_LIMIT_DATE = '2019-11-00';
16
  const MSS_KEY_STATE = 'mta.mailpoet_api_key_state.state';
17
  const MSS_SUBSCRIBERS_LIMIT_SETTING_KEY = 'mta.mailpoet_api_key_state.data.site_active_subscriber_limit';
18
+ const MSS_SUPPORT_SETTING_KEY = 'mta.mailpoet_api_key_state.data.support_tier';
19
  const PREMIUM_KEY_STATE = 'premium.premium_key_state.state';
20
  const PREMIUM_SUBSCRIBERS_LIMIT_SETTING_KEY = 'premium.premium_key_state.data.site_active_subscriber_limit';
21
  const PREMIUM_SUPPORT_SETTING_KEY = 'premium.premium_key_state.data.support_tier';
78
  return (int)$this->settings->get(self::MSS_SUBSCRIBERS_LIMIT_SETTING_KEY);
79
  }
80
 
81
+ public function hasMssPremiumSupport() {
82
+ return $this->hasValidMssKey() && $this->settings->get(self::MSS_SUPPORT_SETTING_KEY) === 'premium';
83
+ }
84
+
85
  private function hasValidPremiumKey() {
86
  $state = $this->settings->get(self::PREMIUM_KEY_STATE);
87
  return $state === Bridge::KEY_VALID || $state === Bridge::KEY_EXPIRING;
lib/Util/pQuery/DomNode.php CHANGED
@@ -5,8 +5,11 @@ namespace MailPoet\Util\pQuery;
5
  if (!defined('ABSPATH')) exit;
6
 
7
 
8
- class DomNode extends \pQuery\DomNode {
9
- public $childClass = 'MailPoet\Util\pQuery\DomNode';
 
 
 
10
 
11
  public function getInnerText() {
12
  return html_entity_decode($this->toString(true, true, 1), ENT_NOQUOTES, 'UTF-8');
@@ -15,4 +18,10 @@ class DomNode extends \pQuery\DomNode {
15
  public function getOuterText() {
16
  return html_entity_decode($this->toString(), ENT_NOQUOTES, 'UTF-8');
17
  }
 
 
 
 
 
 
18
  }
5
  if (!defined('ABSPATH')) exit;
6
 
7
 
8
+ use MailPoetVendor\pQuery\DomNode as pQueryDomNode;
9
+
10
+ class DomNode extends pQueryDomNode {
11
+ public $childClass = DomNode::class;
12
+ public $parserClass = Html5Parser::class;
13
 
14
  public function getInnerText() {
15
  return html_entity_decode($this->toString(true, true, 1), ENT_NOQUOTES, 'UTF-8');
18
  public function getOuterText() {
19
  return html_entity_decode($this->toString(), ENT_NOQUOTES, 'UTF-8');
20
  }
21
+
22
+ public function query($query = '*') {
23
+ $select = $this->select($query);
24
+ $result = new pQuery((array)$select);
25
+ return $result;
26
+ }
27
  }
lib/Util/pQuery/Html5Parser.php CHANGED
@@ -5,7 +5,9 @@ namespace MailPoet\Util\pQuery;
5
  if (!defined('ABSPATH')) exit;
6
 
7
 
8
- class Html5Parser extends \pQuery\HtmlParser {
9
- /** @var string|\pQuery\DomNode */
10
- public $root = 'MailPoet\Util\pQuery\DomNode';
 
 
11
  }
5
  if (!defined('ABSPATH')) exit;
6
 
7
 
8
+ use MailPoetVendor\pQuery\HtmlParser;
9
+
10
+ class Html5Parser extends HtmlParser {
11
+ /** @var string|DomNode */
12
+ public $root = DomNode::class;
13
  }
lib/Util/pQuery/pQuery.php CHANGED
@@ -5,13 +5,15 @@ namespace MailPoet\Util\pQuery;
5
  if (!defined('ABSPATH')) exit;
6
 
7
 
 
 
8
  // extend pQuery class to use UTF-8 encoding when getting elements' inner/outer text
9
  // phpcs:ignore Squiz.Classes.ValidClassName
10
- class pQuery extends \pQuery {
11
- public static function parseStr($html) {
12
  $parser = new Html5Parser($html);
13
 
14
- if (!$parser->root instanceof \pQuery\DomNode) {
15
  // this condition shouldn't happen it is here only for PHPStan
16
  throw new \Exception('Renderer is not configured correctly');
17
  }
5
  if (!defined('ABSPATH')) exit;
6
 
7
 
8
+ use MailPoetVendor\pQuery\pQuery as pQuerypQuery;
9
+
10
  // extend pQuery class to use UTF-8 encoding when getting elements' inner/outer text
11
  // phpcs:ignore Squiz.Classes.ValidClassName
12
+ class pQuery extends pQuerypQuery {
13
+ public static function parseStr($html): DomNode {
14
  $parser = new Html5Parser($html);
15
 
16
+ if (!$parser->root instanceof DomNode) {
17
  // this condition shouldn't happen it is here only for PHPStan
18
  throw new \Exception('Renderer is not configured correctly');
19
  }
lib/WooCommerce/Subscription.php CHANGED
@@ -218,10 +218,22 @@ class Subscription {
218
  }
219
 
220
  private function requireSubscriptionConfirmation(Subscriber $subscriber) {
221
- $subscriber->status = Subscriber::STATUS_UNCONFIRMED;
 
222
  $subscriber->save();
 
223
 
224
- $this->confirmationEmailMailer->sendConfirmationEmailOnce($subscriber);
 
 
 
 
 
 
 
 
 
 
225
  }
226
 
227
  private function updateSubscriberStatus(Subscriber $subscriber) {
218
  }
219
 
220
  private function requireSubscriptionConfirmation(Subscriber $subscriber) {
221
+ // we need to save the subscriber here since handleSubscriberOptin() sets the source but doesn't save the model.
222
+ // when we migrate this class to use Doctrine we can probably remove this call to save() as the call to persist() below should be enough.
223
  $subscriber->save();
224
+ $subscriberEntity = $this->subscribersRepository->findOneById($subscriber->id);
225
 
226
+ if ($subscriberEntity instanceof SubscriberEntity) {
227
+ $subscriberEntity->setStatus(Subscriber::STATUS_UNCONFIRMED);
228
+ $this->subscribersRepository->persist($subscriberEntity);
229
+ $this->subscribersRepository->flush();
230
+
231
+ try {
232
+ $this->confirmationEmailMailer->sendConfirmationEmailOnce($subscriberEntity);
233
+ } catch (\Exception $e) {
234
+ // ignore errors
235
+ }
236
+ }
237
  }
238
 
239
  private function updateSubscriberStatus(Subscriber $subscriber) {
mailpoet.php CHANGED
@@ -5,7 +5,7 @@ if (!defined('ABSPATH')) exit;
5
 
6
  /*
7
  * Plugin Name: MailPoet 3 (New)
8
- * Version: 3.74.3
9
  * Plugin URI: http://www.mailpoet.com
10
  * Description: Create and send newsletters, post notifications and welcome emails from your WordPress.
11
  * Author: MailPoet
@@ -18,7 +18,7 @@ if (!defined('ABSPATH')) exit;
18
  */
19
 
20
  $mailpoetPlugin = [
21
- 'version' => '3.74.3',
22
  'filename' => __FILE__,
23
  'path' => dirname(__FILE__),
24
  'autoloader' => dirname(__FILE__) . '/vendor/autoload.php',
5
 
6
  /*
7
  * Plugin Name: MailPoet 3 (New)
8
+ * Version: 3.75.0
9
  * Plugin URI: http://www.mailpoet.com
10
  * Description: Create and send newsletters, post notifications and welcome emails from your WordPress.
11
  * Author: MailPoet
18
  */
19
 
20
  $mailpoetPlugin = [
21
+ 'version' => '3.75.0',
22
  'filename' => __FILE__,
23
  'path' => dirname(__FILE__),
24
  'autoloader' => dirname(__FILE__) . '/vendor/autoload.php',
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: mailpoet
3
  Tags: email, email marketing, post notification, woocommerce emails, email automation, newsletter, newsletter builder, newsletter subscribers
4
  Requires at least: 5.3
5
  Tested up to: 5.8
6
- Stable tag: 3.74.3
7
  Requires PHP: 7.1
8
  License: GPLv3
9
  License URI: https://www.gnu.org/licenses/gpl-3.0.html
@@ -45,7 +45,7 @@ Trusted by 300,000 WordPress websites since 2011.
45
 
46
  = See it in action =
47
 
48
- [Test the demo](http://demo.mailpoet.com/) or [see the 2 min. video](https://vimeo.com/223581490)
49
  [vimeo https://vimeo.com/223581490]
50
 
51
  = Before you install =
@@ -184,6 +184,10 @@ Check our [Knowledge Base](https://kb.mailpoet.com) or contact us through our [s
184
 
185
  == Changelog ==
186
 
 
 
 
 
187
  = 3.74.3 - 2021-12-07 =
188
  * Added: new segment "subscribed to list";
189
  * Improved: more options for "purchased product" segment;
3
  Tags: email, email marketing, post notification, woocommerce emails, email automation, newsletter, newsletter builder, newsletter subscribers
4
  Requires at least: 5.3
5
  Tested up to: 5.8
6
+ Stable tag: 3.75.0
7
  Requires PHP: 7.1
8
  License: GPLv3
9
  License URI: https://www.gnu.org/licenses/gpl-3.0.html
45
 
46
  = See it in action =
47
 
48
+ [See the 2 min. video](https://vimeo.com/223581490)
49
  [vimeo https://vimeo.com/223581490]
50
 
51
  = Before you install =
184
 
185
  == Changelog ==
186
 
187
+ = 3.75.0 - 2021-12-13 =
188
+ * Changed: show MailPoet logo in emails when using free MailPoet plan;
189
+ * Fixed: "# of machine opens" segment not working properly.
190
+
191
  = 3.74.3 - 2021-12-07 =
192
  * Added: new segment "subscribed to list";
193
  * Improved: more options for "purchased product" segment;
vendor-prefixed/autoload.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- namespace MailPoetVendor; if (!defined('ABSPATH')) exit; require_once __DIR__ . '/composer/autoload_real.php'; return ComposerAutoloaderInit4ebd855d3cf5bdc4c422f5c8d0a90eea::getLoader();
1
  <?php
2
+ namespace MailPoetVendor; if (!defined('ABSPATH')) exit; require_once __DIR__ . '/composer/autoload_real.php'; return ComposerAutoloaderInitd73dbd291a4e4d7bd5e8ca45bceaa799::getLoader();
vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Connection.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- namespace MailPoetVendor\Doctrine\DBAL; if (!defined('ABSPATH')) exit; use Closure; use MailPoetVendor\Doctrine\Common\EventManager; use MailPoetVendor\Doctrine\DBAL\Cache\ArrayStatement; use MailPoetVendor\Doctrine\DBAL\Cache\CacheException; use MailPoetVendor\Doctrine\DBAL\Cache\QueryCacheProfile; use MailPoetVendor\Doctrine\DBAL\Cache\ResultCacheStatement; use MailPoetVendor\Doctrine\DBAL\Driver\Connection as DriverConnection; use MailPoetVendor\Doctrine\DBAL\Driver\PDO\Statement as PDODriverStatement; use MailPoetVendor\Doctrine\DBAL\Driver\PingableConnection; use MailPoetVendor\Doctrine\DBAL\Driver\ResultStatement; use MailPoetVendor\Doctrine\DBAL\Driver\ServerInfoAwareConnection; use MailPoetVendor\Doctrine\DBAL\Exception\ConnectionLost; use MailPoetVendor\Doctrine\DBAL\Exception\InvalidArgumentException; use MailPoetVendor\Doctrine\DBAL\Exception\NoKeyValue; use MailPoetVendor\Doctrine\DBAL\Platforms\AbstractPlatform; use MailPoetVendor\Doctrine\DBAL\Query\Expression\ExpressionBuilder; use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder; use MailPoetVendor\Doctrine\DBAL\Schema\AbstractSchemaManager; use MailPoetVendor\Doctrine\DBAL\Types\Type; use MailPoetVendor\Doctrine\Deprecations\Deprecation; use PDO; use Throwable; use Traversable; use function array_key_exists; use function array_shift; use function assert; use function func_get_args; use function implode; use function is_int; use function is_string; use function key; class Connection implements DriverConnection { public const TRANSACTION_READ_UNCOMMITTED = TransactionIsolationLevel::READ_UNCOMMITTED; public const TRANSACTION_READ_COMMITTED = TransactionIsolationLevel::READ_COMMITTED; public const TRANSACTION_REPEATABLE_READ = TransactionIsolationLevel::REPEATABLE_READ; public const TRANSACTION_SERIALIZABLE = TransactionIsolationLevel::SERIALIZABLE; public const PARAM_INT_ARRAY = ParameterType::INTEGER + self::ARRAY_PARAM_OFFSET; public const PARAM_STR_ARRAY = ParameterType::STRING + self::ARRAY_PARAM_OFFSET; public const ARRAY_PARAM_OFFSET = 100; protected $_conn; protected $_config; protected $_eventManager; protected $_expr; private $autoCommit = \true; private $transactionNestingLevel = 0; private $transactionIsolationLevel; private $nestTransactionsWithSavepoints = \false; private $params; private $platform; protected $_schemaManager; protected $_driver; private $isRollbackOnly = \false; protected $defaultFetchMode = FetchMode::ASSOCIATIVE; public function __construct(array $params, Driver $driver, ?Configuration $config = null, ?EventManager $eventManager = null) { $this->_driver = $driver; $this->params = $params; if (isset($params['pdo'])) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/3554', 'Passing a user provided PDO instance directly to Doctrine is deprecated.'); if (!$params['pdo'] instanceof PDO) { throw Exception::invalidPdoInstance(); } $this->_conn = $params['pdo']; $this->_conn->setAttribute(PDO::ATTR_STATEMENT_CLASS, [PDODriverStatement::class, []]); unset($this->params['pdo']); } if (isset($params['platform'])) { if (!$params['platform'] instanceof Platforms\AbstractPlatform) { throw Exception::invalidPlatformType($params['platform']); } $this->platform = $params['platform']; } if (!$config) { $config = new Configuration(); } if (!$eventManager) { $eventManager = new EventManager(); } $this->_config = $config; $this->_eventManager = $eventManager; $this->_expr = new Query\Expression\ExpressionBuilder($this); $this->autoCommit = $config->getAutoCommit(); } public function getParams() { return $this->params; } public function getDatabase() { return $this->_driver->getDatabase($this); } public function getHost() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/issues/3580', 'Connection::getHost() is deprecated, get the database server host from application config ' . 'or as a last resort from internal Connection::getParams() API.'); return $this->params['host'] ?? null; } public function getPort() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/issues/3580', 'Connection::getPort() is deprecated, get the database server port from application config ' . 'or as a last resort from internal Connection::getParams() API.'); return $this->params['port'] ?? null; } public function getUsername() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/issues/3580', 'Connection::getUsername() is deprecated, get the username from application config ' . 'or as a last resort from internal Connection::getParams() API.'); return $this->params['user'] ?? null; } public function getPassword() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/issues/3580', 'Connection::getPassword() is deprecated, get the password from application config ' . 'or as a last resort from internal Connection::getParams() API.'); return $this->params['password'] ?? null; } public function getDriver() { return $this->_driver; } public function getConfiguration() { return $this->_config; } public function getEventManager() { return $this->_eventManager; } public function getDatabasePlatform() { if ($this->platform === null) { $this->platform = $this->detectDatabasePlatform(); $this->platform->setEventManager($this->_eventManager); } return $this->platform; } public function getExpressionBuilder() { return $this->_expr; } public function connect() { if ($this->_conn !== null) { return \false; } $driverOptions = $this->params['driverOptions'] ?? []; $user = $this->params['user'] ?? null; $password = $this->params['password'] ?? null; $this->_conn = $this->_driver->connect($this->params, $user, $password, $driverOptions); $this->transactionNestingLevel = 0; if ($this->autoCommit === \false) { $this->beginTransaction(); } if ($this->_eventManager->hasListeners(Events::postConnect)) { $eventArgs = new Event\ConnectionEventArgs($this); $this->_eventManager->dispatchEvent(Events::postConnect, $eventArgs); } return \true; } private function detectDatabasePlatform() : AbstractPlatform { $version = $this->getDatabasePlatformVersion(); if ($version !== null) { assert($this->_driver instanceof VersionAwarePlatformDriver); return $this->_driver->createDatabasePlatformForVersion($version); } return $this->_driver->getDatabasePlatform(); } private function getDatabasePlatformVersion() { if (!$this->_driver instanceof VersionAwarePlatformDriver) { return null; } if (isset($this->params['serverVersion'])) { return $this->params['serverVersion']; } if ($this->_conn === null) { try { $this->connect(); } catch (Throwable $originalException) { if (empty($this->params['dbname'])) { throw $originalException; } $params = $this->params; unset($this->params['dbname']); try { $this->connect(); } catch (Throwable $fallbackException) { throw $originalException; } finally { $this->params = $params; } $serverVersion = $this->getServerVersion(); $this->close(); return $serverVersion; } } return $this->getServerVersion(); } private function getServerVersion() { $connection = $this->getWrappedConnection(); if ($connection instanceof ServerInfoAwareConnection && !$connection->requiresQueryForServerVersion()) { return $connection->getServerVersion(); } return null; } public function isAutoCommit() { return $this->autoCommit === \true; } public function setAutoCommit($autoCommit) { $autoCommit = (bool) $autoCommit; if ($autoCommit === $this->autoCommit) { return; } $this->autoCommit = $autoCommit; if ($this->_conn === null || $this->transactionNestingLevel === 0) { return; } $this->commitAll(); } public function setFetchMode($fetchMode) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4019', 'Default Fetch Mode configuration is deprecated, use explicit Connection::fetch*() APIs instead.'); $this->defaultFetchMode = $fetchMode; } public function fetchAssoc($sql, array $params = [], array $types = []) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4019', 'Connection::fetchAssoc() is deprecated, use Connection::fetchAssociative() API instead.'); return $this->executeQuery($sql, $params, $types)->fetch(FetchMode::ASSOCIATIVE); } public function fetchArray($sql, array $params = [], array $types = []) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4019', 'Connection::fetchArray() is deprecated, use Connection::fetchNumeric() API instead.'); return $this->executeQuery($sql, $params, $types)->fetch(FetchMode::NUMERIC); } public function fetchColumn($sql, array $params = [], $column = 0, array $types = []) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4019', 'Connection::fetchColumn() is deprecated, use Connection::fetchOne() API instead.'); return $this->executeQuery($sql, $params, $types)->fetchColumn($column); } public function fetchAssociative(string $query, array $params = [], array $types = []) { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); return $stmt->fetchAssociative(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function fetchNumeric(string $query, array $params = [], array $types = []) { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); return $stmt->fetchNumeric(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function fetchOne(string $query, array $params = [], array $types = []) { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); return $stmt->fetchOne(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function isConnected() { return $this->_conn !== null; } public function isTransactionActive() { return $this->transactionNestingLevel > 0; } private function addCriteriaCondition(array $criteria, array &$columns, array &$values, array &$conditions) : void { $platform = $this->getDatabasePlatform(); foreach ($criteria as $columnName => $value) { if ($value === null) { $conditions[] = $platform->getIsNullExpression($columnName); continue; } $columns[] = $columnName; $values[] = $value; $conditions[] = $columnName . ' = ?'; } } public function delete($table, array $criteria, array $types = []) { if (empty($criteria)) { throw InvalidArgumentException::fromEmptyCriteria(); } $columns = $values = $conditions = []; $this->addCriteriaCondition($criteria, $columns, $values, $conditions); return $this->executeStatement('DELETE FROM ' . $table . ' WHERE ' . implode(' AND ', $conditions), $values, is_string(key($types)) ? $this->extractTypeValues($columns, $types) : $types); } public function close() { $this->_conn = null; } public function setTransactionIsolation($level) { $this->transactionIsolationLevel = $level; return $this->executeStatement($this->getDatabasePlatform()->getSetTransactionIsolationSQL($level)); } public function getTransactionIsolation() { if ($this->transactionIsolationLevel === null) { $this->transactionIsolationLevel = $this->getDatabasePlatform()->getDefaultTransactionIsolationLevel(); } return $this->transactionIsolationLevel; } public function update($table, array $data, array $criteria, array $types = []) { $columns = $values = $conditions = $set = []; foreach ($data as $columnName => $value) { $columns[] = $columnName; $values[] = $value; $set[] = $columnName . ' = ?'; } $this->addCriteriaCondition($criteria, $columns, $values, $conditions); if (is_string(key($types))) { $types = $this->extractTypeValues($columns, $types); } $sql = 'UPDATE ' . $table . ' SET ' . implode(', ', $set) . ' WHERE ' . implode(' AND ', $conditions); return $this->executeStatement($sql, $values, $types); } public function insert($table, array $data, array $types = []) { if (empty($data)) { return $this->executeStatement('INSERT INTO ' . $table . ' () VALUES ()'); } $columns = []; $values = []; $set = []; foreach ($data as $columnName => $value) { $columns[] = $columnName; $values[] = $value; $set[] = '?'; } return $this->executeStatement('INSERT INTO ' . $table . ' (' . implode(', ', $columns) . ')' . ' VALUES (' . implode(', ', $set) . ')', $values, is_string(key($types)) ? $this->extractTypeValues($columns, $types) : $types); } private function extractTypeValues(array $columnList, array $types) { $typeValues = []; foreach ($columnList as $columnIndex => $columnName) { $typeValues[] = $types[$columnName] ?? ParameterType::STRING; } return $typeValues; } public function quoteIdentifier($str) { return $this->getDatabasePlatform()->quoteIdentifier($str); } public function quote($value, $type = ParameterType::STRING) { $connection = $this->getWrappedConnection(); [$value, $bindingType] = $this->getBindingInfo($value, $type); return $connection->quote($value, $bindingType); } public function fetchAll($sql, array $params = [], $types = []) { return $this->executeQuery($sql, $params, $types)->fetchAll(); } public function fetchAllNumeric(string $query, array $params = [], array $types = []) : array { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); return $stmt->fetchAllNumeric(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function fetchAllAssociative(string $query, array $params = [], array $types = []) : array { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); return $stmt->fetchAllAssociative(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function fetchAllKeyValue(string $query, array $params = [], array $types = []) : array { $stmt = $this->executeQuery($query, $params, $types); $this->ensureHasKeyValue($stmt); $data = []; foreach ($stmt->fetchAll(FetchMode::NUMERIC) as [$key, $value]) { $data[$key] = $value; } return $data; } public function fetchAllAssociativeIndexed(string $query, array $params = [], array $types = []) : array { $stmt = $this->executeQuery($query, $params, $types); $data = []; foreach ($stmt->fetchAll(FetchMode::ASSOCIATIVE) as $row) { $data[array_shift($row)] = $row; } return $data; } public function fetchFirstColumn(string $query, array $params = [], array $types = []) : array { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); return $stmt->fetchFirstColumn(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function iterateNumeric(string $query, array $params = [], array $types = []) : Traversable { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); yield from $stmt->iterateNumeric(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function iterateAssociative(string $query, array $params = [], array $types = []) : Traversable { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); yield from $stmt->iterateAssociative(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function iterateKeyValue(string $query, array $params = [], array $types = []) : Traversable { $stmt = $this->executeQuery($query, $params, $types); $this->ensureHasKeyValue($stmt); while (($row = $stmt->fetch(FetchMode::NUMERIC)) !== \false) { (yield $row[0] => $row[1]); } } public function iterateAssociativeIndexed(string $query, array $params = [], array $types = []) : Traversable { $stmt = $this->executeQuery($query, $params, $types); while (($row = $stmt->fetch(FetchMode::ASSOCIATIVE)) !== \false) { (yield array_shift($row) => $row); } } public function iterateColumn(string $query, array $params = [], array $types = []) : Traversable { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); yield from $stmt->iterateColumn(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function prepare($sql) { try { $stmt = new Statement($sql, $this); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $sql); } $stmt->setFetchMode($this->defaultFetchMode); return $stmt; } public function executeQuery($sql, array $params = [], $types = [], ?QueryCacheProfile $qcp = null) { if ($qcp !== null) { return $this->executeCacheQuery($sql, $params, $types, $qcp); } $connection = $this->getWrappedConnection(); $logger = $this->_config->getSQLLogger(); if ($logger) { $logger->startQuery($sql, $params, $types); } try { if ($params) { [$sql, $params, $types] = SQLParserUtils::expandListParameters($sql, $params, $types); $stmt = $connection->prepare($sql); if ($types) { $this->_bindTypedValues($stmt, $params, $types); $stmt->execute(); } else { $stmt->execute($params); } } else { $stmt = $connection->query($sql); } } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $sql, $params, $types); } $stmt->setFetchMode($this->defaultFetchMode); if ($logger) { $logger->stopQuery(); } return $this->ensureForwardCompatibilityStatement($stmt); } public function executeCacheQuery($sql, $params, $types, QueryCacheProfile $qcp) { $resultCache = $qcp->getResultCacheDriver() ?? $this->_config->getResultCacheImpl(); if ($resultCache === null) { throw CacheException::noResultDriverConfigured(); } $connectionParams = $this->params; unset($connectionParams['platform']); [$cacheKey, $realKey] = $qcp->generateCacheKeys($sql, $params, $types, $connectionParams); $data = $resultCache->fetch($cacheKey); if ($data !== \false) { if (isset($data[$realKey])) { $stmt = new ArrayStatement($data[$realKey]); } elseif (array_key_exists($realKey, $data)) { $stmt = new ArrayStatement([]); } } if (!isset($stmt)) { $stmt = new ResultCacheStatement($this->executeQuery($sql, $params, $types), $resultCache, $cacheKey, $realKey, $qcp->getLifetime()); } $stmt->setFetchMode($this->defaultFetchMode); return $this->ensureForwardCompatibilityStatement($stmt); } private function ensureForwardCompatibilityStatement(ResultStatement $stmt) { return ForwardCompatibility\Result::ensure($stmt); } public function project($sql, array $params, Closure $function) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/3823', 'Connection::project() is deprecated without replacement, implement data projections in your own code.'); $result = []; $stmt = $this->executeQuery($sql, $params); while ($row = $stmt->fetch()) { $result[] = $function($row); } $stmt->closeCursor(); return $result; } public function query() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4163', 'Connection::query() is deprecated, use Connection::executeQuery() instead.'); $connection = $this->getWrappedConnection(); $args = func_get_args(); $logger = $this->_config->getSQLLogger(); if ($logger) { $logger->startQuery($args[0]); } try { $statement = $connection->query(...$args); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $args[0]); } $statement->setFetchMode($this->defaultFetchMode); if ($logger) { $logger->stopQuery(); } return $statement; } public function executeUpdate($sql, array $params = [], array $types = []) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4163', 'Connection::executeUpdate() is deprecated, use Connection::executeStatement() instead.'); return $this->executeStatement($sql, $params, $types); } public function executeStatement($sql, array $params = [], array $types = []) { $connection = $this->getWrappedConnection(); $logger = $this->_config->getSQLLogger(); if ($logger) { $logger->startQuery($sql, $params, $types); } try { if ($params) { [$sql, $params, $types] = SQLParserUtils::expandListParameters($sql, $params, $types); $stmt = $connection->prepare($sql); if ($types) { $this->_bindTypedValues($stmt, $params, $types); $stmt->execute(); } else { $stmt->execute($params); } $result = $stmt->rowCount(); } else { $result = $connection->exec($sql); } } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $sql, $params, $types); } if ($logger) { $logger->stopQuery(); } return $result; } public function exec($sql) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4163', 'Connection::exec() is deprecated, use Connection::executeStatement() instead.'); $connection = $this->getWrappedConnection(); $logger = $this->_config->getSQLLogger(); if ($logger) { $logger->startQuery($sql); } try { $result = $connection->exec($sql); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $sql); } if ($logger) { $logger->stopQuery(); } return $result; } public function getTransactionNestingLevel() { return $this->transactionNestingLevel; } public function errorCode() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/3507', 'Connection::errorCode() is deprecated, use getCode() or getSQLState() on Exception instead.'); return $this->getWrappedConnection()->errorCode(); } public function errorInfo() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/3507', 'Connection::errorInfo() is deprecated, use getCode() or getSQLState() on Exception instead.'); return $this->getWrappedConnection()->errorInfo(); } public function lastInsertId($name = null) { return $this->getWrappedConnection()->lastInsertId($name); } public function transactional(Closure $func) { $this->beginTransaction(); try { $res = $func($this); $this->commit(); return $res; } catch (Throwable $e) { $this->rollBack(); throw $e; } } public function setNestTransactionsWithSavepoints($nestTransactionsWithSavepoints) { if ($this->transactionNestingLevel > 0) { throw ConnectionException::mayNotAlterNestedTransactionWithSavepointsInTransaction(); } if (!$this->getDatabasePlatform()->supportsSavepoints()) { throw ConnectionException::savepointsNotSupported(); } $this->nestTransactionsWithSavepoints = (bool) $nestTransactionsWithSavepoints; } public function getNestTransactionsWithSavepoints() { return $this->nestTransactionsWithSavepoints; } protected function _getNestedTransactionSavePointName() { return 'DOCTRINE2_SAVEPOINT_' . $this->transactionNestingLevel; } public function beginTransaction() { $connection = $this->getWrappedConnection(); ++$this->transactionNestingLevel; $logger = $this->_config->getSQLLogger(); if ($this->transactionNestingLevel === 1) { if ($logger) { $logger->startQuery('"START TRANSACTION"'); } $connection->beginTransaction(); if ($logger) { $logger->stopQuery(); } } elseif ($this->nestTransactionsWithSavepoints) { if ($logger) { $logger->startQuery('"SAVEPOINT"'); } $this->createSavepoint($this->_getNestedTransactionSavePointName()); if ($logger) { $logger->stopQuery(); } } return \true; } public function commit() { if ($this->transactionNestingLevel === 0) { throw ConnectionException::noActiveTransaction(); } if ($this->isRollbackOnly) { throw ConnectionException::commitFailedRollbackOnly(); } $result = \true; $connection = $this->getWrappedConnection(); $logger = $this->_config->getSQLLogger(); if ($this->transactionNestingLevel === 1) { if ($logger) { $logger->startQuery('"COMMIT"'); } $result = $connection->commit(); if ($logger) { $logger->stopQuery(); } } elseif ($this->nestTransactionsWithSavepoints) { if ($logger) { $logger->startQuery('"RELEASE SAVEPOINT"'); } $this->releaseSavepoint($this->_getNestedTransactionSavePointName()); if ($logger) { $logger->stopQuery(); } } --$this->transactionNestingLevel; if ($this->autoCommit !== \false || $this->transactionNestingLevel !== 0) { return $result; } $this->beginTransaction(); return $result; } private function commitAll() : void { while ($this->transactionNestingLevel !== 0) { if ($this->autoCommit === \false && $this->transactionNestingLevel === 1) { $this->commit(); return; } $this->commit(); } } public function rollBack() { if ($this->transactionNestingLevel === 0) { throw ConnectionException::noActiveTransaction(); } $connection = $this->getWrappedConnection(); $logger = $this->_config->getSQLLogger(); if ($this->transactionNestingLevel === 1) { if ($logger) { $logger->startQuery('"ROLLBACK"'); } $this->transactionNestingLevel = 0; $connection->rollBack(); $this->isRollbackOnly = \false; if ($logger) { $logger->stopQuery(); } if ($this->autoCommit === \false) { $this->beginTransaction(); } } elseif ($this->nestTransactionsWithSavepoints) { if ($logger) { $logger->startQuery('"ROLLBACK TO SAVEPOINT"'); } $this->rollbackSavepoint($this->_getNestedTransactionSavePointName()); --$this->transactionNestingLevel; if ($logger) { $logger->stopQuery(); } } else { $this->isRollbackOnly = \true; --$this->transactionNestingLevel; } return \true; } public function createSavepoint($savepoint) { $platform = $this->getDatabasePlatform(); if (!$platform->supportsSavepoints()) { throw ConnectionException::savepointsNotSupported(); } $this->getWrappedConnection()->exec($platform->createSavePoint($savepoint)); } public function releaseSavepoint($savepoint) { $platform = $this->getDatabasePlatform(); if (!$platform->supportsSavepoints()) { throw ConnectionException::savepointsNotSupported(); } if (!$platform->supportsReleaseSavepoints()) { return; } $this->getWrappedConnection()->exec($platform->releaseSavePoint($savepoint)); } public function rollbackSavepoint($savepoint) { $platform = $this->getDatabasePlatform(); if (!$platform->supportsSavepoints()) { throw ConnectionException::savepointsNotSupported(); } $this->getWrappedConnection()->exec($platform->rollbackSavePoint($savepoint)); } public function getWrappedConnection() { $this->connect(); assert($this->_conn !== null); return $this->_conn; } public function getSchemaManager() { if ($this->_schemaManager === null) { $this->_schemaManager = $this->_driver->getSchemaManager($this); } return $this->_schemaManager; } public function setRollbackOnly() { if ($this->transactionNestingLevel === 0) { throw ConnectionException::noActiveTransaction(); } $this->isRollbackOnly = \true; } public function isRollbackOnly() { if ($this->transactionNestingLevel === 0) { throw ConnectionException::noActiveTransaction(); } return $this->isRollbackOnly; } public function convertToDatabaseValue($value, $type) { return Type::getType($type)->convertToDatabaseValue($value, $this->getDatabasePlatform()); } public function convertToPHPValue($value, $type) { return Type::getType($type)->convertToPHPValue($value, $this->getDatabasePlatform()); } private function _bindTypedValues($stmt, array $params, array $types) { if (is_int(key($params))) { $typeOffset = array_key_exists(0, $types) ? -1 : 0; $bindIndex = 1; foreach ($params as $value) { $typeIndex = $bindIndex + $typeOffset; if (isset($types[$typeIndex])) { $type = $types[$typeIndex]; [$value, $bindingType] = $this->getBindingInfo($value, $type); $stmt->bindValue($bindIndex, $value, $bindingType); } else { $stmt->bindValue($bindIndex, $value); } ++$bindIndex; } } else { foreach ($params as $name => $value) { if (isset($types[$name])) { $type = $types[$name]; [$value, $bindingType] = $this->getBindingInfo($value, $type); $stmt->bindValue($name, $value, $bindingType); } else { $stmt->bindValue($name, $value); } } } } private function getBindingInfo($value, $type) { if (is_string($type)) { $type = Type::getType($type); } if ($type instanceof Type) { $value = $type->convertToDatabaseValue($value, $this->getDatabasePlatform()); $bindingType = $type->getBindingType(); } else { $bindingType = $type; } return [$value, $bindingType]; } public function resolveParams(array $params, array $types) { $resolvedParams = []; if (is_int(key($params))) { $typeOffset = array_key_exists(0, $types) ? -1 : 0; $bindIndex = 1; foreach ($params as $value) { $typeIndex = $bindIndex + $typeOffset; if (isset($types[$typeIndex])) { $type = $types[$typeIndex]; [$value] = $this->getBindingInfo($value, $type); $resolvedParams[$bindIndex] = $value; } else { $resolvedParams[$bindIndex] = $value; } ++$bindIndex; } } else { foreach ($params as $name => $value) { if (isset($types[$name])) { $type = $types[$name]; [$value] = $this->getBindingInfo($value, $type); $resolvedParams[$name] = $value; } else { $resolvedParams[$name] = $value; } } } return $resolvedParams; } public function createQueryBuilder() { return new Query\QueryBuilder($this); } public function ping() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4119', 'Retry and reconnecting lost connections now happens automatically, ping() will be removed in DBAL 3.'); $connection = $this->getWrappedConnection(); if ($connection instanceof PingableConnection) { return $connection->ping(); } try { $this->query($this->getDatabasePlatform()->getDummySelectSQL()); return \true; } catch (DBALException $e) { return \false; } } public function handleExceptionDuringQuery(Throwable $e, string $sql, array $params = [], array $types = []) : void { $this->throw(Exception::driverExceptionDuringQuery($this->_driver, $e, $sql, $this->resolveParams($params, $types))); } public function handleDriverException(Throwable $e) : void { $this->throw(Exception::driverException($this->_driver, $e)); } private function throw(Exception $e) : void { if ($e instanceof ConnectionLost) { $this->close(); } throw $e; } private function ensureHasKeyValue(ResultStatement $stmt) : void { $columnCount = $stmt->columnCount(); if ($columnCount < 2) { throw NoKeyValue::fromColumnCount($columnCount); } } }
1
  <?php
2
+ namespace MailPoetVendor\Doctrine\DBAL; if (!defined('ABSPATH')) exit; use Closure; use MailPoetVendor\Doctrine\Common\EventManager; use MailPoetVendor\Doctrine\DBAL\Cache\ArrayStatement; use MailPoetVendor\Doctrine\DBAL\Cache\CacheException; use MailPoetVendor\Doctrine\DBAL\Cache\QueryCacheProfile; use MailPoetVendor\Doctrine\DBAL\Cache\ResultCacheStatement; use MailPoetVendor\Doctrine\DBAL\Driver\Connection as DriverConnection; use MailPoetVendor\Doctrine\DBAL\Driver\PDO\Statement as PDODriverStatement; use MailPoetVendor\Doctrine\DBAL\Driver\PingableConnection; use MailPoetVendor\Doctrine\DBAL\Driver\ResultStatement; use MailPoetVendor\Doctrine\DBAL\Driver\ServerInfoAwareConnection; use MailPoetVendor\Doctrine\DBAL\Exception\ConnectionLost; use MailPoetVendor\Doctrine\DBAL\Exception\InvalidArgumentException; use MailPoetVendor\Doctrine\DBAL\Exception\NoKeyValue; use MailPoetVendor\Doctrine\DBAL\Platforms\AbstractPlatform; use MailPoetVendor\Doctrine\DBAL\Query\Expression\ExpressionBuilder; use MailPoetVendor\Doctrine\DBAL\Query\QueryBuilder; use MailPoetVendor\Doctrine\DBAL\Schema\AbstractSchemaManager; use MailPoetVendor\Doctrine\DBAL\Types\Type; use MailPoetVendor\Doctrine\Deprecations\Deprecation; use PDO; use Throwable; use Traversable; use function array_key_exists; use function array_shift; use function assert; use function func_get_args; use function implode; use function is_int; use function is_string; use function key; class Connection implements DriverConnection { public const TRANSACTION_READ_UNCOMMITTED = TransactionIsolationLevel::READ_UNCOMMITTED; public const TRANSACTION_READ_COMMITTED = TransactionIsolationLevel::READ_COMMITTED; public const TRANSACTION_REPEATABLE_READ = TransactionIsolationLevel::REPEATABLE_READ; public const TRANSACTION_SERIALIZABLE = TransactionIsolationLevel::SERIALIZABLE; public const PARAM_INT_ARRAY = ParameterType::INTEGER + self::ARRAY_PARAM_OFFSET; public const PARAM_STR_ARRAY = ParameterType::STRING + self::ARRAY_PARAM_OFFSET; public const ARRAY_PARAM_OFFSET = 100; protected $_conn; protected $_config; protected $_eventManager; protected $_expr; private $autoCommit = \true; private $transactionNestingLevel = 0; private $transactionIsolationLevel; private $nestTransactionsWithSavepoints = \false; private $params; private $platform; protected $_schemaManager; protected $_driver; private $isRollbackOnly = \false; protected $defaultFetchMode = FetchMode::ASSOCIATIVE; public function __construct(array $params, Driver $driver, ?Configuration $config = null, ?EventManager $eventManager = null) { $this->_driver = $driver; $this->params = $params; if (isset($params['pdo'])) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/3554', 'Passing a user provided PDO instance directly to Doctrine is deprecated.'); if (!$params['pdo'] instanceof PDO) { throw Exception::invalidPdoInstance(); } $this->_conn = $params['pdo']; $this->_conn->setAttribute(PDO::ATTR_STATEMENT_CLASS, [PDODriverStatement::class, []]); unset($this->params['pdo']); } if (isset($params['platform'])) { if (!$params['platform'] instanceof Platforms\AbstractPlatform) { throw Exception::invalidPlatformType($params['platform']); } $this->platform = $params['platform']; } if (!$config) { $config = new Configuration(); } if (!$eventManager) { $eventManager = new EventManager(); } $this->_config = $config; $this->_eventManager = $eventManager; $this->_expr = new Query\Expression\ExpressionBuilder($this); $this->autoCommit = $config->getAutoCommit(); } public function getParams() { return $this->params; } public function getDatabase() { return $this->_driver->getDatabase($this); } public function getHost() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/issues/3580', 'Connection::getHost() is deprecated, get the database server host from application config ' . 'or as a last resort from internal Connection::getParams() API.'); return $this->params['host'] ?? null; } public function getPort() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/issues/3580', 'Connection::getPort() is deprecated, get the database server port from application config ' . 'or as a last resort from internal Connection::getParams() API.'); return $this->params['port'] ?? null; } public function getUsername() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/issues/3580', 'Connection::getUsername() is deprecated, get the username from application config ' . 'or as a last resort from internal Connection::getParams() API.'); return $this->params['user'] ?? null; } public function getPassword() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/issues/3580', 'Connection::getPassword() is deprecated, get the password from application config ' . 'or as a last resort from internal Connection::getParams() API.'); return $this->params['password'] ?? null; } public function getDriver() { return $this->_driver; } public function getConfiguration() { return $this->_config; } public function getEventManager() { return $this->_eventManager; } public function getDatabasePlatform() { if ($this->platform === null) { $this->platform = $this->detectDatabasePlatform(); $this->platform->setEventManager($this->_eventManager); } return $this->platform; } public function getExpressionBuilder() { return $this->_expr; } public function connect() { if ($this->_conn !== null) { return \false; } $driverOptions = $this->params['driverOptions'] ?? []; $user = $this->params['user'] ?? null; $password = $this->params['password'] ?? null; $this->_conn = $this->_driver->connect($this->params, $user, $password, $driverOptions); $this->transactionNestingLevel = 0; if ($this->autoCommit === \false) { $this->beginTransaction(); } if ($this->_eventManager->hasListeners(Events::postConnect)) { $eventArgs = new Event\ConnectionEventArgs($this); $this->_eventManager->dispatchEvent(Events::postConnect, $eventArgs); } return \true; } private function detectDatabasePlatform() : AbstractPlatform { $version = $this->getDatabasePlatformVersion(); if ($version !== null) { assert($this->_driver instanceof VersionAwarePlatformDriver); return $this->_driver->createDatabasePlatformForVersion($version); } return $this->_driver->getDatabasePlatform(); } private function getDatabasePlatformVersion() { if (!$this->_driver instanceof VersionAwarePlatformDriver) { return null; } if (isset($this->params['serverVersion'])) { return $this->params['serverVersion']; } if ($this->_conn === null) { try { $this->connect(); } catch (Throwable $originalException) { if (empty($this->params['dbname'])) { throw $originalException; } $params = $this->params; unset($this->params['dbname']); try { $this->connect(); } catch (Throwable $fallbackException) { throw $originalException; } finally { $this->params = $params; } $serverVersion = $this->getServerVersion(); $this->close(); return $serverVersion; } } return $this->getServerVersion(); } private function getServerVersion() { $connection = $this->getWrappedConnection(); if ($connection instanceof ServerInfoAwareConnection && !$connection->requiresQueryForServerVersion()) { return $connection->getServerVersion(); } return null; } public function isAutoCommit() { return $this->autoCommit === \true; } public function setAutoCommit($autoCommit) { $autoCommit = (bool) $autoCommit; if ($autoCommit === $this->autoCommit) { return; } $this->autoCommit = $autoCommit; if ($this->_conn === null || $this->transactionNestingLevel === 0) { return; } $this->commitAll(); } public function setFetchMode($fetchMode) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4019', 'Default Fetch Mode configuration is deprecated, use explicit Connection::fetch*() APIs instead.'); $this->defaultFetchMode = $fetchMode; } public function fetchAssoc($sql, array $params = [], array $types = []) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4019', 'Connection::fetchAssoc() is deprecated, use Connection::fetchAssociative() API instead.'); return $this->executeQuery($sql, $params, $types)->fetch(FetchMode::ASSOCIATIVE); } public function fetchArray($sql, array $params = [], array $types = []) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4019', 'Connection::fetchArray() is deprecated, use Connection::fetchNumeric() API instead.'); return $this->executeQuery($sql, $params, $types)->fetch(FetchMode::NUMERIC); } public function fetchColumn($sql, array $params = [], $column = 0, array $types = []) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4019', 'Connection::fetchColumn() is deprecated, use Connection::fetchOne() API instead.'); return $this->executeQuery($sql, $params, $types)->fetchColumn($column); } public function fetchAssociative(string $query, array $params = [], array $types = []) { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); return $stmt->fetchAssociative(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function fetchNumeric(string $query, array $params = [], array $types = []) { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); return $stmt->fetchNumeric(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function fetchOne(string $query, array $params = [], array $types = []) { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); return $stmt->fetchOne(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function isConnected() { return $this->_conn !== null; } public function isTransactionActive() { return $this->transactionNestingLevel > 0; } private function addCriteriaCondition(array $criteria, array &$columns, array &$values, array &$conditions) : void { $platform = $this->getDatabasePlatform(); foreach ($criteria as $columnName => $value) { if ($value === null) { $conditions[] = $platform->getIsNullExpression($columnName); continue; } $columns[] = $columnName; $values[] = $value; $conditions[] = $columnName . ' = ?'; } } public function delete($table, array $criteria, array $types = []) { if (empty($criteria)) { throw InvalidArgumentException::fromEmptyCriteria(); } $columns = $values = $conditions = []; $this->addCriteriaCondition($criteria, $columns, $values, $conditions); return $this->executeStatement('DELETE FROM ' . $table . ' WHERE ' . implode(' AND ', $conditions), $values, is_string(key($types)) ? $this->extractTypeValues($columns, $types) : $types); } public function close() { $this->_conn = null; } public function setTransactionIsolation($level) { $this->transactionIsolationLevel = $level; return $this->executeStatement($this->getDatabasePlatform()->getSetTransactionIsolationSQL($level)); } public function getTransactionIsolation() { if ($this->transactionIsolationLevel === null) { $this->transactionIsolationLevel = $this->getDatabasePlatform()->getDefaultTransactionIsolationLevel(); } return $this->transactionIsolationLevel; } public function update($table, array $data, array $criteria, array $types = []) { $columns = $values = $conditions = $set = []; foreach ($data as $columnName => $value) { $columns[] = $columnName; $values[] = $value; $set[] = $columnName . ' = ?'; } $this->addCriteriaCondition($criteria, $columns, $values, $conditions); if (is_string(key($types))) { $types = $this->extractTypeValues($columns, $types); } $sql = 'UPDATE ' . $table . ' SET ' . implode(', ', $set) . ' WHERE ' . implode(' AND ', $conditions); return $this->executeStatement($sql, $values, $types); } public function insert($table, array $data, array $types = []) { if (empty($data)) { return $this->executeStatement('INSERT INTO ' . $table . ' () VALUES ()'); } $columns = []; $values = []; $set = []; foreach ($data as $columnName => $value) { $columns[] = $columnName; $values[] = $value; $set[] = '?'; } return $this->executeStatement('INSERT INTO ' . $table . ' (' . implode(', ', $columns) . ')' . ' VALUES (' . implode(', ', $set) . ')', $values, is_string(key($types)) ? $this->extractTypeValues($columns, $types) : $types); } private function extractTypeValues(array $columnList, array $types) { $typeValues = []; foreach ($columnList as $columnIndex => $columnName) { $typeValues[] = $types[$columnName] ?? ParameterType::STRING; } return $typeValues; } public function quoteIdentifier($str) { return $this->getDatabasePlatform()->quoteIdentifier($str); } public function quote($value, $type = ParameterType::STRING) { $connection = $this->getWrappedConnection(); [$value, $bindingType] = $this->getBindingInfo($value, $type); return $connection->quote($value, $bindingType); } public function fetchAll($sql, array $params = [], $types = []) { return $this->executeQuery($sql, $params, $types)->fetchAll(); } public function fetchAllNumeric(string $query, array $params = [], array $types = []) : array { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); return $stmt->fetchAllNumeric(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function fetchAllAssociative(string $query, array $params = [], array $types = []) : array { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); return $stmt->fetchAllAssociative(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function fetchAllKeyValue(string $query, array $params = [], array $types = []) : array { $stmt = $this->executeQuery($query, $params, $types); $this->ensureHasKeyValue($stmt); $data = []; foreach ($stmt->fetchAll(FetchMode::NUMERIC) as [$key, $value]) { $data[$key] = $value; } return $data; } public function fetchAllAssociativeIndexed(string $query, array $params = [], array $types = []) : array { $stmt = $this->executeQuery($query, $params, $types); $data = []; foreach ($stmt->fetchAll(FetchMode::ASSOCIATIVE) as $row) { $data[array_shift($row)] = $row; } return $data; } public function fetchFirstColumn(string $query, array $params = [], array $types = []) : array { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); return $stmt->fetchFirstColumn(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function iterateNumeric(string $query, array $params = [], array $types = []) : Traversable { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); yield from $stmt->iterateNumeric(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function iterateAssociative(string $query, array $params = [], array $types = []) : Traversable { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); yield from $stmt->iterateAssociative(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function iterateKeyValue(string $query, array $params = [], array $types = []) : Traversable { $stmt = $this->executeQuery($query, $params, $types); $this->ensureHasKeyValue($stmt); while (($row = $stmt->fetch(FetchMode::NUMERIC)) !== \false) { (yield $row[0] => $row[1]); } } public function iterateAssociativeIndexed(string $query, array $params = [], array $types = []) : Traversable { $stmt = $this->executeQuery($query, $params, $types); while (($row = $stmt->fetch(FetchMode::ASSOCIATIVE)) !== \false) { (yield array_shift($row) => $row); } } public function iterateColumn(string $query, array $params = [], array $types = []) : Traversable { try { $stmt = $this->ensureForwardCompatibilityStatement($this->executeQuery($query, $params, $types)); yield from $stmt->iterateColumn(); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $query, $params, $types); } } public function prepare($sql) { try { $stmt = new Statement($sql, $this); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $sql); } $stmt->setFetchMode($this->defaultFetchMode); return $stmt; } public function executeQuery($sql, array $params = [], $types = [], ?QueryCacheProfile $qcp = null) { if ($qcp !== null) { return $this->executeCacheQuery($sql, $params, $types, $qcp); } $connection = $this->getWrappedConnection(); $logger = $this->_config->getSQLLogger(); if ($logger) { $logger->startQuery($sql, $params, $types); } try { if ($params) { [$sql, $params, $types] = SQLParserUtils::expandListParameters($sql, $params, $types); $stmt = $connection->prepare($sql); if ($types) { $this->_bindTypedValues($stmt, $params, $types); $stmt->execute(); } else { $stmt->execute($params); } } else { $stmt = $connection->query($sql); } } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $sql, $params, $types); } $stmt->setFetchMode($this->defaultFetchMode); if ($logger) { $logger->stopQuery(); } return $this->ensureForwardCompatibilityStatement($stmt); } public function executeCacheQuery($sql, $params, $types, QueryCacheProfile $qcp) { $resultCache = $qcp->getResultCacheDriver() ?? $this->_config->getResultCacheImpl(); if ($resultCache === null) { throw CacheException::noResultDriverConfigured(); } $connectionParams = $this->params; unset($connectionParams['platform']); [$cacheKey, $realKey] = $qcp->generateCacheKeys($sql, $params, $types, $connectionParams); $data = $resultCache->fetch($cacheKey); if ($data !== \false) { if (isset($data[$realKey])) { $stmt = new ArrayStatement($data[$realKey]); } elseif (array_key_exists($realKey, $data)) { $stmt = new ArrayStatement([]); } } if (!isset($stmt)) { $stmt = new ResultCacheStatement($this->executeQuery($sql, $params, $types), $resultCache, $cacheKey, $realKey, $qcp->getLifetime()); } $stmt->setFetchMode($this->defaultFetchMode); return $this->ensureForwardCompatibilityStatement($stmt); } private function ensureForwardCompatibilityStatement(ResultStatement $stmt) { return ForwardCompatibility\Result::ensure($stmt); } public function project($sql, array $params, Closure $function) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/3823', 'Connection::project() is deprecated without replacement, implement data projections in your own code.'); $result = []; $stmt = $this->executeQuery($sql, $params); while ($row = $stmt->fetch()) { $result[] = $function($row); } $stmt->closeCursor(); return $result; } public function query() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4163', 'Connection::query() is deprecated, use Connection::executeQuery() instead.'); $connection = $this->getWrappedConnection(); $args = func_get_args(); $logger = $this->_config->getSQLLogger(); if ($logger) { $logger->startQuery($args[0]); } try { $statement = $connection->query(...$args); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $args[0]); } $statement->setFetchMode($this->defaultFetchMode); if ($logger) { $logger->stopQuery(); } return $statement; } public function executeUpdate($sql, array $params = [], array $types = []) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4163', 'Connection::executeUpdate() is deprecated, use Connection::executeStatement() instead.'); return $this->executeStatement($sql, $params, $types); } public function executeStatement($sql, array $params = [], array $types = []) { $connection = $this->getWrappedConnection(); $logger = $this->_config->getSQLLogger(); if ($logger) { $logger->startQuery($sql, $params, $types); } try { if ($params) { [$sql, $params, $types] = SQLParserUtils::expandListParameters($sql, $params, $types); $stmt = $connection->prepare($sql); if ($types) { $this->_bindTypedValues($stmt, $params, $types); $stmt->execute(); } else { $stmt->execute($params); } $result = $stmt->rowCount(); } else { $result = $connection->exec($sql); } } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $sql, $params, $types); } if ($logger) { $logger->stopQuery(); } return $result; } public function exec($sql) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4163', 'Connection::exec() is deprecated, use Connection::executeStatement() instead.'); $connection = $this->getWrappedConnection(); $logger = $this->_config->getSQLLogger(); if ($logger) { $logger->startQuery($sql); } try { $result = $connection->exec($sql); } catch (Throwable $e) { $this->handleExceptionDuringQuery($e, $sql); } if ($logger) { $logger->stopQuery(); } return $result; } public function getTransactionNestingLevel() { return $this->transactionNestingLevel; } public function errorCode() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/3507', 'Connection::errorCode() is deprecated, use getCode() or getSQLState() on Exception instead.'); return $this->getWrappedConnection()->errorCode(); } public function errorInfo() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/3507', 'Connection::errorInfo() is deprecated, use getCode() or getSQLState() on Exception instead.'); return $this->getWrappedConnection()->errorInfo(); } public function lastInsertId($name = null) { return $this->getWrappedConnection()->lastInsertId($name); } public function transactional(Closure $func) { $this->beginTransaction(); try { $res = $func($this); $this->commit(); return $res; } catch (Throwable $e) { $this->rollBack(); throw $e; } } public function setNestTransactionsWithSavepoints($nestTransactionsWithSavepoints) { if ($this->transactionNestingLevel > 0) { throw ConnectionException::mayNotAlterNestedTransactionWithSavepointsInTransaction(); } if (!$this->getDatabasePlatform()->supportsSavepoints()) { throw ConnectionException::savepointsNotSupported(); } $this->nestTransactionsWithSavepoints = (bool) $nestTransactionsWithSavepoints; } public function getNestTransactionsWithSavepoints() { return $this->nestTransactionsWithSavepoints; } protected function _getNestedTransactionSavePointName() { return 'DOCTRINE2_SAVEPOINT_' . $this->transactionNestingLevel; } public function beginTransaction() { $connection = $this->getWrappedConnection(); ++$this->transactionNestingLevel; $logger = $this->_config->getSQLLogger(); if ($this->transactionNestingLevel === 1) { if ($logger) { $logger->startQuery('"START TRANSACTION"'); } $connection->beginTransaction(); if ($logger) { $logger->stopQuery(); } } elseif ($this->nestTransactionsWithSavepoints) { if ($logger) { $logger->startQuery('"SAVEPOINT"'); } $this->createSavepoint($this->_getNestedTransactionSavePointName()); if ($logger) { $logger->stopQuery(); } } return \true; } public function commit() { if ($this->transactionNestingLevel === 0) { throw ConnectionException::noActiveTransaction(); } if ($this->isRollbackOnly) { throw ConnectionException::commitFailedRollbackOnly(); } $result = \true; $connection = $this->getWrappedConnection(); $logger = $this->_config->getSQLLogger(); if ($this->transactionNestingLevel === 1) { if ($logger) { $logger->startQuery('"COMMIT"'); } $result = $connection->commit(); if ($logger) { $logger->stopQuery(); } } elseif ($this->nestTransactionsWithSavepoints) { if ($logger) { $logger->startQuery('"RELEASE SAVEPOINT"'); } $this->releaseSavepoint($this->_getNestedTransactionSavePointName()); if ($logger) { $logger->stopQuery(); } } --$this->transactionNestingLevel; if ($this->autoCommit !== \false || $this->transactionNestingLevel !== 0) { return $result; } $this->beginTransaction(); return $result; } private function commitAll() : void { while ($this->transactionNestingLevel !== 0) { if ($this->autoCommit === \false && $this->transactionNestingLevel === 1) { $this->commit(); return; } $this->commit(); } } public function rollBack() { if ($this->transactionNestingLevel === 0) { throw ConnectionException::noActiveTransaction(); } $connection = $this->getWrappedConnection(); $logger = $this->_config->getSQLLogger(); if ($this->transactionNestingLevel === 1) { if ($logger) { $logger->startQuery('"ROLLBACK"'); } $this->transactionNestingLevel = 0; $connection->rollBack(); $this->isRollbackOnly = \false; if ($logger) { $logger->stopQuery(); } if ($this->autoCommit === \false) { $this->beginTransaction(); } } elseif ($this->nestTransactionsWithSavepoints) { if ($logger) { $logger->startQuery('"ROLLBACK TO SAVEPOINT"'); } $this->rollbackSavepoint($this->_getNestedTransactionSavePointName()); --$this->transactionNestingLevel; if ($logger) { $logger->stopQuery(); } } else { $this->isRollbackOnly = \true; --$this->transactionNestingLevel; } return \true; } public function createSavepoint($savepoint) { $platform = $this->getDatabasePlatform(); if (!$platform->supportsSavepoints()) { throw ConnectionException::savepointsNotSupported(); } $this->getWrappedConnection()->exec($platform->createSavePoint($savepoint)); } public function releaseSavepoint($savepoint) { $platform = $this->getDatabasePlatform(); if (!$platform->supportsSavepoints()) { throw ConnectionException::savepointsNotSupported(); } if (!$platform->supportsReleaseSavepoints()) { return; } $this->getWrappedConnection()->exec($platform->releaseSavePoint($savepoint)); } public function rollbackSavepoint($savepoint) { $platform = $this->getDatabasePlatform(); if (!$platform->supportsSavepoints()) { throw ConnectionException::savepointsNotSupported(); } $this->getWrappedConnection()->exec($platform->rollbackSavePoint($savepoint)); } public function getWrappedConnection() { $this->connect(); assert($this->_conn !== null); return $this->_conn; } public function getSchemaManager() { if ($this->_schemaManager === null) { $this->_schemaManager = $this->_driver->getSchemaManager($this); } return $this->_schemaManager; } public function setRollbackOnly() { if ($this->transactionNestingLevel === 0) { throw ConnectionException::noActiveTransaction(); } $this->isRollbackOnly = \true; } public function isRollbackOnly() { if ($this->transactionNestingLevel === 0) { throw ConnectionException::noActiveTransaction(); } return $this->isRollbackOnly; } public function convertToDatabaseValue($value, $type) { return Type::getType($type)->convertToDatabaseValue($value, $this->getDatabasePlatform()); } public function convertToPHPValue($value, $type) { return Type::getType($type)->convertToPHPValue($value, $this->getDatabasePlatform()); } private function _bindTypedValues($stmt, array $params, array $types) { if (is_int(key($params))) { $typeOffset = array_key_exists(0, $types) ? -1 : 0; $bindIndex = 1; foreach ($params as $value) { $typeIndex = $bindIndex + $typeOffset; if (isset($types[$typeIndex])) { $type = $types[$typeIndex]; [$value, $bindingType] = $this->getBindingInfo($value, $type); $stmt->bindValue($bindIndex, $value, $bindingType); } else { $stmt->bindValue($bindIndex, $value); } ++$bindIndex; } } else { foreach ($params as $name => $value) { if (isset($types[$name])) { $type = $types[$name]; [$value, $bindingType] = $this->getBindingInfo($value, $type); $stmt->bindValue($name, $value, $bindingType); } else { $stmt->bindValue($name, $value); } } } } private function getBindingInfo($value, $type) : array { if (is_string($type)) { $type = Type::getType($type); } if ($type instanceof Type) { $value = $type->convertToDatabaseValue($value, $this->getDatabasePlatform()); $bindingType = $type->getBindingType(); } else { $bindingType = $type ?? ParameterType::STRING; } return [$value, $bindingType]; } public function resolveParams(array $params, array $types) { $resolvedParams = []; if (is_int(key($params))) { $typeOffset = array_key_exists(0, $types) ? -1 : 0; $bindIndex = 1; foreach ($params as $value) { $typeIndex = $bindIndex + $typeOffset; if (isset($types[$typeIndex])) { $type = $types[$typeIndex]; [$value] = $this->getBindingInfo($value, $type); $resolvedParams[$bindIndex] = $value; } else { $resolvedParams[$bindIndex] = $value; } ++$bindIndex; } } else { foreach ($params as $name => $value) { if (isset($types[$name])) { $type = $types[$name]; [$value] = $this->getBindingInfo($value, $type); $resolvedParams[$name] = $value; } else { $resolvedParams[$name] = $value; } } } return $resolvedParams; } public function createQueryBuilder() { return new Query\QueryBuilder($this); } public function ping() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4119', 'Retry and reconnecting lost connections now happens automatically, ping() will be removed in DBAL 3.'); $connection = $this->getWrappedConnection(); if ($connection instanceof PingableConnection) { return $connection->ping(); } try { $this->query($this->getDatabasePlatform()->getDummySelectSQL()); return \true; } catch (DBALException $e) { return \false; } } public function handleExceptionDuringQuery(Throwable $e, string $sql, array $params = [], array $types = []) : void { $this->throw(Exception::driverExceptionDuringQuery($this->_driver, $e, $sql, $this->resolveParams($params, $types))); } public function handleDriverException(Throwable $e) : void { $this->throw(Exception::driverException($this->_driver, $e)); } private function throw(Exception $e) : void { if ($e instanceof ConnectionLost) { $this->close(); } throw $e; } private function ensureHasKeyValue(ResultStatement $stmt) : void { $columnCount = $stmt->columnCount(); if ($columnCount < 2) { throw NoKeyValue::fromColumnCount($columnCount); } } }
vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- namespace MailPoetVendor\Doctrine\DBAL; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\DBAL\Driver\DriverException as DeprecatedDriverException; use MailPoetVendor\Doctrine\DBAL\Driver\ExceptionConverterDriver; use MailPoetVendor\Doctrine\DBAL\Exception\DriverException; use MailPoetVendor\Doctrine\DBAL\Platforms\AbstractPlatform; use MailPoetVendor\Doctrine\DBAL\Types\Type; use Throwable; use function array_map; use function bin2hex; use function get_class; use function gettype; use function implode; use function is_object; use function is_resource; use function is_string; use function json_encode; use function preg_replace; use function spl_object_hash; use function sprintf; class DBALException extends \Exception { public static function notSupported($method) { return new Exception(sprintf("Operation '%s' is not supported by platform.", $method)); } public static function invalidPlatformSpecified() : self { return new Exception("Invalid 'platform' option specified, need to give an instance of " . AbstractPlatform::class . '.'); } public static function invalidPlatformType($invalidPlatform) : self { if (is_object($invalidPlatform)) { return new Exception(sprintf("Option 'platform' must be a subtype of '%s', instance of '%s' given", AbstractPlatform::class, get_class($invalidPlatform))); } return new Exception(sprintf("Option 'platform' must be an object and subtype of '%s'. Got '%s'", AbstractPlatform::class, gettype($invalidPlatform))); } public static function invalidPlatformVersionSpecified($version, $expectedFormat) { return new Exception(sprintf('Invalid platform version "%s" specified. ' . 'The platform version has to be specified in the format: "%s".', $version, $expectedFormat)); } public static function invalidPdoInstance() { return new Exception("The 'pdo' option was used in DriverManager::getConnection() but no " . 'instance of PDO was given.'); } public static function driverRequired($url = null) { if ($url) { return new Exception(sprintf("The options 'driver' or 'driverClass' are mandatory if a connection URL without scheme " . 'is given to DriverManager::getConnection(). Given URL: %s', $url)); } return new Exception("The options 'driver' or 'driverClass' are mandatory if no PDO " . 'instance is given to DriverManager::getConnection().'); } public static function unknownDriver($unknownDriverName, array $knownDrivers) { return new Exception("The given 'driver' " . $unknownDriverName . ' is unknown, ' . 'Doctrine currently supports only the following drivers: ' . implode(', ', $knownDrivers)); } public static function driverExceptionDuringQuery(Driver $driver, Throwable $driverEx, $sql, array $params = []) { $msg = "An exception occurred while executing '" . $sql . "'"; if ($params) { $msg .= ' with params ' . self::formatParameters($params); } $msg .= ":\n\n" . $driverEx->getMessage(); return static::wrapException($driver, $driverEx, $msg); } public static function driverException(Driver $driver, Throwable $driverEx) { return static::wrapException($driver, $driverEx, 'An exception occurred in driver: ' . $driverEx->getMessage()); } private static function wrapException(Driver $driver, Throwable $driverEx, string $msg) { if ($driverEx instanceof DriverException) { return $driverEx; } if ($driver instanceof ExceptionConverterDriver && $driverEx instanceof DeprecatedDriverException) { return $driver->convertException($msg, $driverEx); } return new Exception($msg, 0, $driverEx); } private static function formatParameters(array $params) { return '[' . implode(', ', array_map(static function ($param) { if (is_resource($param)) { return (string) $param; } $json = @json_encode($param); if (!is_string($json) || $json === 'null' && is_string($param)) { return sprintf('"%s"', preg_replace('/.{2}/', '\\x$0', bin2hex($param))); } return $json; }, $params)) . ']'; } public static function invalidWrapperClass($wrapperClass) { return new Exception("The given 'wrapperClass' " . $wrapperClass . ' has to be a ' . 'subtype of \\Doctrine\\DBAL\\Connection.'); } public static function invalidDriverClass($driverClass) { return new Exception("The given 'driverClass' " . $driverClass . ' has to implement the ' . Driver::class . ' interface.'); } public static function invalidTableName($tableName) { return new Exception('Invalid table name specified: ' . $tableName); } public static function noColumnsSpecifiedForTable($tableName) { return new Exception('No columns specified for table ' . $tableName); } public static function limitOffsetInvalid() { return new Exception('Invalid Offset in Limit Query, it has to be larger than or equal to 0.'); } public static function typeExists($name) { return new Exception('Type ' . $name . ' already exists.'); } public static function unknownColumnType($name) { return new Exception('Unknown column type "' . $name . '" requested. Any Doctrine type that you use has ' . 'to be registered with \\Doctrine\\DBAL\\Types\\Type::addType(). You can get a list of all the ' . 'known types with \\Doctrine\\DBAL\\Types\\Type::getTypesMap(). If this error occurs during database ' . 'introspection then you might have forgotten to register all database types for a Doctrine Type. Use ' . 'AbstractPlatform#registerDoctrineTypeMapping() or have your custom types implement ' . 'Type#getMappedDatabaseTypes(). If the type name is empty you might ' . 'have a problem with the cache or forgot some mapping information.'); } public static function typeNotFound($name) { return new Exception('Type to be overwritten ' . $name . ' does not exist.'); } public static function typeNotRegistered(Type $type) : self { return new Exception(sprintf('Type of the class %s@%s is not registered.', get_class($type), spl_object_hash($type))); } public static function typeAlreadyRegistered(Type $type) : self { return new Exception(sprintf('Type of the class %s@%s is already registered.', get_class($type), spl_object_hash($type))); } }
1
  <?php
2
+ namespace MailPoetVendor\Doctrine\DBAL; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\DBAL\Driver\DriverException as DeprecatedDriverException; use MailPoetVendor\Doctrine\DBAL\Driver\ExceptionConverterDriver; use MailPoetVendor\Doctrine\DBAL\Exception\DriverException; use MailPoetVendor\Doctrine\DBAL\Platforms\AbstractPlatform; use MailPoetVendor\Doctrine\DBAL\Types\Type; use Throwable; use function array_map; use function bin2hex; use function get_class; use function gettype; use function implode; use function is_object; use function is_resource; use function is_string; use function json_encode; use function preg_replace; use function spl_object_hash; use function sprintf; class DBALException extends \Exception { public static function notSupported($method) { return new Exception(sprintf("Operation '%s' is not supported by platform.", $method)); } public static function invalidPlatformSpecified() : self { return new Exception("Invalid 'platform' option specified, need to give an instance of " . AbstractPlatform::class . '.'); } public static function invalidPlatformType($invalidPlatform) : self { if (is_object($invalidPlatform)) { return new Exception(sprintf("Option 'platform' must be a subtype of '%s', instance of '%s' given", AbstractPlatform::class, get_class($invalidPlatform))); } return new Exception(sprintf("Option 'platform' must be an object and subtype of '%s'. Got '%s'", AbstractPlatform::class, gettype($invalidPlatform))); } public static function invalidPlatformVersionSpecified($version, $expectedFormat) { return new Exception(sprintf('Invalid platform version "%s" specified. ' . 'The platform version has to be specified in the format: "%s".', $version, $expectedFormat)); } public static function invalidPdoInstance() { return new Exception("The 'pdo' option was used in DriverManager::getConnection() but no " . 'instance of PDO was given.'); } public static function driverRequired($url = null) { if ($url) { return new Exception(sprintf("The options 'driver' or 'driverClass' are mandatory if a connection URL without scheme " . 'is given to DriverManager::getConnection(). Given URL: %s', $url)); } return new Exception("The options 'driver' or 'driverClass' are mandatory if no PDO " . 'instance is given to DriverManager::getConnection().'); } public static function unknownDriver($unknownDriverName, array $knownDrivers) { return new Exception("The given 'driver' " . $unknownDriverName . ' is unknown, ' . 'Doctrine currently supports only the following drivers: ' . implode(', ', $knownDrivers)); } public static function driverExceptionDuringQuery(Driver $driver, Throwable $driverEx, $sql, array $params = []) { $msg = "An exception occurred while executing '" . $sql . "'"; if ($params) { $msg .= ' with params ' . self::formatParameters($params); } $msg .= ":\n\n" . $driverEx->getMessage(); return self::wrapException($driver, $driverEx, $msg); } public static function driverException(Driver $driver, Throwable $driverEx) { return self::wrapException($driver, $driverEx, 'An exception occurred in driver: ' . $driverEx->getMessage()); } private static function wrapException(Driver $driver, Throwable $driverEx, string $msg) { if ($driverEx instanceof DriverException) { return $driverEx; } if ($driver instanceof ExceptionConverterDriver && $driverEx instanceof DeprecatedDriverException) { return $driver->convertException($msg, $driverEx); } return new Exception($msg, 0, $driverEx); } private static function formatParameters(array $params) { return '[' . implode(', ', array_map(static function ($param) { if (is_resource($param)) { return (string) $param; } $json = @json_encode($param); if (!is_string($json) || $json === 'null' && is_string($param)) { return sprintf('"%s"', preg_replace('/.{2}/', '\\x$0', bin2hex($param))); } return $json; }, $params)) . ']'; } public static function invalidWrapperClass($wrapperClass) { return new Exception("The given 'wrapperClass' " . $wrapperClass . ' has to be a ' . 'subtype of \\Doctrine\\DBAL\\Connection.'); } public static function invalidDriverClass($driverClass) { return new Exception("The given 'driverClass' " . $driverClass . ' has to implement the ' . Driver::class . ' interface.'); } public static function invalidTableName($tableName) { return new Exception('Invalid table name specified: ' . $tableName); } public static function noColumnsSpecifiedForTable($tableName) { return new Exception('No columns specified for table ' . $tableName); } public static function limitOffsetInvalid() { return new Exception('Invalid Offset in Limit Query, it has to be larger than or equal to 0.'); } public static function typeExists($name) { return new Exception('Type ' . $name . ' already exists.'); } public static function unknownColumnType($name) { return new Exception('Unknown column type "' . $name . '" requested. Any Doctrine type that you use has ' . 'to be registered with \\Doctrine\\DBAL\\Types\\Type::addType(). You can get a list of all the ' . 'known types with \\Doctrine\\DBAL\\Types\\Type::getTypesMap(). If this error occurs during database ' . 'introspection then you might have forgotten to register all database types for a Doctrine Type. Use ' . 'AbstractPlatform#registerDoctrineTypeMapping() or have your custom types implement ' . 'Type#getMappedDatabaseTypes(). If the type name is empty you might ' . 'have a problem with the cache or forgot some mapping information.'); } public static function typeNotFound($name) { return new Exception('Type to be overwritten ' . $name . ' does not exist.'); } public static function typeNotRegistered(Type $type) : self { return new Exception(sprintf('Type of the class %s@%s is not registered.', get_class($type), spl_object_hash($type))); } public static function typeAlreadyRegistered(Type $type) : self { return new Exception(sprintf('Type of the class %s@%s is already registered.', get_class($type), spl_object_hash($type))); } }
vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractException.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- declare (strict_types=1); namespace MailPoetVendor\Doctrine\DBAL\Driver; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\Deprecations\Deprecation; use Exception as BaseException; abstract class AbstractException extends BaseException implements DriverException { private $errorCode; private $sqlState; public function __construct($message, $sqlState = null, $errorCode = null) { parent::__construct($message); $this->errorCode = $errorCode; $this->sqlState = $sqlState; } public function getErrorCode() { Deprecation::triggerIfCalledFromOutside('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4112', 'Driver\\AbstractException::getErrorCode() is deprecated, use getSQLState() or getCode() instead.'); return $this->errorCode; } public function getSQLState() { return $this->sqlState; } }
1
  <?php
2
+ declare (strict_types=1); namespace MailPoetVendor\Doctrine\DBAL\Driver; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\Deprecations\Deprecation; use Exception as BaseException; use Throwable; abstract class AbstractException extends BaseException implements DriverException { private $errorCode; private $sqlState; public function __construct($message, $sqlState = null, $errorCode = null, ?Throwable $previous = null) { parent::__construct($message, 0, $previous); $this->errorCode = $errorCode; $this->sqlState = $sqlState; } public function getErrorCode() { Deprecation::triggerIfCalledFromOutside('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4112', 'Driver\\AbstractException::getErrorCode() is deprecated, use getSQLState() or getCode() instead.'); return $this->errorCode; } public function getSQLState() { return $this->sqlState; } }
vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/DriverManager.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- namespace MailPoetVendor\Doctrine\DBAL; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\Common\EventManager; use MailPoetVendor\Doctrine\DBAL\Driver\DrizzlePDOMySql; use MailPoetVendor\Doctrine\DBAL\Driver\IBMDB2; use MailPoetVendor\Doctrine\DBAL\Driver\Mysqli; use MailPoetVendor\Doctrine\DBAL\Driver\OCI8; use MailPoetVendor\Doctrine\DBAL\Driver\PDO; use MailPoetVendor\Doctrine\DBAL\Driver\SQLAnywhere; use MailPoetVendor\Doctrine\DBAL\Driver\SQLSrv; use function array_keys; use function array_merge; use function assert; use function class_implements; use function in_array; use function is_string; use function is_subclass_of; use function parse_str; use function parse_url; use function preg_replace; use function rawurldecode; use function str_replace; use function strpos; use function substr; final class DriverManager { private const DRIVER_MAP = ['pdo_mysql' => PDO\MySQL\Driver::class, 'pdo_sqlite' => PDO\SQLite\Driver::class, 'pdo_pgsql' => PDO\PgSQL\Driver::class, 'pdo_oci' => PDO\OCI\Driver::class, 'oci8' => OCI8\Driver::class, 'ibm_db2' => IBMDB2\Driver::class, 'pdo_sqlsrv' => PDO\SQLSrv\Driver::class, 'mysqli' => Mysqli\Driver::class, 'drizzle_pdo_mysql' => DrizzlePDOMySql\Driver::class, 'sqlanywhere' => SQLAnywhere\Driver::class, 'sqlsrv' => SQLSrv\Driver::class]; private static $driverSchemeAliases = [ 'db2' => 'ibm_db2', 'mssql' => 'pdo_sqlsrv', 'mysql' => 'pdo_mysql', 'mysql2' => 'pdo_mysql', 'postgres' => 'pdo_pgsql', 'postgresql' => 'pdo_pgsql', 'pgsql' => 'pdo_pgsql', 'sqlite' => 'pdo_sqlite', 'sqlite3' => 'pdo_sqlite', ]; private function __construct() { } public static function getConnection(array $params, ?Configuration $config = null, ?EventManager $eventManager = null) : Connection { if (!$config) { $config = new Configuration(); } if (!$eventManager) { $eventManager = new EventManager(); } $params = self::parseDatabaseUrl($params); if (isset($params['master'])) { $params['master'] = self::parseDatabaseUrl($params['master']); } if (isset($params['slaves'])) { foreach ($params['slaves'] as $key => $slaveParams) { $params['slaves'][$key] = self::parseDatabaseUrl($slaveParams); } } if (isset($params['primary'])) { $params['primary'] = self::parseDatabaseUrl($params['primary']); } if (isset($params['replica'])) { foreach ($params['replica'] as $key => $replicaParams) { $params['replica'][$key] = self::parseDatabaseUrl($replicaParams); } } if (isset($params['global'])) { $params['global'] = self::parseDatabaseUrl($params['global']); } if (isset($params['shards'])) { foreach ($params['shards'] as $key => $shardParams) { $params['shards'][$key] = self::parseDatabaseUrl($shardParams); } } if (isset($params['pdo']) && !$params['pdo'] instanceof \PDO) { throw Exception::invalidPdoInstance(); } if (isset($params['pdo'])) { $params['pdo']->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); $params['driver'] = 'pdo_' . $params['pdo']->getAttribute(\PDO::ATTR_DRIVER_NAME); } $driver = self::createDriver($params); $wrapperClass = Connection::class; if (isset($params['wrapperClass'])) { if (!is_subclass_of($params['wrapperClass'], $wrapperClass)) { throw Exception::invalidWrapperClass($params['wrapperClass']); } $wrapperClass = $params['wrapperClass']; } return new $wrapperClass($params, $driver, $config, $eventManager); } public static function getAvailableDrivers() : array { return array_keys(self::DRIVER_MAP); } private static function createDriver(array $params) : Driver { if (isset($params['driverClass'])) { $interfaces = class_implements($params['driverClass'], \true); if ($interfaces === \false || !in_array(Driver::class, $interfaces)) { throw Exception::invalidDriverClass($params['driverClass']); } return new $params['driverClass'](); } if (isset($params['driver'])) { if (!isset(self::DRIVER_MAP[$params['driver']])) { throw Exception::unknownDriver($params['driver'], array_keys(self::DRIVER_MAP)); } $class = self::DRIVER_MAP[$params['driver']]; return new $class(); } throw Exception::driverRequired(); } private static function normalizeDatabaseUrlPath(string $urlPath) : string { return substr($urlPath, 1); } private static function parseDatabaseUrl(array $params) : array { if (!isset($params['url'])) { return $params; } $url = preg_replace('#^((?:pdo_)?sqlite3?):///#', '$1://localhost/', $params['url']); assert(is_string($url)); $url = parse_url($url); if ($url === \false) { throw new Exception('Malformed parameter "url".'); } foreach ($url as $param => $value) { if (!is_string($value)) { continue; } $url[$param] = rawurldecode($value); } unset($params['pdo']); $params = self::parseDatabaseUrlScheme($url['scheme'] ?? null, $params); if (isset($url['host'])) { $params['host'] = $url['host']; } if (isset($url['port'])) { $params['port'] = $url['port']; } if (isset($url['user'])) { $params['user'] = $url['user']; } if (isset($url['pass'])) { $params['password'] = $url['pass']; } $params = self::parseDatabaseUrlPath($url, $params); $params = self::parseDatabaseUrlQuery($url, $params); return $params; } private static function parseDatabaseUrlPath(array $url, array $params) : array { if (!isset($url['path'])) { return $params; } $url['path'] = self::normalizeDatabaseUrlPath($url['path']); if (!isset($params['driver'])) { return self::parseRegularDatabaseUrlPath($url, $params); } if (strpos($params['driver'], 'sqlite') !== \false) { return self::parseSqliteDatabaseUrlPath($url, $params); } return self::parseRegularDatabaseUrlPath($url, $params); } private static function parseDatabaseUrlQuery(array $url, array $params) : array { if (!isset($url['query'])) { return $params; } $query = []; parse_str($url['query'], $query); return array_merge($params, $query); } private static function parseRegularDatabaseUrlPath(array $url, array $params) : array { $params['dbname'] = $url['path']; return $params; } private static function parseSqliteDatabaseUrlPath(array $url, array $params) : array { if ($url['path'] === ':memory:') { $params['memory'] = \true; return $params; } $params['path'] = $url['path']; return $params; } private static function parseDatabaseUrlScheme($scheme, array $params) : array { if ($scheme !== null) { unset($params['driverClass']); $driver = str_replace('-', '_', $scheme); $params['driver'] = self::$driverSchemeAliases[$driver] ?? $driver; return $params; } if (!isset($params['driverClass']) && !isset($params['driver'])) { throw Exception::driverRequired($params['url']); } return $params; } }
1
  <?php
2
+ namespace MailPoetVendor\Doctrine\DBAL; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\Common\EventManager; use MailPoetVendor\Doctrine\DBAL\Driver\DrizzlePDOMySql; use MailPoetVendor\Doctrine\DBAL\Driver\IBMDB2; use MailPoetVendor\Doctrine\DBAL\Driver\Mysqli; use MailPoetVendor\Doctrine\DBAL\Driver\OCI8; use MailPoetVendor\Doctrine\DBAL\Driver\PDO; use MailPoetVendor\Doctrine\DBAL\Driver\SQLAnywhere; use MailPoetVendor\Doctrine\DBAL\Driver\SQLSrv; use function array_keys; use function array_merge; use function class_implements; use function in_array; use function is_string; use function is_subclass_of; use function parse_str; use function parse_url; use function preg_replace; use function rawurldecode; use function str_replace; use function strpos; use function substr; final class DriverManager { private const DRIVER_MAP = ['pdo_mysql' => PDO\MySQL\Driver::class, 'pdo_sqlite' => PDO\SQLite\Driver::class, 'pdo_pgsql' => PDO\PgSQL\Driver::class, 'pdo_oci' => PDO\OCI\Driver::class, 'oci8' => OCI8\Driver::class, 'ibm_db2' => IBMDB2\Driver::class, 'pdo_sqlsrv' => PDO\SQLSrv\Driver::class, 'mysqli' => Mysqli\Driver::class, 'drizzle_pdo_mysql' => DrizzlePDOMySql\Driver::class, 'sqlanywhere' => SQLAnywhere\Driver::class, 'sqlsrv' => SQLSrv\Driver::class]; private static $driverSchemeAliases = [ 'db2' => 'ibm_db2', 'mssql' => 'pdo_sqlsrv', 'mysql' => 'pdo_mysql', 'mysql2' => 'pdo_mysql', 'postgres' => 'pdo_pgsql', 'postgresql' => 'pdo_pgsql', 'pgsql' => 'pdo_pgsql', 'sqlite' => 'pdo_sqlite', 'sqlite3' => 'pdo_sqlite', ]; private function __construct() { } public static function getConnection(array $params, ?Configuration $config = null, ?EventManager $eventManager = null) : Connection { if (!$config) { $config = new Configuration(); } if (!$eventManager) { $eventManager = new EventManager(); } $params = self::parseDatabaseUrl($params); if (isset($params['master'])) { $params['master'] = self::parseDatabaseUrl($params['master']); } if (isset($params['slaves'])) { foreach ($params['slaves'] as $key => $slaveParams) { $params['slaves'][$key] = self::parseDatabaseUrl($slaveParams); } } if (isset($params['primary'])) { $params['primary'] = self::parseDatabaseUrl($params['primary']); } if (isset($params['replica'])) { foreach ($params['replica'] as $key => $replicaParams) { $params['replica'][$key] = self::parseDatabaseUrl($replicaParams); } } if (isset($params['global'])) { $params['global'] = self::parseDatabaseUrl($params['global']); } if (isset($params['shards'])) { foreach ($params['shards'] as $key => $shardParams) { $params['shards'][$key] = self::parseDatabaseUrl($shardParams); } } if (isset($params['pdo']) && !$params['pdo'] instanceof \PDO) { throw Exception::invalidPdoInstance(); } if (isset($params['pdo'])) { $params['pdo']->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); $params['driver'] = 'pdo_' . $params['pdo']->getAttribute(\PDO::ATTR_DRIVER_NAME); } $driver = self::createDriver($params); $wrapperClass = Connection::class; if (isset($params['wrapperClass'])) { if (!is_subclass_of($params['wrapperClass'], $wrapperClass)) { throw Exception::invalidWrapperClass($params['wrapperClass']); } $wrapperClass = $params['wrapperClass']; } return new $wrapperClass($params, $driver, $config, $eventManager); } public static function getAvailableDrivers() : array { return array_keys(self::DRIVER_MAP); } private static function createDriver(array $params) : Driver { if (isset($params['driverClass'])) { $interfaces = class_implements($params['driverClass'], \true); if ($interfaces === \false || !in_array(Driver::class, $interfaces)) { throw Exception::invalidDriverClass($params['driverClass']); } return new $params['driverClass'](); } if (isset($params['driver'])) { if (!isset(self::DRIVER_MAP[$params['driver']])) { throw Exception::unknownDriver($params['driver'], array_keys(self::DRIVER_MAP)); } $class = self::DRIVER_MAP[$params['driver']]; return new $class(); } throw Exception::driverRequired(); } private static function normalizeDatabaseUrlPath(string $urlPath) : string { return substr($urlPath, 1); } private static function parseDatabaseUrl(array $params) : array { if (!isset($params['url'])) { return $params; } $url = preg_replace('#^((?:pdo_)?sqlite3?):///#', '$1://localhost/', $params['url']); $url = parse_url($url); if ($url === \false) { throw new Exception('Malformed parameter "url".'); } foreach ($url as $param => $value) { if (!is_string($value)) { continue; } $url[$param] = rawurldecode($value); } unset($params['pdo']); $params = self::parseDatabaseUrlScheme($url['scheme'] ?? null, $params); if (isset($url['host'])) { $params['host'] = $url['host']; } if (isset($url['port'])) { $params['port'] = $url['port']; } if (isset($url['user'])) { $params['user'] = $url['user']; } if (isset($url['pass'])) { $params['password'] = $url['pass']; } $params = self::parseDatabaseUrlPath($url, $params); $params = self::parseDatabaseUrlQuery($url, $params); return $params; } private static function parseDatabaseUrlPath(array $url, array $params) : array { if (!isset($url['path'])) { return $params; } $url['path'] = self::normalizeDatabaseUrlPath($url['path']); if (!isset($params['driver'])) { return self::parseRegularDatabaseUrlPath($url, $params); } if (strpos($params['driver'], 'sqlite') !== \false) { return self::parseSqliteDatabaseUrlPath($url, $params); } return self::parseRegularDatabaseUrlPath($url, $params); } private static function parseDatabaseUrlQuery(array $url, array $params) : array { if (!isset($url['query'])) { return $params; } $query = []; parse_str($url['query'], $query); return array_merge($params, $query); } private static function parseRegularDatabaseUrlPath(array $url, array $params) : array { $params['dbname'] = $url['path']; return $params; } private static function parseSqliteDatabaseUrlPath(array $url, array $params) : array { if ($url['path'] === ':memory:') { $params['memory'] = \true; return $params; } $params['path'] = $url['path']; return $params; } private static function parseDatabaseUrlScheme($scheme, array $params) : array { if ($scheme !== null) { unset($params['driverClass']); $driver = str_replace('-', '_', $scheme); $params['driver'] = self::$driverSchemeAliases[$driver] ?? $driver; return $params; } if (!isset($params['driverClass']) && !isset($params['driver'])) { throw Exception::driverRequired($params['url']); } return $params; } }
vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- namespace MailPoetVendor\Doctrine\DBAL\Platforms; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\Common\EventManager; use MailPoetVendor\Doctrine\DBAL\Event\SchemaAlterTableAddColumnEventArgs; use MailPoetVendor\Doctrine\DBAL\Event\SchemaAlterTableChangeColumnEventArgs; use MailPoetVendor\Doctrine\DBAL\Event\SchemaAlterTableEventArgs; use MailPoetVendor\Doctrine\DBAL\Event\SchemaAlterTableRemoveColumnEventArgs; use MailPoetVendor\Doctrine\DBAL\Event\SchemaAlterTableRenameColumnEventArgs; use MailPoetVendor\Doctrine\DBAL\Event\SchemaCreateTableColumnEventArgs; use MailPoetVendor\Doctrine\DBAL\Event\SchemaCreateTableEventArgs; use MailPoetVendor\Doctrine\DBAL\Event\SchemaDropTableEventArgs; use MailPoetVendor\Doctrine\DBAL\Events; use MailPoetVendor\Doctrine\DBAL\Exception; use MailPoetVendor\Doctrine\DBAL\Platforms\Keywords\KeywordList; use MailPoetVendor\Doctrine\DBAL\Schema\Column; use MailPoetVendor\Doctrine\DBAL\Schema\ColumnDiff; use MailPoetVendor\Doctrine\DBAL\Schema\Constraint; use MailPoetVendor\Doctrine\DBAL\Schema\ForeignKeyConstraint; use MailPoetVendor\Doctrine\DBAL\Schema\Identifier; use MailPoetVendor\Doctrine\DBAL\Schema\Index; use MailPoetVendor\Doctrine\DBAL\Schema\Sequence; use MailPoetVendor\Doctrine\DBAL\Schema\Table; use MailPoetVendor\Doctrine\DBAL\Schema\TableDiff; use MailPoetVendor\Doctrine\DBAL\TransactionIsolationLevel; use MailPoetVendor\Doctrine\DBAL\Types; use MailPoetVendor\Doctrine\DBAL\Types\Type; use MailPoetVendor\Doctrine\Deprecations\Deprecation; use InvalidArgumentException; use UnexpectedValueException; use function addcslashes; use function array_map; use function array_merge; use function array_unique; use function array_values; use function assert; use function count; use function explode; use function func_get_arg; use function func_get_args; use function func_num_args; use function implode; use function in_array; use function is_array; use function is_bool; use function is_int; use function is_string; use function preg_quote; use function preg_replace; use function sprintf; use function str_replace; use function strlen; use function strpos; use function strtolower; use function strtoupper; abstract class AbstractPlatform { public const CREATE_INDEXES = 1; public const CREATE_FOREIGNKEYS = 2; public const DATE_INTERVAL_UNIT_SECOND = DateIntervalUnit::SECOND; public const DATE_INTERVAL_UNIT_MINUTE = DateIntervalUnit::MINUTE; public const DATE_INTERVAL_UNIT_HOUR = DateIntervalUnit::HOUR; public const DATE_INTERVAL_UNIT_DAY = DateIntervalUnit::DAY; public const DATE_INTERVAL_UNIT_WEEK = DateIntervalUnit::WEEK; public const DATE_INTERVAL_UNIT_MONTH = DateIntervalUnit::MONTH; public const DATE_INTERVAL_UNIT_QUARTER = DateIntervalUnit::QUARTER; public const DATE_INTERVAL_UNIT_YEAR = DateIntervalUnit::YEAR; public const TRIM_UNSPECIFIED = TrimMode::UNSPECIFIED; public const TRIM_LEADING = TrimMode::LEADING; public const TRIM_TRAILING = TrimMode::TRAILING; public const TRIM_BOTH = TrimMode::BOTH; protected $doctrineTypeMapping; protected $doctrineTypeComments; protected $_eventManager; protected $_keywords; public function __construct() { } public function setEventManager(EventManager $eventManager) { $this->_eventManager = $eventManager; } public function getEventManager() { return $this->_eventManager; } public abstract function getBooleanTypeDeclarationSQL(array $column); public abstract function getIntegerTypeDeclarationSQL(array $column); public abstract function getBigIntTypeDeclarationSQL(array $column); public abstract function getSmallIntTypeDeclarationSQL(array $column); protected abstract function _getCommonIntegerTypeDeclarationSQL(array $column); protected abstract function initializeDoctrineTypeMappings(); private function initializeAllDoctrineTypeMappings() { $this->initializeDoctrineTypeMappings(); foreach (Type::getTypesMap() as $typeName => $className) { foreach (Type::getType($typeName)->getMappedDatabaseTypes($this) as $dbType) { $this->doctrineTypeMapping[$dbType] = $typeName; } } } public function getAsciiStringTypeDeclarationSQL(array $column) : string { return $this->getVarcharTypeDeclarationSQL($column); } public function getVarcharTypeDeclarationSQL(array $column) { if (!isset($column['length'])) { $column['length'] = $this->getVarcharDefaultLength(); } $fixed = $column['fixed'] ?? \false; $maxLength = $fixed ? $this->getCharMaxLength() : $this->getVarcharMaxLength(); if ($column['length'] > $maxLength) { return $this->getClobTypeDeclarationSQL($column); } return $this->getVarcharTypeDeclarationSQLSnippet($column['length'], $fixed); } public function getBinaryTypeDeclarationSQL(array $column) { if (!isset($column['length'])) { $column['length'] = $this->getBinaryDefaultLength(); } $fixed = $column['fixed'] ?? \false; $maxLength = $this->getBinaryMaxLength(); if ($column['length'] > $maxLength) { if ($maxLength > 0) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/issues/3187', 'Binary column length %d is greater than supported by the platform (%d).' . ' Reduce the column length or use a BLOB column instead.', $column['length'], $maxLength); } return $this->getBlobTypeDeclarationSQL($column); } return $this->getBinaryTypeDeclarationSQLSnippet($column['length'], $fixed); } public function getGuidTypeDeclarationSQL(array $column) { $column['length'] = 36; $column['fixed'] = \true; return $this->getVarcharTypeDeclarationSQL($column); } public function getJsonTypeDeclarationSQL(array $column) { return $this->getClobTypeDeclarationSQL($column); } protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed) { throw Exception::notSupported('VARCHARs not supported by Platform.'); } protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed) { throw Exception::notSupported('BINARY/VARBINARY column types are not supported by this platform.'); } public abstract function getClobTypeDeclarationSQL(array $column); public abstract function getBlobTypeDeclarationSQL(array $column); public abstract function getName(); public function registerDoctrineTypeMapping($dbType, $doctrineType) { if ($this->doctrineTypeMapping === null) { $this->initializeAllDoctrineTypeMappings(); } if (!Types\Type::hasType($doctrineType)) { throw Exception::typeNotFound($doctrineType); } $dbType = strtolower($dbType); $this->doctrineTypeMapping[$dbType] = $doctrineType; $doctrineType = Type::getType($doctrineType); if (!$doctrineType->requiresSQLCommentHint($this)) { return; } $this->markDoctrineTypeCommented($doctrineType); } public function getDoctrineTypeMapping($dbType) { if ($this->doctrineTypeMapping === null) { $this->initializeAllDoctrineTypeMappings(); } $dbType = strtolower($dbType); if (!isset($this->doctrineTypeMapping[$dbType])) { throw new Exception('Unknown database type ' . $dbType . ' requested, ' . static::class . ' may not support it.'); } return $this->doctrineTypeMapping[$dbType]; } public function hasDoctrineTypeMappingFor($dbType) { if ($this->doctrineTypeMapping === null) { $this->initializeAllDoctrineTypeMappings(); } $dbType = strtolower($dbType); return isset($this->doctrineTypeMapping[$dbType]); } protected function initializeCommentedDoctrineTypes() { $this->doctrineTypeComments = []; foreach (Type::getTypesMap() as $typeName => $className) { $type = Type::getType($typeName); if (!$type->requiresSQLCommentHint($this)) { continue; } $this->doctrineTypeComments[] = $typeName; } } public function isCommentedDoctrineType(Type $doctrineType) { if ($this->doctrineTypeComments === null) { $this->initializeCommentedDoctrineTypes(); } assert(is_array($this->doctrineTypeComments)); return in_array($doctrineType->getName(), $this->doctrineTypeComments); } public function markDoctrineTypeCommented($doctrineType) { if ($this->doctrineTypeComments === null) { $this->initializeCommentedDoctrineTypes(); } assert(is_array($this->doctrineTypeComments)); $this->doctrineTypeComments[] = $doctrineType instanceof Type ? $doctrineType->getName() : $doctrineType; } public function getDoctrineTypeComment(Type $doctrineType) { return '(DC2Type:' . $doctrineType->getName() . ')'; } protected function getColumnComment(Column $column) { $comment = $column->getComment(); if ($this->isCommentedDoctrineType($column->getType())) { $comment .= $this->getDoctrineTypeComment($column->getType()); } return $comment; } public function getIdentifierQuoteCharacter() { return '"'; } public function getSqlCommentStartString() { return '--'; } public function getSqlCommentEndString() { return "\n"; } public function getCharMaxLength() : int { return $this->getVarcharMaxLength(); } public function getVarcharMaxLength() { return 4000; } public function getVarcharDefaultLength() { return 255; } public function getBinaryMaxLength() { return 4000; } public function getBinaryDefaultLength() { return 255; } public function getWildcards() { return ['%', '_']; } public function getRegexpExpression() { throw Exception::notSupported(__METHOD__); } public function getGuidExpression() { throw Exception::notSupported(__METHOD__); } public function getAvgExpression($column) { return 'AVG(' . $column . ')'; } public function getCountExpression($column) { return 'COUNT(' . $column . ')'; } public function getMaxExpression($column) { return 'MAX(' . $column . ')'; } public function getMinExpression($column) { return 'MIN(' . $column . ')'; } public function getSumExpression($column) { return 'SUM(' . $column . ')'; } public function getMd5Expression($column) { return 'MD5(' . $column . ')'; } public function getLengthExpression($column) { return 'LENGTH(' . $column . ')'; } public function getSqrtExpression($column) { return 'SQRT(' . $column . ')'; } public function getRoundExpression($column, $decimals = 0) { return 'ROUND(' . $column . ', ' . $decimals . ')'; } public function getModExpression($expression1, $expression2) { return 'MOD(' . $expression1 . ', ' . $expression2 . ')'; } public function getTrimExpression($str, $mode = TrimMode::UNSPECIFIED, $char = \false) { $expression = ''; switch ($mode) { case TrimMode::LEADING: $expression = 'LEADING '; break; case TrimMode::TRAILING: $expression = 'TRAILING '; break; case TrimMode::BOTH: $expression = 'BOTH '; break; } if ($char !== \false) { $expression .= $char . ' '; } if ($mode || $char !== \false) { $expression .= 'FROM '; } return 'TRIM(' . $expression . $str . ')'; } public function getRtrimExpression($str) { return 'RTRIM(' . $str . ')'; } public function getLtrimExpression($str) { return 'LTRIM(' . $str . ')'; } public function getUpperExpression($str) { return 'UPPER(' . $str . ')'; } public function getLowerExpression($str) { return 'LOWER(' . $str . ')'; } public function getLocateExpression($str, $substr, $startPos = \false) { throw Exception::notSupported(__METHOD__); } public function getNowExpression() { return 'NOW()'; } public function getSubstringExpression($string, $start, $length = null) { if ($length === null) { return 'SUBSTRING(' . $string . ' FROM ' . $start . ')'; } return 'SUBSTRING(' . $string . ' FROM ' . $start . ' FOR ' . $length . ')'; } public function getConcatExpression() { return implode(' || ', func_get_args()); } public function getNotExpression($expression) { return 'NOT(' . $expression . ')'; } public function getIsNullExpression($expression) { return $expression . ' IS NULL'; } public function getIsNotNullExpression($expression) { return $expression . ' IS NOT NULL'; } public function getBetweenExpression($expression, $value1, $value2) { return $expression . ' BETWEEN ' . $value1 . ' AND ' . $value2; } public function getAcosExpression($value) { return 'ACOS(' . $value . ')'; } public function getSinExpression($value) { return 'SIN(' . $value . ')'; } public function getPiExpression() { return 'PI()'; } public function getCosExpression($value) { return 'COS(' . $value . ')'; } public function getDateDiffExpression($date1, $date2) { throw Exception::notSupported(__METHOD__); } public function getDateAddSecondsExpression($date, $seconds) { return $this->getDateArithmeticIntervalExpression($date, '+', $seconds, DateIntervalUnit::SECOND); } public function getDateSubSecondsExpression($date, $seconds) { return $this->getDateArithmeticIntervalExpression($date, '-', $seconds, DateIntervalUnit::SECOND); } public function getDateAddMinutesExpression($date, $minutes) { return $this->getDateArithmeticIntervalExpression($date, '+', $minutes, DateIntervalUnit::MINUTE); } public function getDateSubMinutesExpression($date, $minutes) { return $this->getDateArithmeticIntervalExpression($date, '-', $minutes, DateIntervalUnit::MINUTE); } public function getDateAddHourExpression($date, $hours) { return $this->getDateArithmeticIntervalExpression($date, '+', $hours, DateIntervalUnit::HOUR); } public function getDateSubHourExpression($date, $hours) { return $this->getDateArithmeticIntervalExpression($date, '-', $hours, DateIntervalUnit::HOUR); } public function getDateAddDaysExpression($date, $days) { return $this->getDateArithmeticIntervalExpression($date, '+', $days, DateIntervalUnit::DAY); } public function getDateSubDaysExpression($date, $days) { return $this->getDateArithmeticIntervalExpression($date, '-', $days, DateIntervalUnit::DAY); } public function getDateAddWeeksExpression($date, $weeks) { return $this->getDateArithmeticIntervalExpression($date, '+', $weeks, DateIntervalUnit::WEEK); } public function getDateSubWeeksExpression($date, $weeks) { return $this->getDateArithmeticIntervalExpression($date, '-', $weeks, DateIntervalUnit::WEEK); } public function getDateAddMonthExpression($date, $months) { return $this->getDateArithmeticIntervalExpression($date, '+', $months, DateIntervalUnit::MONTH); } public function getDateSubMonthExpression($date, $months) { return $this->getDateArithmeticIntervalExpression($date, '-', $months, DateIntervalUnit::MONTH); } public function getDateAddQuartersExpression($date, $quarters) { return $this->getDateArithmeticIntervalExpression($date, '+', $quarters, DateIntervalUnit::QUARTER); } public function getDateSubQuartersExpression($date, $quarters) { return $this->getDateArithmeticIntervalExpression($date, '-', $quarters, DateIntervalUnit::QUARTER); } public function getDateAddYearsExpression($date, $years) { return $this->getDateArithmeticIntervalExpression($date, '+', $years, DateIntervalUnit::YEAR); } public function getDateSubYearsExpression($date, $years) { return $this->getDateArithmeticIntervalExpression($date, '-', $years, DateIntervalUnit::YEAR); } protected function getDateArithmeticIntervalExpression($date, $operator, $interval, $unit) { throw Exception::notSupported(__METHOD__); } public function getBitAndComparisonExpression($value1, $value2) { return '(' . $value1 . ' & ' . $value2 . ')'; } public function getBitOrComparisonExpression($value1, $value2) { return '(' . $value1 . ' | ' . $value2 . ')'; } public function getForUpdateSQL() { return 'FOR UPDATE'; } public function appendLockHint($fromClause, $lockMode) { return $fromClause; } public function getReadLockSQL() { return $this->getForUpdateSQL(); } public function getWriteLockSQL() { return $this->getForUpdateSQL(); } public function getDropDatabaseSQL($name) { return 'DROP DATABASE ' . $name; } public function getDropTableSQL($table) { $tableArg = $table; if ($table instanceof Table) { $table = $table->getQuotedName($this); } if (!is_string($table)) { throw new InvalidArgumentException(__METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.'); } if ($this->_eventManager !== null && $this->_eventManager->hasListeners(Events::onSchemaDropTable)) { $eventArgs = new SchemaDropTableEventArgs($tableArg, $this); $this->_eventManager->dispatchEvent(Events::onSchemaDropTable, $eventArgs); if ($eventArgs->isDefaultPrevented()) { $sql = $eventArgs->getSql(); if ($sql === null) { throw new UnexpectedValueException('Default implementation of DROP TABLE was overridden with NULL'); } return $sql; } } return 'DROP TABLE ' . $table; } public function getDropTemporaryTableSQL($table) { return $this->getDropTableSQL($table); } public function getDropIndexSQL($index, $table = null) { if ($index instanceof Index) { $index = $index->getQuotedName($this); } elseif (!is_string($index)) { throw new InvalidArgumentException(__METHOD__ . '() expects $index parameter to be string or ' . Index::class . '.'); } return 'DROP INDEX ' . $index; } public function getDropConstraintSQL($constraint, $table) { if (!$constraint instanceof Constraint) { $constraint = new Identifier($constraint); } if (!$table instanceof Table) { $table = new Identifier($table); } $constraint = $constraint->getQuotedName($this); $table = $table->getQuotedName($this); return 'ALTER TABLE ' . $table . ' DROP CONSTRAINT ' . $constraint; } public function getDropForeignKeySQL($foreignKey, $table) { if (!$foreignKey instanceof ForeignKeyConstraint) { $foreignKey = new Identifier($foreignKey); } if (!$table instanceof Table) { $table = new Identifier($table); } $foreignKey = $foreignKey->getQuotedName($this); $table = $table->getQuotedName($this); return 'ALTER TABLE ' . $table . ' DROP FOREIGN KEY ' . $foreignKey; } public function getCreateTableSQL(Table $table, $createFlags = self::CREATE_INDEXES) { if (!is_int($createFlags)) { throw new InvalidArgumentException('Second argument of AbstractPlatform::getCreateTableSQL() has to be integer.'); } if (count($table->getColumns()) === 0) { throw Exception::noColumnsSpecifiedForTable($table->getName()); } $tableName = $table->getQuotedName($this); $options = $table->getOptions(); $options['uniqueConstraints'] = []; $options['indexes'] = []; $options['primary'] = []; if (($createFlags & self::CREATE_INDEXES) > 0) { foreach ($table->getIndexes() as $index) { if ($index->isPrimary()) { $options['primary'] = $index->getQuotedColumns($this); $options['primary_index'] = $index; } else { $options['indexes'][$index->getQuotedName($this)] = $index; } } } $columnSql = []; $columns = []; foreach ($table->getColumns() as $column) { if ($this->_eventManager !== null && $this->_eventManager->hasListeners(Events::onSchemaCreateTableColumn)) { $eventArgs = new SchemaCreateTableColumnEventArgs($column, $table, $this); $this->_eventManager->dispatchEvent(Events::onSchemaCreateTableColumn, $eventArgs); $columnSql = array_merge($columnSql, $eventArgs->getSql()); if ($eventArgs->isDefaultPrevented()) { continue; } } $name = $column->getQuotedName($this); $columnData = array_merge($column->toArray(), ['name' => $name, 'version' => $column->hasPlatformOption('version') ? $column->getPlatformOption('version') : \false, 'comment' => $this->getColumnComment($column)]); if ($columnData['type'] instanceof Types\StringType && $columnData['length'] === null) { $columnData['length'] = 255; } if (in_array($column->getName(), $options['primary'])) { $columnData['primary'] = \true; } $columns[$name] = $columnData; } if (($createFlags & self::CREATE_FOREIGNKEYS) > 0) { $options['foreignKeys'] = []; foreach ($table->getForeignKeys() as $fkConstraint) { $options['foreignKeys'][] = $fkConstraint; } } if ($this->_eventManager !== null && $this->_eventManager->hasListeners(Events::onSchemaCreateTable)) { $eventArgs = new SchemaCreateTableEventArgs($table, $columns, $options, $this); $this->_eventManager->dispatchEvent(Events::onSchemaCreateTable, $eventArgs); if ($eventArgs->isDefaultPrevented()) { return array_merge($eventArgs->getSql(), $columnSql); } } $sql = $this->_getCreateTableSQL($tableName, $columns, $options); if ($this->supportsCommentOnStatement()) { if ($table->hasOption('comment')) { $sql[] = $this->getCommentOnTableSQL($tableName, $table->getOption('comment')); } foreach ($table->getColumns() as $column) { $comment = $this->getColumnComment($column); if ($comment === null || $comment === '') { continue; } $sql[] = $this->getCommentOnColumnSQL($tableName, $column->getQuotedName($this), $comment); } } return array_merge($sql, $columnSql); } protected function getCommentOnTableSQL(string $tableName, ?string $comment) : string { $tableName = new Identifier($tableName); return sprintf('COMMENT ON TABLE %s IS %s', $tableName->getQuotedName($this), $this->quoteStringLiteral((string) $comment)); } public function getCommentOnColumnSQL($tableName, $columnName, $comment) { $tableName = new Identifier($tableName); $columnName = new Identifier($columnName); return sprintf('COMMENT ON COLUMN %s.%s IS %s', $tableName->getQuotedName($this), $columnName->getQuotedName($this), $this->quoteStringLiteral((string) $comment)); } public function getInlineColumnCommentSQL($comment) { if (!$this->supportsInlineColumnComments()) { throw Exception::notSupported(__METHOD__); } return 'COMMENT ' . $this->quoteStringLiteral($comment); } protected function _getCreateTableSQL($name, array $columns, array $options = []) { $columnListSql = $this->getColumnDeclarationListSQL($columns); if (isset($options['uniqueConstraints']) && !empty($options['uniqueConstraints'])) { foreach ($options['uniqueConstraints'] as $index => $definition) { $columnListSql .= ', ' . $this->getUniqueConstraintDeclarationSQL($index, $definition); } } if (isset($options['primary']) && !empty($options['primary'])) { $columnListSql .= ', PRIMARY KEY(' . implode(', ', array_unique(array_values($options['primary']))) . ')'; } if (isset($options['indexes']) && !empty($options['indexes'])) { foreach ($options['indexes'] as $index => $definition) { $columnListSql .= ', ' . $this->getIndexDeclarationSQL($index, $definition); } } $query = 'CREATE TABLE ' . $name . ' (' . $columnListSql; $check = $this->getCheckDeclarationSQL($columns); if (!empty($check)) { $query .= ', ' . $check; } $query .= ')'; $sql = [$query]; if (isset($options['foreignKeys'])) { foreach ((array) $options['foreignKeys'] as $definition) { $sql[] = $this->getCreateForeignKeySQL($definition, $name); } } return $sql; } public function getCreateTemporaryTableSnippetSQL() { return 'CREATE TEMPORARY TABLE'; } public function getCreateSequenceSQL(Sequence $sequence) { throw Exception::notSupported(__METHOD__); } public function getAlterSequenceSQL(Sequence $sequence) { throw Exception::notSupported(__METHOD__); } public function getCreateConstraintSQL(Constraint $constraint, $table) { if ($table instanceof Table) { $table = $table->getQuotedName($this); } $query = 'ALTER TABLE ' . $table . ' ADD CONSTRAINT ' . $constraint->getQuotedName($this); $columnList = '(' . implode(', ', $constraint->getQuotedColumns($this)) . ')'; $referencesClause = ''; if ($constraint instanceof Index) { if ($constraint->isPrimary()) { $query .= ' PRIMARY KEY'; } elseif ($constraint->isUnique()) { $query .= ' UNIQUE'; } else { throw new InvalidArgumentException('Can only create primary or unique constraints, no common indexes with getCreateConstraintSQL().'); } } elseif ($constraint instanceof ForeignKeyConstraint) { $query .= ' FOREIGN KEY'; $referencesClause = ' REFERENCES ' . $constraint->getQuotedForeignTableName($this) . ' (' . implode(', ', $constraint->getQuotedForeignColumns($this)) . ')'; } $query .= ' ' . $columnList . $referencesClause; return $query; } public function getCreateIndexSQL(Index $index, $table) { if ($table instanceof Table) { $table = $table->getQuotedName($this); } $name = $index->getQuotedName($this); $columns = $index->getColumns(); if (count($columns) === 0) { throw new InvalidArgumentException("Incomplete definition. 'columns' required."); } if ($index->isPrimary()) { return $this->getCreatePrimaryKeySQL($index, $table); } $query = 'CREATE ' . $this->getCreateIndexSQLFlags($index) . 'INDEX ' . $name . ' ON ' . $table; $query .= ' (' . $this->getIndexFieldDeclarationListSQL($index) . ')' . $this->getPartialIndexSQL($index); return $query; } protected function getPartialIndexSQL(Index $index) { if ($this->supportsPartialIndexes() && $index->hasOption('where')) { return ' WHERE ' . $index->getOption('where'); } return ''; } protected function getCreateIndexSQLFlags(Index $index) { return $index->isUnique() ? 'UNIQUE ' : ''; } public function getCreatePrimaryKeySQL(Index $index, $table) { if ($table instanceof Table) { $table = $table->getQuotedName($this); } return 'ALTER TABLE ' . $table . ' ADD PRIMARY KEY (' . $this->getIndexFieldDeclarationListSQL($index) . ')'; } public function getCreateSchemaSQL($schemaName) { throw Exception::notSupported(__METHOD__); } public function quoteIdentifier($str) { if (strpos($str, '.') !== \false) { $parts = array_map([$this, 'quoteSingleIdentifier'], explode('.', $str)); return implode('.', $parts); } return $this->quoteSingleIdentifier($str); } public function quoteSingleIdentifier($str) { $c = $this->getIdentifierQuoteCharacter(); return $c . str_replace($c, $c . $c, $str) . $c; } public function getCreateForeignKeySQL(ForeignKeyConstraint $foreignKey, $table) { if ($table instanceof Table) { $table = $table->getQuotedName($this); } return 'ALTER TABLE ' . $table . ' ADD ' . $this->getForeignKeyDeclarationSQL($foreignKey); } public function getAlterTableSQL(TableDiff $diff) { throw Exception::notSupported(__METHOD__); } protected function onSchemaAlterTableAddColumn(Column $column, TableDiff $diff, &$columnSql) { if ($this->_eventManager === null) { return \false; } if (!$this->_eventManager->hasListeners(Events::onSchemaAlterTableAddColumn)) { return \false; } $eventArgs = new SchemaAlterTableAddColumnEventArgs($column, $diff, $this); $this->_eventManager->dispatchEvent(Events::onSchemaAlterTableAddColumn, $eventArgs); $columnSql = array_merge($columnSql, $eventArgs->getSql()); return $eventArgs->isDefaultPrevented(); } protected function onSchemaAlterTableRemoveColumn(Column $column, TableDiff $diff, &$columnSql) { if ($this->_eventManager === null) { return \false; } if (!$this->_eventManager->hasListeners(Events::onSchemaAlterTableRemoveColumn)) { return \false; } $eventArgs = new SchemaAlterTableRemoveColumnEventArgs($column, $diff, $this); $this->_eventManager->dispatchEvent(Events::onSchemaAlterTableRemoveColumn, $eventArgs); $columnSql = array_merge($columnSql, $eventArgs->getSql()); return $eventArgs->isDefaultPrevented(); } protected function onSchemaAlterTableChangeColumn(ColumnDiff $columnDiff, TableDiff $diff, &$columnSql) { if ($this->_eventManager === null) { return \false; } if (!$this->_eventManager->hasListeners(Events::onSchemaAlterTableChangeColumn)) { return \false; } $eventArgs = new SchemaAlterTableChangeColumnEventArgs($columnDiff, $diff, $this); $this->_eventManager->dispatchEvent(Events::onSchemaAlterTableChangeColumn, $eventArgs); $columnSql = array_merge($columnSql, $eventArgs->getSql()); return $eventArgs->isDefaultPrevented(); } protected function onSchemaAlterTableRenameColumn($oldColumnName, Column $column, TableDiff $diff, &$columnSql) { if ($this->_eventManager === null) { return \false; } if (!$this->_eventManager->hasListeners(Events::onSchemaAlterTableRenameColumn)) { return \false; } $eventArgs = new SchemaAlterTableRenameColumnEventArgs($oldColumnName, $column, $diff, $this); $this->_eventManager->dispatchEvent(Events::onSchemaAlterTableRenameColumn, $eventArgs); $columnSql = array_merge($columnSql, $eventArgs->getSql()); return $eventArgs->isDefaultPrevented(); } protected function onSchemaAlterTable(TableDiff $diff, &$sql) { if ($this->_eventManager === null) { return \false; } if (!$this->_eventManager->hasListeners(Events::onSchemaAlterTable)) { return \false; } $eventArgs = new SchemaAlterTableEventArgs($diff, $this); $this->_eventManager->dispatchEvent(Events::onSchemaAlterTable, $eventArgs); $sql = array_merge($sql, $eventArgs->getSql()); return $eventArgs->isDefaultPrevented(); } protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff) { $tableName = $diff->getName($this)->getQuotedName($this); $sql = []; if ($this->supportsForeignKeyConstraints()) { foreach ($diff->removedForeignKeys as $foreignKey) { $sql[] = $this->getDropForeignKeySQL($foreignKey, $tableName); } foreach ($diff->changedForeignKeys as $foreignKey) { $sql[] = $this->getDropForeignKeySQL($foreignKey, $tableName); } } foreach ($diff->removedIndexes as $index) { $sql[] = $this->getDropIndexSQL($index, $tableName); } foreach ($diff->changedIndexes as $index) { $sql[] = $this->getDropIndexSQL($index, $tableName); } return $sql; } protected function getPostAlterTableIndexForeignKeySQL(TableDiff $diff) { $sql = []; $newName = $diff->getNewName(); if ($newName !== \false) { $tableName = $newName->getQuotedName($this); } else { $tableName = $diff->getName($this)->getQuotedName($this); } if ($this->supportsForeignKeyConstraints()) { foreach ($diff->addedForeignKeys as $foreignKey) { $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableName); } foreach ($diff->changedForeignKeys as $foreignKey) { $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableName); } } foreach ($diff->addedIndexes as $index) { $sql[] = $this->getCreateIndexSQL($index, $tableName); } foreach ($diff->changedIndexes as $index) { $sql[] = $this->getCreateIndexSQL($index, $tableName); } foreach ($diff->renamedIndexes as $oldIndexName => $index) { $oldIndexName = new Identifier($oldIndexName); $sql = array_merge($sql, $this->getRenameIndexSQL($oldIndexName->getQuotedName($this), $index, $tableName)); } return $sql; } protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName) { return [$this->getDropIndexSQL($oldIndexName, $tableName), $this->getCreateIndexSQL($index, $tableName)]; } protected function _getAlterTableIndexForeignKeySQL(TableDiff $diff) { return array_merge($this->getPreAlterTableIndexForeignKeySQL($diff), $this->getPostAlterTableIndexForeignKeySQL($diff)); } public function getColumnDeclarationListSQL(array $columns) { $declarations = []; foreach ($columns as $name => $column) { $declarations[] = $this->getColumnDeclarationSQL($name, $column); } return implode(', ', $declarations); } public function getColumnDeclarationSQL($name, array $column) { if (isset($column['columnDefinition'])) { $declaration = $this->getCustomTypeDeclarationSQL($column); } else { $default = $this->getDefaultValueDeclarationSQL($column); $charset = isset($column['charset']) && $column['charset'] ? ' ' . $this->getColumnCharsetDeclarationSQL($column['charset']) : ''; $collation = isset($column['collation']) && $column['collation'] ? ' ' . $this->getColumnCollationDeclarationSQL($column['collation']) : ''; $notnull = isset($column['notnull']) && $column['notnull'] ? ' NOT NULL' : ''; $unique = isset($column['unique']) && $column['unique'] ? ' ' . $this->getUniqueFieldDeclarationSQL() : ''; $check = isset($column['check']) && $column['check'] ? ' ' . $column['check'] : ''; $typeDecl = $column['type']->getSQLDeclaration($column, $this); $declaration = $typeDecl . $charset . $default . $notnull . $unique . $check . $collation; if ($this->supportsInlineColumnComments() && isset($column['comment']) && $column['comment'] !== '') { $declaration .= ' ' . $this->getInlineColumnCommentSQL($column['comment']); } } return $name . ' ' . $declaration; } public function getDecimalTypeDeclarationSQL(array $column) { $column['precision'] = !isset($column['precision']) || empty($column['precision']) ? 10 : $column['precision']; $column['scale'] = !isset($column['scale']) || empty($column['scale']) ? 0 : $column['scale']; return 'NUMERIC(' . $column['precision'] . ', ' . $column['scale'] . ')'; } public function getDefaultValueDeclarationSQL($column) { if (!isset($column['default'])) { return empty($column['notnull']) ? ' DEFAULT NULL' : ''; } $default = $column['default']; if (!isset($column['type'])) { return " DEFAULT '" . $default . "'"; } $type = $column['type']; if ($type instanceof Types\PhpIntegerMappingType) { return ' DEFAULT ' . $default; } if ($type instanceof Types\PhpDateTimeMappingType && $default === $this->getCurrentTimestampSQL()) { return ' DEFAULT ' . $this->getCurrentTimestampSQL(); } if ($type instanceof Types\TimeType && $default === $this->getCurrentTimeSQL()) { return ' DEFAULT ' . $this->getCurrentTimeSQL(); } if ($type instanceof Types\DateType && $default === $this->getCurrentDateSQL()) { return ' DEFAULT ' . $this->getCurrentDateSQL(); } if ($type instanceof Types\BooleanType) { return " DEFAULT '" . $this->convertBooleans($default) . "'"; } return ' DEFAULT ' . $this->quoteStringLiteral($default); } public function getCheckDeclarationSQL(array $definition) { $constraints = []; foreach ($definition as $column => $def) { if (is_string($def)) { $constraints[] = 'CHECK (' . $def . ')'; } else { if (isset($def['min'])) { $constraints[] = 'CHECK (' . $column . ' >= ' . $def['min'] . ')'; } if (isset($def['max'])) { $constraints[] = 'CHECK (' . $column . ' <= ' . $def['max'] . ')'; } } } return implode(', ', $constraints); } public function getUniqueConstraintDeclarationSQL($name, Index $index) { $columns = $index->getColumns(); $name = new Identifier($name); if (count($columns) === 0) { throw new InvalidArgumentException("Incomplete definition. 'columns' required."); } return 'CONSTRAINT ' . $name->getQuotedName($this) . ' UNIQUE (' . $this->getIndexFieldDeclarationListSQL($index) . ')' . $this->getPartialIndexSQL($index); } public function getIndexDeclarationSQL($name, Index $index) { $columns = $index->getColumns(); $name = new Identifier($name); if (count($columns) === 0) { throw new InvalidArgumentException("Incomplete definition. 'columns' required."); } return $this->getCreateIndexSQLFlags($index) . 'INDEX ' . $name->getQuotedName($this) . ' (' . $this->getIndexFieldDeclarationListSQL($index) . ')' . $this->getPartialIndexSQL($index); } public function getCustomTypeDeclarationSQL(array $column) { return $column['columnDefinition']; } public function getIndexFieldDeclarationListSQL($columnsOrIndex) : string { if ($columnsOrIndex instanceof Index) { return implode(', ', $columnsOrIndex->getQuotedColumns($this)); } if (!is_array($columnsOrIndex)) { throw new InvalidArgumentException('Fields argument should be an Index or array.'); } $ret = []; foreach ($columnsOrIndex as $column => $definition) { if (is_array($definition)) { $ret[] = $column; } else { $ret[] = $definition; } } return implode(', ', $ret); } public function getTemporaryTableSQL() { return 'TEMPORARY'; } public function getTemporaryTableName($tableName) { return $tableName; } public function getForeignKeyDeclarationSQL(ForeignKeyConstraint $foreignKey) { $sql = $this->getForeignKeyBaseDeclarationSQL($foreignKey); $sql .= $this->getAdvancedForeignKeyOptionsSQL($foreignKey); return $sql; } public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey) { $query = ''; if ($this->supportsForeignKeyOnUpdate() && $foreignKey->hasOption('onUpdate')) { $query .= ' ON UPDATE ' . $this->getForeignKeyReferentialActionSQL($foreignKey->getOption('onUpdate')); } if ($foreignKey->hasOption('onDelete')) { $query .= ' ON DELETE ' . $this->getForeignKeyReferentialActionSQL($foreignKey->getOption('onDelete')); } return $query; } public function getForeignKeyReferentialActionSQL($action) { $upper = strtoupper($action); switch ($upper) { case 'CASCADE': case 'SET NULL': case 'NO ACTION': case 'RESTRICT': case 'SET DEFAULT': return $upper; default: throw new InvalidArgumentException('Invalid foreign key action: ' . $upper); } } public function getForeignKeyBaseDeclarationSQL(ForeignKeyConstraint $foreignKey) { $sql = ''; if (strlen($foreignKey->getName())) { $sql .= 'CONSTRAINT ' . $foreignKey->getQuotedName($this) . ' '; } $sql .= 'FOREIGN KEY ('; if (count($foreignKey->getLocalColumns()) === 0) { throw new InvalidArgumentException("Incomplete definition. 'local' required."); } if (count($foreignKey->getForeignColumns()) === 0) { throw new InvalidArgumentException("Incomplete definition. 'foreign' required."); } if (strlen($foreignKey->getForeignTableName()) === 0) { throw new InvalidArgumentException("Incomplete definition. 'foreignTable' required."); } return $sql . implode(', ', $foreignKey->getQuotedLocalColumns($this)) . ') REFERENCES ' . $foreignKey->getQuotedForeignTableName($this) . ' (' . implode(', ', $foreignKey->getQuotedForeignColumns($this)) . ')'; } public function getUniqueFieldDeclarationSQL() { return 'UNIQUE'; } public function getColumnCharsetDeclarationSQL($charset) { return ''; } public function getColumnCollationDeclarationSQL($collation) { return $this->supportsColumnCollation() ? 'COLLATE ' . $collation : ''; } public function prefersSequences() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4229', 'AbstractPlatform::prefersSequences() is deprecated without replacement and removed in DBAL 3.0'); return \false; } public function prefersIdentityColumns() { return \false; } public function convertBooleans($item) { if (is_array($item)) { foreach ($item as $k => $value) { if (!is_bool($value)) { continue; } $item[$k] = (int) $value; } } elseif (is_bool($item)) { $item = (int) $item; } return $item; } public function convertFromBoolean($item) { return $item === null ? null : (bool) $item; } public function convertBooleansToDatabaseValue($item) { return $this->convertBooleans($item); } public function getCurrentDateSQL() { return 'CURRENT_DATE'; } public function getCurrentTimeSQL() { return 'CURRENT_TIME'; } public function getCurrentTimestampSQL() { return 'CURRENT_TIMESTAMP'; } protected function _getTransactionIsolationLevelSQL($level) { switch ($level) { case TransactionIsolationLevel::READ_UNCOMMITTED: return 'READ UNCOMMITTED'; case TransactionIsolationLevel::READ_COMMITTED: return 'READ COMMITTED'; case TransactionIsolationLevel::REPEATABLE_READ: return 'REPEATABLE READ'; case TransactionIsolationLevel::SERIALIZABLE: return 'SERIALIZABLE'; default: throw new InvalidArgumentException('Invalid isolation level:' . $level); } } public function getListDatabasesSQL() { throw Exception::notSupported(__METHOD__); } public function getListNamespacesSQL() { throw Exception::notSupported(__METHOD__); } public function getListSequencesSQL($database) { throw Exception::notSupported(__METHOD__); } public function getListTableConstraintsSQL($table) { throw Exception::notSupported(__METHOD__); } public function getListTableColumnsSQL($table, $database = null) { throw Exception::notSupported(__METHOD__); } public function getListTablesSQL() { throw Exception::notSupported(__METHOD__); } public function getListUsersSQL() { throw Exception::notSupported(__METHOD__); } public function getListViewsSQL($database) { throw Exception::notSupported(__METHOD__); } public function getListTableIndexesSQL($table, $database = null) { throw Exception::notSupported(__METHOD__); } public function getListTableForeignKeysSQL($table) { throw Exception::notSupported(__METHOD__); } public function getCreateViewSQL($name, $sql) { throw Exception::notSupported(__METHOD__); } public function getDropViewSQL($name) { throw Exception::notSupported(__METHOD__); } public function getDropSequenceSQL($sequence) { throw Exception::notSupported(__METHOD__); } public function getSequenceNextValSQL($sequence) { throw Exception::notSupported(__METHOD__); } public function getCreateDatabaseSQL($name) { throw Exception::notSupported(__METHOD__); } public function getSetTransactionIsolationSQL($level) { throw Exception::notSupported(__METHOD__); } public function getDateTimeTypeDeclarationSQL(array $column) { throw Exception::notSupported(__METHOD__); } public function getDateTimeTzTypeDeclarationSQL(array $column) { return $this->getDateTimeTypeDeclarationSQL($column); } public function getDateTypeDeclarationSQL(array $column) { throw Exception::notSupported(__METHOD__); } public function getTimeTypeDeclarationSQL(array $column) { throw Exception::notSupported(__METHOD__); } public function getFloatDeclarationSQL(array $column) { return 'DOUBLE PRECISION'; } public function getDefaultTransactionIsolationLevel() { return TransactionIsolationLevel::READ_COMMITTED; } public function supportsSequences() { return \false; } public function supportsIdentityColumns() { return \false; } public function usesSequenceEmulatedIdentityColumns() { return \false; } public function getIdentitySequenceName($tableName, $columnName) { throw Exception::notSupported(__METHOD__); } public function supportsIndexes() { return \true; } public function supportsPartialIndexes() { return \false; } public function supportsColumnLengthIndexes() : bool { return \false; } public function supportsAlterTable() { return \true; } public function supportsTransactions() { return \true; } public function supportsSavepoints() { return \true; } public function supportsReleaseSavepoints() { return $this->supportsSavepoints(); } public function supportsPrimaryConstraints() { return \true; } public function supportsForeignKeyConstraints() { return \true; } public function supportsForeignKeyOnUpdate() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4229', 'AbstractPlatform::supportsForeignKeyOnUpdate() is deprecated without replacement and removed in DBAL 3.0'); return $this->supportsForeignKeyConstraints(); } public function supportsSchemas() { return \false; } public function canEmulateSchemas() { return \false; } public function getDefaultSchemaName() { throw Exception::notSupported(__METHOD__); } public function supportsCreateDropDatabase() { return \true; } public function supportsGettingAffectedRows() { return \true; } public function supportsInlineColumnComments() { return \false; } public function supportsCommentOnStatement() { return \false; } public function hasNativeGuidType() { return \false; } public function hasNativeJsonType() { return \false; } public function getIdentityColumnNullInsertSQL() { return ''; } public function supportsViews() { return \true; } public function supportsColumnCollation() { return \false; } public function getDateTimeFormatString() { return 'Y-m-d H:i:s'; } public function getDateTimeTzFormatString() { return 'Y-m-d H:i:s'; } public function getDateFormatString() { return 'Y-m-d'; } public function getTimeFormatString() { return 'H:i:s'; } public final function modifyLimitQuery($query, $limit, $offset = null) { if ($limit !== null) { $limit = (int) $limit; } $offset = (int) $offset; if ($offset < 0) { throw new Exception(sprintf('Offset must be a positive integer or zero, %d given', $offset)); } if ($offset > 0 && !$this->supportsLimitOffset()) { throw new Exception(sprintf('Platform %s does not support offset values in limit queries.', $this->getName())); } return $this->doModifyLimitQuery($query, $limit, $offset); } protected function doModifyLimitQuery($query, $limit, $offset) { if ($limit !== null) { $query .= ' LIMIT ' . $limit; } if ($offset > 0) { $query .= ' OFFSET ' . $offset; } return $query; } public function supportsLimitOffset() { return \true; } public function getSQLResultCasing($column) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4229', 'AbstractPlatform::getSQLResultCasing is deprecated without replacement and removed in DBAL 3.' . 'Use Portability\\Connection with PORTABILITY_FIX_CASE to get portable result cases.'); return $column; } public function fixSchemaElementName($schemaElementName) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4132', 'AbstractPlatform::fixSchemaElementName is deprecated with no replacement and removed in DBAL 3.0'); return $schemaElementName; } public function getMaxIdentifierLength() { return 63; } public function getEmptyIdentityInsertSQL($quotedTableName, $quotedIdentifierColumnName) { return 'INSERT INTO ' . $quotedTableName . ' (' . $quotedIdentifierColumnName . ') VALUES (null)'; } public function getTruncateTableSQL($tableName, $cascade = \false) { $tableIdentifier = new Identifier($tableName); return 'TRUNCATE ' . $tableIdentifier->getQuotedName($this); } public function getDummySelectSQL() { $expression = func_num_args() > 0 ? func_get_arg(0) : '1'; return sprintf('SELECT %s', $expression); } public function createSavePoint($savepoint) { return 'SAVEPOINT ' . $savepoint; } public function releaseSavePoint($savepoint) { return 'RELEASE SAVEPOINT ' . $savepoint; } public function rollbackSavePoint($savepoint) { return 'ROLLBACK TO SAVEPOINT ' . $savepoint; } public final function getReservedKeywordsList() { if ($this->_keywords) { return $this->_keywords; } $class = $this->getReservedKeywordsClass(); $keywords = new $class(); if (!$keywords instanceof KeywordList) { throw Exception::notSupported(__METHOD__); } $this->_keywords = $keywords; return $keywords; } protected function getReservedKeywordsClass() { throw Exception::notSupported(__METHOD__); } public function quoteStringLiteral($str) { $c = $this->getStringLiteralQuoteCharacter(); return $c . str_replace($c, $c . $c, $str) . $c; } public function getStringLiteralQuoteCharacter() { return "'"; } public final function escapeStringForLike(string $inputString, string $escapeChar) : string { return preg_replace('~([' . preg_quote($this->getLikeWildcardCharacters() . $escapeChar, '~') . '])~u', addcslashes($escapeChar, '\\') . '$1', $inputString); } protected function getLikeWildcardCharacters() : string { return '%_'; } }
1
  <?php
2
+ namespace MailPoetVendor\Doctrine\DBAL\Platforms; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\Common\EventManager; use MailPoetVendor\Doctrine\DBAL\Event\SchemaAlterTableAddColumnEventArgs; use MailPoetVendor\Doctrine\DBAL\Event\SchemaAlterTableChangeColumnEventArgs; use MailPoetVendor\Doctrine\DBAL\Event\SchemaAlterTableEventArgs; use MailPoetVendor\Doctrine\DBAL\Event\SchemaAlterTableRemoveColumnEventArgs; use MailPoetVendor\Doctrine\DBAL\Event\SchemaAlterTableRenameColumnEventArgs; use MailPoetVendor\Doctrine\DBAL\Event\SchemaCreateTableColumnEventArgs; use MailPoetVendor\Doctrine\DBAL\Event\SchemaCreateTableEventArgs; use MailPoetVendor\Doctrine\DBAL\Event\SchemaDropTableEventArgs; use MailPoetVendor\Doctrine\DBAL\Events; use MailPoetVendor\Doctrine\DBAL\Exception; use MailPoetVendor\Doctrine\DBAL\Platforms\Keywords\KeywordList; use MailPoetVendor\Doctrine\DBAL\Schema\Column; use MailPoetVendor\Doctrine\DBAL\Schema\ColumnDiff; use MailPoetVendor\Doctrine\DBAL\Schema\Constraint; use MailPoetVendor\Doctrine\DBAL\Schema\ForeignKeyConstraint; use MailPoetVendor\Doctrine\DBAL\Schema\Identifier; use MailPoetVendor\Doctrine\DBAL\Schema\Index; use MailPoetVendor\Doctrine\DBAL\Schema\Sequence; use MailPoetVendor\Doctrine\DBAL\Schema\Table; use MailPoetVendor\Doctrine\DBAL\Schema\TableDiff; use MailPoetVendor\Doctrine\DBAL\TransactionIsolationLevel; use MailPoetVendor\Doctrine\DBAL\Types; use MailPoetVendor\Doctrine\DBAL\Types\Type; use MailPoetVendor\Doctrine\Deprecations\Deprecation; use InvalidArgumentException; use UnexpectedValueException; use function addcslashes; use function array_map; use function array_merge; use function array_unique; use function array_values; use function assert; use function count; use function explode; use function func_get_arg; use function func_get_args; use function func_num_args; use function implode; use function in_array; use function is_array; use function is_bool; use function is_int; use function is_string; use function preg_quote; use function preg_replace; use function sprintf; use function str_replace; use function strlen; use function strpos; use function strtolower; use function strtoupper; abstract class AbstractPlatform { public const CREATE_INDEXES = 1; public const CREATE_FOREIGNKEYS = 2; public const DATE_INTERVAL_UNIT_SECOND = DateIntervalUnit::SECOND; public const DATE_INTERVAL_UNIT_MINUTE = DateIntervalUnit::MINUTE; public const DATE_INTERVAL_UNIT_HOUR = DateIntervalUnit::HOUR; public const DATE_INTERVAL_UNIT_DAY = DateIntervalUnit::DAY; public const DATE_INTERVAL_UNIT_WEEK = DateIntervalUnit::WEEK; public const DATE_INTERVAL_UNIT_MONTH = DateIntervalUnit::MONTH; public const DATE_INTERVAL_UNIT_QUARTER = DateIntervalUnit::QUARTER; public const DATE_INTERVAL_UNIT_YEAR = DateIntervalUnit::YEAR; public const TRIM_UNSPECIFIED = TrimMode::UNSPECIFIED; public const TRIM_LEADING = TrimMode::LEADING; public const TRIM_TRAILING = TrimMode::TRAILING; public const TRIM_BOTH = TrimMode::BOTH; protected $doctrineTypeMapping; protected $doctrineTypeComments; protected $_eventManager; protected $_keywords; public function __construct() { } public function setEventManager(EventManager $eventManager) { $this->_eventManager = $eventManager; } public function getEventManager() { return $this->_eventManager; } public abstract function getBooleanTypeDeclarationSQL(array $column); public abstract function getIntegerTypeDeclarationSQL(array $column); public abstract function getBigIntTypeDeclarationSQL(array $column); public abstract function getSmallIntTypeDeclarationSQL(array $column); protected abstract function _getCommonIntegerTypeDeclarationSQL(array $column); protected abstract function initializeDoctrineTypeMappings(); private function initializeAllDoctrineTypeMappings() { $this->initializeDoctrineTypeMappings(); foreach (Type::getTypesMap() as $typeName => $className) { foreach (Type::getType($typeName)->getMappedDatabaseTypes($this) as $dbType) { $this->doctrineTypeMapping[$dbType] = $typeName; } } } public function getAsciiStringTypeDeclarationSQL(array $column) : string { return $this->getVarcharTypeDeclarationSQL($column); } public function getVarcharTypeDeclarationSQL(array $column) { if (!isset($column['length'])) { $column['length'] = $this->getVarcharDefaultLength(); } $fixed = $column['fixed'] ?? \false; $maxLength = $fixed ? $this->getCharMaxLength() : $this->getVarcharMaxLength(); if ($column['length'] > $maxLength) { return $this->getClobTypeDeclarationSQL($column); } return $this->getVarcharTypeDeclarationSQLSnippet($column['length'], $fixed); } public function getBinaryTypeDeclarationSQL(array $column) { if (!isset($column['length'])) { $column['length'] = $this->getBinaryDefaultLength(); } $fixed = $column['fixed'] ?? \false; $maxLength = $this->getBinaryMaxLength(); if ($column['length'] > $maxLength) { if ($maxLength > 0) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/issues/3187', 'Binary column length %d is greater than supported by the platform (%d).' . ' Reduce the column length or use a BLOB column instead.', $column['length'], $maxLength); } return $this->getBlobTypeDeclarationSQL($column); } return $this->getBinaryTypeDeclarationSQLSnippet($column['length'], $fixed); } public function getGuidTypeDeclarationSQL(array $column) { $column['length'] = 36; $column['fixed'] = \true; return $this->getVarcharTypeDeclarationSQL($column); } public function getJsonTypeDeclarationSQL(array $column) { return $this->getClobTypeDeclarationSQL($column); } protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed) { throw Exception::notSupported('VARCHARs not supported by Platform.'); } protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed) { throw Exception::notSupported('BINARY/VARBINARY column types are not supported by this platform.'); } public abstract function getClobTypeDeclarationSQL(array $column); public abstract function getBlobTypeDeclarationSQL(array $column); public abstract function getName(); public function registerDoctrineTypeMapping($dbType, $doctrineType) { if ($this->doctrineTypeMapping === null) { $this->initializeAllDoctrineTypeMappings(); } if (!Types\Type::hasType($doctrineType)) { throw Exception::typeNotFound($doctrineType); } $dbType = strtolower($dbType); $this->doctrineTypeMapping[$dbType] = $doctrineType; $doctrineType = Type::getType($doctrineType); if (!$doctrineType->requiresSQLCommentHint($this)) { return; } $this->markDoctrineTypeCommented($doctrineType); } public function getDoctrineTypeMapping($dbType) { if ($this->doctrineTypeMapping === null) { $this->initializeAllDoctrineTypeMappings(); } $dbType = strtolower($dbType); if (!isset($this->doctrineTypeMapping[$dbType])) { throw new Exception('Unknown database type ' . $dbType . ' requested, ' . static::class . ' may not support it.'); } return $this->doctrineTypeMapping[$dbType]; } public function hasDoctrineTypeMappingFor($dbType) { if ($this->doctrineTypeMapping === null) { $this->initializeAllDoctrineTypeMappings(); } $dbType = strtolower($dbType); return isset($this->doctrineTypeMapping[$dbType]); } protected function initializeCommentedDoctrineTypes() { $this->doctrineTypeComments = []; foreach (Type::getTypesMap() as $typeName => $className) { $type = Type::getType($typeName); if (!$type->requiresSQLCommentHint($this)) { continue; } $this->doctrineTypeComments[] = $typeName; } } public function isCommentedDoctrineType(Type $doctrineType) { if ($this->doctrineTypeComments === null) { $this->initializeCommentedDoctrineTypes(); } assert(is_array($this->doctrineTypeComments)); return in_array($doctrineType->getName(), $this->doctrineTypeComments); } public function markDoctrineTypeCommented($doctrineType) { if ($this->doctrineTypeComments === null) { $this->initializeCommentedDoctrineTypes(); } assert(is_array($this->doctrineTypeComments)); $this->doctrineTypeComments[] = $doctrineType instanceof Type ? $doctrineType->getName() : $doctrineType; } public function getDoctrineTypeComment(Type $doctrineType) { return '(DC2Type:' . $doctrineType->getName() . ')'; } protected function getColumnComment(Column $column) { $comment = $column->getComment(); if ($this->isCommentedDoctrineType($column->getType())) { $comment .= $this->getDoctrineTypeComment($column->getType()); } return $comment; } public function getIdentifierQuoteCharacter() { return '"'; } public function getSqlCommentStartString() { return '--'; } public function getSqlCommentEndString() { return "\n"; } public function getCharMaxLength() : int { return $this->getVarcharMaxLength(); } public function getVarcharMaxLength() { return 4000; } public function getVarcharDefaultLength() { return 255; } public function getBinaryMaxLength() { return 4000; } public function getBinaryDefaultLength() { return 255; } public function getWildcards() { return ['%', '_']; } public function getRegexpExpression() { throw Exception::notSupported(__METHOD__); } public function getGuidExpression() { throw Exception::notSupported(__METHOD__); } public function getAvgExpression($column) { return 'AVG(' . $column . ')'; } public function getCountExpression($column) { return 'COUNT(' . $column . ')'; } public function getMaxExpression($column) { return 'MAX(' . $column . ')'; } public function getMinExpression($column) { return 'MIN(' . $column . ')'; } public function getSumExpression($column) { return 'SUM(' . $column . ')'; } public function getMd5Expression($column) { return 'MD5(' . $column . ')'; } public function getLengthExpression($column) { return 'LENGTH(' . $column . ')'; } public function getSqrtExpression($column) { return 'SQRT(' . $column . ')'; } public function getRoundExpression($column, $decimals = 0) { return 'ROUND(' . $column . ', ' . $decimals . ')'; } public function getModExpression($expression1, $expression2) { return 'MOD(' . $expression1 . ', ' . $expression2 . ')'; } public function getTrimExpression($str, $mode = TrimMode::UNSPECIFIED, $char = \false) { $expression = ''; switch ($mode) { case TrimMode::LEADING: $expression = 'LEADING '; break; case TrimMode::TRAILING: $expression = 'TRAILING '; break; case TrimMode::BOTH: $expression = 'BOTH '; break; } if ($char !== \false) { $expression .= $char . ' '; } if ($mode || $char !== \false) { $expression .= 'FROM '; } return 'TRIM(' . $expression . $str . ')'; } public function getRtrimExpression($str) { return 'RTRIM(' . $str . ')'; } public function getLtrimExpression($str) { return 'LTRIM(' . $str . ')'; } public function getUpperExpression($str) { return 'UPPER(' . $str . ')'; } public function getLowerExpression($str) { return 'LOWER(' . $str . ')'; } public function getLocateExpression($str, $substr, $startPos = \false) { throw Exception::notSupported(__METHOD__); } public function getNowExpression() { return 'NOW()'; } public function getSubstringExpression($string, $start, $length = null) { if ($length === null) { return 'SUBSTRING(' . $string . ' FROM ' . $start . ')'; } return 'SUBSTRING(' . $string . ' FROM ' . $start . ' FOR ' . $length . ')'; } public function getConcatExpression() { return implode(' || ', func_get_args()); } public function getNotExpression($expression) { return 'NOT(' . $expression . ')'; } public function getIsNullExpression($expression) { return $expression . ' IS NULL'; } public function getIsNotNullExpression($expression) { return $expression . ' IS NOT NULL'; } public function getBetweenExpression($expression, $value1, $value2) { return $expression . ' BETWEEN ' . $value1 . ' AND ' . $value2; } public function getAcosExpression($value) { return 'ACOS(' . $value . ')'; } public function getSinExpression($value) { return 'SIN(' . $value . ')'; } public function getPiExpression() { return 'PI()'; } public function getCosExpression($value) { return 'COS(' . $value . ')'; } public function getDateDiffExpression($date1, $date2) { throw Exception::notSupported(__METHOD__); } public function getDateAddSecondsExpression($date, $seconds) { return $this->getDateArithmeticIntervalExpression($date, '+', $seconds, DateIntervalUnit::SECOND); } public function getDateSubSecondsExpression($date, $seconds) { return $this->getDateArithmeticIntervalExpression($date, '-', $seconds, DateIntervalUnit::SECOND); } public function getDateAddMinutesExpression($date, $minutes) { return $this->getDateArithmeticIntervalExpression($date, '+', $minutes, DateIntervalUnit::MINUTE); } public function getDateSubMinutesExpression($date, $minutes) { return $this->getDateArithmeticIntervalExpression($date, '-', $minutes, DateIntervalUnit::MINUTE); } public function getDateAddHourExpression($date, $hours) { return $this->getDateArithmeticIntervalExpression($date, '+', $hours, DateIntervalUnit::HOUR); } public function getDateSubHourExpression($date, $hours) { return $this->getDateArithmeticIntervalExpression($date, '-', $hours, DateIntervalUnit::HOUR); } public function getDateAddDaysExpression($date, $days) { return $this->getDateArithmeticIntervalExpression($date, '+', $days, DateIntervalUnit::DAY); } public function getDateSubDaysExpression($date, $days) { return $this->getDateArithmeticIntervalExpression($date, '-', $days, DateIntervalUnit::DAY); } public function getDateAddWeeksExpression($date, $weeks) { return $this->getDateArithmeticIntervalExpression($date, '+', $weeks, DateIntervalUnit::WEEK); } public function getDateSubWeeksExpression($date, $weeks) { return $this->getDateArithmeticIntervalExpression($date, '-', $weeks, DateIntervalUnit::WEEK); } public function getDateAddMonthExpression($date, $months) { return $this->getDateArithmeticIntervalExpression($date, '+', $months, DateIntervalUnit::MONTH); } public function getDateSubMonthExpression($date, $months) { return $this->getDateArithmeticIntervalExpression($date, '-', $months, DateIntervalUnit::MONTH); } public function getDateAddQuartersExpression($date, $quarters) { return $this->getDateArithmeticIntervalExpression($date, '+', $quarters, DateIntervalUnit::QUARTER); } public function getDateSubQuartersExpression($date, $quarters) { return $this->getDateArithmeticIntervalExpression($date, '-', $quarters, DateIntervalUnit::QUARTER); } public function getDateAddYearsExpression($date, $years) { return $this->getDateArithmeticIntervalExpression($date, '+', $years, DateIntervalUnit::YEAR); } public function getDateSubYearsExpression($date, $years) { return $this->getDateArithmeticIntervalExpression($date, '-', $years, DateIntervalUnit::YEAR); } protected function getDateArithmeticIntervalExpression($date, $operator, $interval, $unit) { throw Exception::notSupported(__METHOD__); } public function getBitAndComparisonExpression($value1, $value2) { return '(' . $value1 . ' & ' . $value2 . ')'; } public function getBitOrComparisonExpression($value1, $value2) { return '(' . $value1 . ' | ' . $value2 . ')'; } public function getForUpdateSQL() { return 'FOR UPDATE'; } public function appendLockHint($fromClause, $lockMode) { return $fromClause; } public function getReadLockSQL() { return $this->getForUpdateSQL(); } public function getWriteLockSQL() { return $this->getForUpdateSQL(); } public function getDropDatabaseSQL($name) { return 'DROP DATABASE ' . $name; } public function getDropTableSQL($table) { $tableArg = $table; if ($table instanceof Table) { $table = $table->getQuotedName($this); } if (!is_string($table)) { throw new InvalidArgumentException(__METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.'); } if ($this->_eventManager !== null && $this->_eventManager->hasListeners(Events::onSchemaDropTable)) { $eventArgs = new SchemaDropTableEventArgs($tableArg, $this); $this->_eventManager->dispatchEvent(Events::onSchemaDropTable, $eventArgs); if ($eventArgs->isDefaultPrevented()) { $sql = $eventArgs->getSql(); if ($sql === null) { throw new UnexpectedValueException('Default implementation of DROP TABLE was overridden with NULL'); } return $sql; } } return 'DROP TABLE ' . $table; } public function getDropTemporaryTableSQL($table) { return $this->getDropTableSQL($table); } public function getDropIndexSQL($index, $table = null) { if ($index instanceof Index) { $index = $index->getQuotedName($this); } elseif (!is_string($index)) { throw new InvalidArgumentException(__METHOD__ . '() expects $index parameter to be string or ' . Index::class . '.'); } return 'DROP INDEX ' . $index; } public function getDropConstraintSQL($constraint, $table) { if (!$constraint instanceof Constraint) { $constraint = new Identifier($constraint); } if (!$table instanceof Table) { $table = new Identifier($table); } $constraint = $constraint->getQuotedName($this); $table = $table->getQuotedName($this); return 'ALTER TABLE ' . $table . ' DROP CONSTRAINT ' . $constraint; } public function getDropForeignKeySQL($foreignKey, $table) { if (!$foreignKey instanceof ForeignKeyConstraint) { $foreignKey = new Identifier($foreignKey); } if (!$table instanceof Table) { $table = new Identifier($table); } $foreignKey = $foreignKey->getQuotedName($this); $table = $table->getQuotedName($this); return 'ALTER TABLE ' . $table . ' DROP FOREIGN KEY ' . $foreignKey; } public function getCreateTableSQL(Table $table, $createFlags = self::CREATE_INDEXES) { if (!is_int($createFlags)) { throw new InvalidArgumentException('Second argument of AbstractPlatform::getCreateTableSQL() has to be integer.'); } if (count($table->getColumns()) === 0) { throw Exception::noColumnsSpecifiedForTable($table->getName()); } $tableName = $table->getQuotedName($this); $options = $table->getOptions(); $options['uniqueConstraints'] = []; $options['indexes'] = []; $options['primary'] = []; if (($createFlags & self::CREATE_INDEXES) > 0) { foreach ($table->getIndexes() as $index) { if ($index->isPrimary()) { $options['primary'] = $index->getQuotedColumns($this); $options['primary_index'] = $index; } else { $options['indexes'][$index->getQuotedName($this)] = $index; } } } $columnSql = []; $columns = []; foreach ($table->getColumns() as $column) { if ($this->_eventManager !== null && $this->_eventManager->hasListeners(Events::onSchemaCreateTableColumn)) { $eventArgs = new SchemaCreateTableColumnEventArgs($column, $table, $this); $this->_eventManager->dispatchEvent(Events::onSchemaCreateTableColumn, $eventArgs); $columnSql = array_merge($columnSql, $eventArgs->getSql()); if ($eventArgs->isDefaultPrevented()) { continue; } } $name = $column->getQuotedName($this); $columnData = array_merge($column->toArray(), ['name' => $name, 'version' => $column->hasPlatformOption('version') ? $column->getPlatformOption('version') : \false, 'comment' => $this->getColumnComment($column)]); if ($columnData['type'] instanceof Types\StringType && $columnData['length'] === null) { $columnData['length'] = 255; } if (in_array($column->getName(), $options['primary'])) { $columnData['primary'] = \true; } $columns[$name] = $columnData; } if (($createFlags & self::CREATE_FOREIGNKEYS) > 0) { $options['foreignKeys'] = []; foreach ($table->getForeignKeys() as $fkConstraint) { $options['foreignKeys'][] = $fkConstraint; } } if ($this->_eventManager !== null && $this->_eventManager->hasListeners(Events::onSchemaCreateTable)) { $eventArgs = new SchemaCreateTableEventArgs($table, $columns, $options, $this); $this->_eventManager->dispatchEvent(Events::onSchemaCreateTable, $eventArgs); if ($eventArgs->isDefaultPrevented()) { return array_merge($eventArgs->getSql(), $columnSql); } } $sql = $this->_getCreateTableSQL($tableName, $columns, $options); if ($this->supportsCommentOnStatement()) { if ($table->hasOption('comment')) { $sql[] = $this->getCommentOnTableSQL($tableName, $table->getOption('comment')); } foreach ($table->getColumns() as $column) { $comment = $this->getColumnComment($column); if ($comment === null || $comment === '') { continue; } $sql[] = $this->getCommentOnColumnSQL($tableName, $column->getQuotedName($this), $comment); } } return array_merge($sql, $columnSql); } protected function getCommentOnTableSQL(string $tableName, ?string $comment) : string { $tableName = new Identifier($tableName); return sprintf('COMMENT ON TABLE %s IS %s', $tableName->getQuotedName($this), $this->quoteStringLiteral((string) $comment)); } public function getCommentOnColumnSQL($tableName, $columnName, $comment) { $tableName = new Identifier($tableName); $columnName = new Identifier($columnName); return sprintf('COMMENT ON COLUMN %s.%s IS %s', $tableName->getQuotedName($this), $columnName->getQuotedName($this), $this->quoteStringLiteral((string) $comment)); } public function getInlineColumnCommentSQL($comment) { if (!$this->supportsInlineColumnComments()) { throw Exception::notSupported(__METHOD__); } return 'COMMENT ' . $this->quoteStringLiteral($comment); } protected function _getCreateTableSQL($name, array $columns, array $options = []) { $columnListSql = $this->getColumnDeclarationListSQL($columns); if (isset($options['uniqueConstraints']) && !empty($options['uniqueConstraints'])) { foreach ($options['uniqueConstraints'] as $index => $definition) { $columnListSql .= ', ' . $this->getUniqueConstraintDeclarationSQL($index, $definition); } } if (isset($options['primary']) && !empty($options['primary'])) { $columnListSql .= ', PRIMARY KEY(' . implode(', ', array_unique(array_values($options['primary']))) . ')'; } if (isset($options['indexes']) && !empty($options['indexes'])) { foreach ($options['indexes'] as $index => $definition) { $columnListSql .= ', ' . $this->getIndexDeclarationSQL($index, $definition); } } $query = 'CREATE TABLE ' . $name . ' (' . $columnListSql; $check = $this->getCheckDeclarationSQL($columns); if (!empty($check)) { $query .= ', ' . $check; } $query .= ')'; $sql = [$query]; if (isset($options['foreignKeys'])) { foreach ((array) $options['foreignKeys'] as $definition) { $sql[] = $this->getCreateForeignKeySQL($definition, $name); } } return $sql; } public function getCreateTemporaryTableSnippetSQL() { return 'CREATE TEMPORARY TABLE'; } public function getCreateSequenceSQL(Sequence $sequence) { throw Exception::notSupported(__METHOD__); } public function getAlterSequenceSQL(Sequence $sequence) { throw Exception::notSupported(__METHOD__); } public function getCreateConstraintSQL(Constraint $constraint, $table) { if ($table instanceof Table) { $table = $table->getQuotedName($this); } $query = 'ALTER TABLE ' . $table . ' ADD CONSTRAINT ' . $constraint->getQuotedName($this); $columnList = '(' . implode(', ', $constraint->getQuotedColumns($this)) . ')'; $referencesClause = ''; if ($constraint instanceof Index) { if ($constraint->isPrimary()) { $query .= ' PRIMARY KEY'; } elseif ($constraint->isUnique()) { $query .= ' UNIQUE'; } else { throw new InvalidArgumentException('Can only create primary or unique constraints, no common indexes with getCreateConstraintSQL().'); } } elseif ($constraint instanceof ForeignKeyConstraint) { $query .= ' FOREIGN KEY'; $referencesClause = ' REFERENCES ' . $constraint->getQuotedForeignTableName($this) . ' (' . implode(', ', $constraint->getQuotedForeignColumns($this)) . ')'; } $query .= ' ' . $columnList . $referencesClause; return $query; } public function getCreateIndexSQL(Index $index, $table) { if ($table instanceof Table) { $table = $table->getQuotedName($this); } $name = $index->getQuotedName($this); $columns = $index->getColumns(); if (count($columns) === 0) { throw new InvalidArgumentException("Incomplete definition. 'columns' required."); } if ($index->isPrimary()) { return $this->getCreatePrimaryKeySQL($index, $table); } $query = 'CREATE ' . $this->getCreateIndexSQLFlags($index) . 'INDEX ' . $name . ' ON ' . $table; $query .= ' (' . $this->getIndexFieldDeclarationListSQL($index) . ')' . $this->getPartialIndexSQL($index); return $query; } protected function getPartialIndexSQL(Index $index) { if ($this->supportsPartialIndexes() && $index->hasOption('where')) { return ' WHERE ' . $index->getOption('where'); } return ''; } protected function getCreateIndexSQLFlags(Index $index) { return $index->isUnique() ? 'UNIQUE ' : ''; } public function getCreatePrimaryKeySQL(Index $index, $table) { if ($table instanceof Table) { $table = $table->getQuotedName($this); } return 'ALTER TABLE ' . $table . ' ADD PRIMARY KEY (' . $this->getIndexFieldDeclarationListSQL($index) . ')'; } public function getCreateSchemaSQL($schemaName) { throw Exception::notSupported(__METHOD__); } public function quoteIdentifier($str) { if (strpos($str, '.') !== \false) { $parts = array_map([$this, 'quoteSingleIdentifier'], explode('.', $str)); return implode('.', $parts); } return $this->quoteSingleIdentifier($str); } public function quoteSingleIdentifier($str) { $c = $this->getIdentifierQuoteCharacter(); return $c . str_replace($c, $c . $c, $str) . $c; } public function getCreateForeignKeySQL(ForeignKeyConstraint $foreignKey, $table) { if ($table instanceof Table) { $table = $table->getQuotedName($this); } return 'ALTER TABLE ' . $table . ' ADD ' . $this->getForeignKeyDeclarationSQL($foreignKey); } public function getAlterTableSQL(TableDiff $diff) { throw Exception::notSupported(__METHOD__); } protected function onSchemaAlterTableAddColumn(Column $column, TableDiff $diff, &$columnSql) { if ($this->_eventManager === null) { return \false; } if (!$this->_eventManager->hasListeners(Events::onSchemaAlterTableAddColumn)) { return \false; } $eventArgs = new SchemaAlterTableAddColumnEventArgs($column, $diff, $this); $this->_eventManager->dispatchEvent(Events::onSchemaAlterTableAddColumn, $eventArgs); $columnSql = array_merge($columnSql, $eventArgs->getSql()); return $eventArgs->isDefaultPrevented(); } protected function onSchemaAlterTableRemoveColumn(Column $column, TableDiff $diff, &$columnSql) { if ($this->_eventManager === null) { return \false; } if (!$this->_eventManager->hasListeners(Events::onSchemaAlterTableRemoveColumn)) { return \false; } $eventArgs = new SchemaAlterTableRemoveColumnEventArgs($column, $diff, $this); $this->_eventManager->dispatchEvent(Events::onSchemaAlterTableRemoveColumn, $eventArgs); $columnSql = array_merge($columnSql, $eventArgs->getSql()); return $eventArgs->isDefaultPrevented(); } protected function onSchemaAlterTableChangeColumn(ColumnDiff $columnDiff, TableDiff $diff, &$columnSql) { if ($this->_eventManager === null) { return \false; } if (!$this->_eventManager->hasListeners(Events::onSchemaAlterTableChangeColumn)) { return \false; } $eventArgs = new SchemaAlterTableChangeColumnEventArgs($columnDiff, $diff, $this); $this->_eventManager->dispatchEvent(Events::onSchemaAlterTableChangeColumn, $eventArgs); $columnSql = array_merge($columnSql, $eventArgs->getSql()); return $eventArgs->isDefaultPrevented(); } protected function onSchemaAlterTableRenameColumn($oldColumnName, Column $column, TableDiff $diff, &$columnSql) { if ($this->_eventManager === null) { return \false; } if (!$this->_eventManager->hasListeners(Events::onSchemaAlterTableRenameColumn)) { return \false; } $eventArgs = new SchemaAlterTableRenameColumnEventArgs($oldColumnName, $column, $diff, $this); $this->_eventManager->dispatchEvent(Events::onSchemaAlterTableRenameColumn, $eventArgs); $columnSql = array_merge($columnSql, $eventArgs->getSql()); return $eventArgs->isDefaultPrevented(); } protected function onSchemaAlterTable(TableDiff $diff, &$sql) { if ($this->_eventManager === null) { return \false; } if (!$this->_eventManager->hasListeners(Events::onSchemaAlterTable)) { return \false; } $eventArgs = new SchemaAlterTableEventArgs($diff, $this); $this->_eventManager->dispatchEvent(Events::onSchemaAlterTable, $eventArgs); $sql = array_merge($sql, $eventArgs->getSql()); return $eventArgs->isDefaultPrevented(); } protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff) { $tableName = $diff->getName($this)->getQuotedName($this); $sql = []; if ($this->supportsForeignKeyConstraints()) { foreach ($diff->removedForeignKeys as $foreignKey) { $sql[] = $this->getDropForeignKeySQL($foreignKey, $tableName); } foreach ($diff->changedForeignKeys as $foreignKey) { $sql[] = $this->getDropForeignKeySQL($foreignKey, $tableName); } } foreach ($diff->removedIndexes as $index) { $sql[] = $this->getDropIndexSQL($index, $tableName); } foreach ($diff->changedIndexes as $index) { $sql[] = $this->getDropIndexSQL($index, $tableName); } return $sql; } protected function getPostAlterTableIndexForeignKeySQL(TableDiff $diff) { $sql = []; $newName = $diff->getNewName(); if ($newName !== \false) { $tableName = $newName->getQuotedName($this); } else { $tableName = $diff->getName($this)->getQuotedName($this); } if ($this->supportsForeignKeyConstraints()) { foreach ($diff->addedForeignKeys as $foreignKey) { $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableName); } foreach ($diff->changedForeignKeys as $foreignKey) { $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableName); } } foreach ($diff->addedIndexes as $index) { $sql[] = $this->getCreateIndexSQL($index, $tableName); } foreach ($diff->changedIndexes as $index) { $sql[] = $this->getCreateIndexSQL($index, $tableName); } foreach ($diff->renamedIndexes as $oldIndexName => $index) { $oldIndexName = new Identifier($oldIndexName); $sql = array_merge($sql, $this->getRenameIndexSQL($oldIndexName->getQuotedName($this), $index, $tableName)); } return $sql; } protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName) { return [$this->getDropIndexSQL($oldIndexName, $tableName), $this->getCreateIndexSQL($index, $tableName)]; } protected function _getAlterTableIndexForeignKeySQL(TableDiff $diff) { return array_merge($this->getPreAlterTableIndexForeignKeySQL($diff), $this->getPostAlterTableIndexForeignKeySQL($diff)); } public function getColumnDeclarationListSQL(array $columns) { $declarations = []; foreach ($columns as $name => $column) { $declarations[] = $this->getColumnDeclarationSQL($name, $column); } return implode(', ', $declarations); } public function getColumnDeclarationSQL($name, array $column) { if (isset($column['columnDefinition'])) { $declaration = $this->getCustomTypeDeclarationSQL($column); } else { $default = $this->getDefaultValueDeclarationSQL($column); $charset = isset($column['charset']) && $column['charset'] ? ' ' . $this->getColumnCharsetDeclarationSQL($column['charset']) : ''; $collation = isset($column['collation']) && $column['collation'] ? ' ' . $this->getColumnCollationDeclarationSQL($column['collation']) : ''; $notnull = isset($column['notnull']) && $column['notnull'] ? ' NOT NULL' : ''; $unique = isset($column['unique']) && $column['unique'] ? ' ' . $this->getUniqueFieldDeclarationSQL() : ''; $check = isset($column['check']) && $column['check'] ? ' ' . $column['check'] : ''; $typeDecl = $column['type']->getSQLDeclaration($column, $this); $declaration = $typeDecl . $charset . $default . $notnull . $unique . $check . $collation; if ($this->supportsInlineColumnComments() && isset($column['comment']) && $column['comment'] !== '') { $declaration .= ' ' . $this->getInlineColumnCommentSQL($column['comment']); } } return $name . ' ' . $declaration; } public function getDecimalTypeDeclarationSQL(array $column) { $column['precision'] = !isset($column['precision']) || empty($column['precision']) ? 10 : $column['precision']; $column['scale'] = !isset($column['scale']) || empty($column['scale']) ? 0 : $column['scale']; return 'NUMERIC(' . $column['precision'] . ', ' . $column['scale'] . ')'; } public function getDefaultValueDeclarationSQL($column) { if (!isset($column['default'])) { return empty($column['notnull']) ? ' DEFAULT NULL' : ''; } $default = $column['default']; if (!isset($column['type'])) { return " DEFAULT '" . $default . "'"; } $type = $column['type']; if ($type instanceof Types\PhpIntegerMappingType) { return ' DEFAULT ' . $default; } if ($type instanceof Types\PhpDateTimeMappingType && $default === $this->getCurrentTimestampSQL()) { return ' DEFAULT ' . $this->getCurrentTimestampSQL(); } if ($type instanceof Types\TimeType && $default === $this->getCurrentTimeSQL()) { return ' DEFAULT ' . $this->getCurrentTimeSQL(); } if ($type instanceof Types\DateType && $default === $this->getCurrentDateSQL()) { return ' DEFAULT ' . $this->getCurrentDateSQL(); } if ($type instanceof Types\BooleanType) { return " DEFAULT '" . $this->convertBooleans($default) . "'"; } return ' DEFAULT ' . $this->quoteStringLiteral($default); } public function getCheckDeclarationSQL(array $definition) { $constraints = []; foreach ($definition as $column => $def) { if (is_string($def)) { $constraints[] = 'CHECK (' . $def . ')'; } else { if (isset($def['min'])) { $constraints[] = 'CHECK (' . $column . ' >= ' . $def['min'] . ')'; } if (isset($def['max'])) { $constraints[] = 'CHECK (' . $column . ' <= ' . $def['max'] . ')'; } } } return implode(', ', $constraints); } public function getUniqueConstraintDeclarationSQL($name, Index $index) { $columns = $index->getColumns(); $name = new Identifier($name); if (count($columns) === 0) { throw new InvalidArgumentException("Incomplete definition. 'columns' required."); } return 'CONSTRAINT ' . $name->getQuotedName($this) . ' UNIQUE (' . $this->getIndexFieldDeclarationListSQL($index) . ')' . $this->getPartialIndexSQL($index); } public function getIndexDeclarationSQL($name, Index $index) { $columns = $index->getColumns(); $name = new Identifier($name); if (count($columns) === 0) { throw new InvalidArgumentException("Incomplete definition. 'columns' required."); } return $this->getCreateIndexSQLFlags($index) . 'INDEX ' . $name->getQuotedName($this) . ' (' . $this->getIndexFieldDeclarationListSQL($index) . ')' . $this->getPartialIndexSQL($index); } public function getCustomTypeDeclarationSQL(array $column) { return $column['columnDefinition']; } public function getIndexFieldDeclarationListSQL($columnsOrIndex) : string { if ($columnsOrIndex instanceof Index) { return implode(', ', $columnsOrIndex->getQuotedColumns($this)); } if (!is_array($columnsOrIndex)) { throw new InvalidArgumentException('Fields argument should be an Index or array.'); } $ret = []; foreach ($columnsOrIndex as $column => $definition) { if (is_array($definition)) { $ret[] = $column; } else { $ret[] = $definition; } } return implode(', ', $ret); } public function getTemporaryTableSQL() { return 'TEMPORARY'; } public function getTemporaryTableName($tableName) { return $tableName; } public function getForeignKeyDeclarationSQL(ForeignKeyConstraint $foreignKey) { $sql = $this->getForeignKeyBaseDeclarationSQL($foreignKey); $sql .= $this->getAdvancedForeignKeyOptionsSQL($foreignKey); return $sql; } public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey) { $query = ''; if ($this->supportsForeignKeyOnUpdate() && $foreignKey->hasOption('onUpdate')) { $query .= ' ON UPDATE ' . $this->getForeignKeyReferentialActionSQL($foreignKey->getOption('onUpdate')); } if ($foreignKey->hasOption('onDelete')) { $query .= ' ON DELETE ' . $this->getForeignKeyReferentialActionSQL($foreignKey->getOption('onDelete')); } return $query; } public function getForeignKeyReferentialActionSQL($action) { $upper = strtoupper($action); switch ($upper) { case 'CASCADE': case 'SET NULL': case 'NO ACTION': case 'RESTRICT': case 'SET DEFAULT': return $upper; default: throw new InvalidArgumentException('Invalid foreign key action: ' . $upper); } } public function getForeignKeyBaseDeclarationSQL(ForeignKeyConstraint $foreignKey) { $sql = ''; if (strlen($foreignKey->getName())) { $sql .= 'CONSTRAINT ' . $foreignKey->getQuotedName($this) . ' '; } $sql .= 'FOREIGN KEY ('; if (count($foreignKey->getLocalColumns()) === 0) { throw new InvalidArgumentException("Incomplete definition. 'local' required."); } if (count($foreignKey->getForeignColumns()) === 0) { throw new InvalidArgumentException("Incomplete definition. 'foreign' required."); } if (strlen($foreignKey->getForeignTableName()) === 0) { throw new InvalidArgumentException("Incomplete definition. 'foreignTable' required."); } return $sql . implode(', ', $foreignKey->getQuotedLocalColumns($this)) . ') REFERENCES ' . $foreignKey->getQuotedForeignTableName($this) . ' (' . implode(', ', $foreignKey->getQuotedForeignColumns($this)) . ')'; } public function getUniqueFieldDeclarationSQL() { return 'UNIQUE'; } public function getColumnCharsetDeclarationSQL($charset) { return ''; } public function getColumnCollationDeclarationSQL($collation) { return $this->supportsColumnCollation() ? 'COLLATE ' . $collation : ''; } public function prefersSequences() { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4229', 'AbstractPlatform::prefersSequences() is deprecated without replacement and removed in DBAL 3.0'); return \false; } public function prefersIdentityColumns() { return \false; } public function convertBooleans($item) { if (is_array($item)) { foreach ($item as $k => $value) { if (!is_bool($value)) { continue; } $item[$k] = (int) $value; } } elseif (is_bool($item)) { $item = (int) $item; } return $item; } public function convertFromBoolean($item) { return $item === null ? null : (bool) $item; } public function convertBooleansToDatabaseValue($item) { return $this->convertBooleans($item); } public function getCurrentDateSQL() { return 'CURRENT_DATE'; } public function getCurrentTimeSQL() { return 'CURRENT_TIME'; } public function getCurrentTimestampSQL() { return 'CURRENT_TIMESTAMP'; } protected function _getTransactionIsolationLevelSQL($level) { switch ($level) { case TransactionIsolationLevel::READ_UNCOMMITTED: return 'READ UNCOMMITTED'; case TransactionIsolationLevel::READ_COMMITTED: return 'READ COMMITTED'; case TransactionIsolationLevel::REPEATABLE_READ: return 'REPEATABLE READ'; case TransactionIsolationLevel::SERIALIZABLE: return 'SERIALIZABLE'; default: throw new InvalidArgumentException('Invalid isolation level:' . $level); } } public function getListDatabasesSQL() { throw Exception::notSupported(__METHOD__); } public function getListNamespacesSQL() { throw Exception::notSupported(__METHOD__); } public function getListSequencesSQL($database) { throw Exception::notSupported(__METHOD__); } public function getListTableConstraintsSQL($table) { throw Exception::notSupported(__METHOD__); } public function getListTableColumnsSQL($table, $database = null) { throw Exception::notSupported(__METHOD__); } public function getListTablesSQL() { throw Exception::notSupported(__METHOD__); } public function getListUsersSQL() { throw Exception::notSupported(__METHOD__); } public function getListViewsSQL($database) { throw Exception::notSupported(__METHOD__); } public function getListTableIndexesSQL($table, $database = null) { throw Exception::notSupported(__METHOD__); } public function getListTableForeignKeysSQL($table) { throw Exception::notSupported(__METHOD__); } public function getCreateViewSQL($name, $sql) { throw Exception::notSupported(__METHOD__); } public function getDropViewSQL($name) { throw Exception::notSupported(__METHOD__); } public function getDropSequenceSQL($sequence) { throw Exception::notSupported(__METHOD__); } public function getSequenceNextValSQL($sequence) { throw Exception::notSupported(__METHOD__); } public function getCreateDatabaseSQL($name) { throw Exception::notSupported(__METHOD__); } public function getSetTransactionIsolationSQL($level) { throw Exception::notSupported(__METHOD__); } public function getDateTimeTypeDeclarationSQL(array $column) { throw Exception::notSupported(__METHOD__); } public function getDateTimeTzTypeDeclarationSQL(array $column) { return $this->getDateTimeTypeDeclarationSQL($column); } public function getDateTypeDeclarationSQL(array $column) { throw Exception::notSupported(__METHOD__); } public function getTimeTypeDeclarationSQL(array $column) { throw Exception::notSupported(__METHOD__); } public function getFloatDeclarationSQL(array $column) { return 'DOUBLE PRECISION'; } public function getDefaultTransactionIsolationLevel() { return TransactionIsolationLevel::READ_COMMITTED; } public function supportsSequences() { return \false; } public function supportsIdentityColumns() { return \false; } public function usesSequenceEmulatedIdentityColumns() { return \false; } public function getIdentitySequenceName($tableName, $columnName) { throw Exception::notSupported(__METHOD__); } public function supportsIndexes() { return \true; } public function supportsPartialIndexes() { return \false; } public function supportsColumnLengthIndexes() : bool { return \false; } public function supportsAlterTable() { return \true; } public function supportsTransactions() { return \true; } public function supportsSavepoints() { return \true; } public function supportsReleaseSavepoints() { return $this->supportsSavepoints(); } public function supportsPrimaryConstraints() { return \true; } public function supportsForeignKeyConstraints() { return \true; } public function supportsForeignKeyOnUpdate() { Deprecation::triggerIfCalledFromOutside('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4229', 'AbstractPlatform::supportsForeignKeyOnUpdate() is deprecated without replacement and removed in DBAL 3.0'); return $this->supportsForeignKeyConstraints(); } public function supportsSchemas() { return \false; } public function canEmulateSchemas() { return \false; } public function getDefaultSchemaName() { throw Exception::notSupported(__METHOD__); } public function supportsCreateDropDatabase() { return \true; } public function supportsGettingAffectedRows() { return \true; } public function supportsInlineColumnComments() { return \false; } public function supportsCommentOnStatement() { return \false; } public function hasNativeGuidType() { return \false; } public function hasNativeJsonType() { return \false; } public function getIdentityColumnNullInsertSQL() { return ''; } public function supportsViews() { return \true; } public function supportsColumnCollation() { return \false; } public function getDateTimeFormatString() { return 'Y-m-d H:i:s'; } public function getDateTimeTzFormatString() { return 'Y-m-d H:i:s'; } public function getDateFormatString() { return 'Y-m-d'; } public function getTimeFormatString() { return 'H:i:s'; } public final function modifyLimitQuery($query, $limit, $offset = null) { if ($limit !== null) { $limit = (int) $limit; } $offset = (int) $offset; if ($offset < 0) { throw new Exception(sprintf('Offset must be a positive integer or zero, %d given', $offset)); } if ($offset > 0 && !$this->supportsLimitOffset()) { throw new Exception(sprintf('Platform %s does not support offset values in limit queries.', $this->getName())); } return $this->doModifyLimitQuery($query, $limit, $offset); } protected function doModifyLimitQuery($query, $limit, $offset) { if ($limit !== null) { $query .= ' LIMIT ' . $limit; } if ($offset > 0) { $query .= ' OFFSET ' . $offset; } return $query; } public function supportsLimitOffset() { return \true; } public function getSQLResultCasing($column) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4229', 'AbstractPlatform::getSQLResultCasing is deprecated without replacement and removed in DBAL 3.' . 'Use Portability\\Connection with PORTABILITY_FIX_CASE to get portable result cases.'); return $column; } public function fixSchemaElementName($schemaElementName) { Deprecation::trigger('doctrine/dbal', 'https://github.com/doctrine/dbal/pull/4132', 'AbstractPlatform::fixSchemaElementName is deprecated with no replacement and removed in DBAL 3.0'); return $schemaElementName; } public function getMaxIdentifierLength() { return 63; } public function getEmptyIdentityInsertSQL($quotedTableName, $quotedIdentifierColumnName) { return 'INSERT INTO ' . $quotedTableName . ' (' . $quotedIdentifierColumnName . ') VALUES (null)'; } public function getTruncateTableSQL($tableName, $cascade = \false) { $tableIdentifier = new Identifier($tableName); return 'TRUNCATE ' . $tableIdentifier->getQuotedName($this); } public function getDummySelectSQL() { $expression = func_num_args() > 0 ? func_get_arg(0) : '1'; return sprintf('SELECT %s', $expression); } public function createSavePoint($savepoint) { return 'SAVEPOINT ' . $savepoint; } public function releaseSavePoint($savepoint) { return 'RELEASE SAVEPOINT ' . $savepoint; } public function rollbackSavePoint($savepoint) { return 'ROLLBACK TO SAVEPOINT ' . $savepoint; } public final function getReservedKeywordsList() { if ($this->_keywords) { return $this->_keywords; } $class = $this->getReservedKeywordsClass(); $keywords = new $class(); if (!$keywords instanceof KeywordList) { throw Exception::notSupported(__METHOD__); } $this->_keywords = $keywords; return $keywords; } protected function getReservedKeywordsClass() { throw Exception::notSupported(__METHOD__); } public function quoteStringLiteral($str) { $c = $this->getStringLiteralQuoteCharacter(); return $c . str_replace($c, $c . $c, $str) . $c; } public function getStringLiteralQuoteCharacter() { return "'"; } public final function escapeStringForLike(string $inputString, string $escapeChar) : string { return preg_replace('~([' . preg_quote($this->getLikeWildcardCharacters() . $escapeChar, '~') . '])~u', addcslashes($escapeChar, '\\') . '$1', $inputString); } protected function getLikeWildcardCharacters() : string { return '%_'; } }
vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MariaDb1027Platform.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- namespace MailPoetVendor\Doctrine\DBAL\Platforms; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\DBAL\Types\Types; final class MariaDb1027Platform extends MySqlPlatform { public function getJsonTypeDeclarationSQL(array $column) : string { return 'LONGTEXT'; } protected function getReservedKeywordsClass() : string { return Keywords\MariaDb102Keywords::class; } protected function initializeDoctrineTypeMappings() : void { parent::initializeDoctrineTypeMappings(); $this->doctrineTypeMapping['json'] = Types::JSON; } }
1
  <?php
2
+ namespace MailPoetVendor\Doctrine\DBAL\Platforms; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\DBAL\Types\Types; class MariaDb1027Platform extends MySqlPlatform { public function getJsonTypeDeclarationSQL(array $column) : string { return 'LONGTEXT'; } protected function getReservedKeywordsClass() : string { return Keywords\MariaDb102Keywords::class; } protected function initializeDoctrineTypeMappings() : void { parent::initializeDoctrineTypeMappings(); $this->doctrineTypeMapping['json'] = Types::JSON; } }
vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Portability/Statement.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- namespace MailPoetVendor\Doctrine\DBAL\Portability; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\DBAL\Driver\Result; use MailPoetVendor\Doctrine\DBAL\Driver\ResultStatement; use MailPoetVendor\Doctrine\DBAL\Driver\Statement as DriverStatement; use MailPoetVendor\Doctrine\DBAL\Driver\StatementIterator; use MailPoetVendor\Doctrine\DBAL\FetchMode; use MailPoetVendor\Doctrine\DBAL\ParameterType; use IteratorAggregate; use PDO; use MailPoetVendor\ReturnTypeWillChange; use function array_change_key_case; use function assert; use function is_string; use function rtrim; class Statement implements IteratorAggregate, DriverStatement, Result { private $portability; private $stmt; private $case; private $defaultFetchMode = FetchMode::MIXED; public function __construct($stmt, Connection $conn) { $this->stmt = $stmt; $this->portability = $conn->getPortability(); $this->case = $conn->getFetchCase(); } public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null) { assert($this->stmt instanceof DriverStatement); return $this->stmt->bindParam($param, $variable, $type, $length); } public function bindValue($param, $value, $type = ParameterType::STRING) { assert($this->stmt instanceof DriverStatement); return $this->stmt->bindValue($param, $value, $type); } public function closeCursor() { return $this->stmt->closeCursor(); } public function columnCount() { return $this->stmt->columnCount(); } public function errorCode() { assert($this->stmt instanceof DriverStatement); return $this->stmt->errorCode(); } public function errorInfo() { assert($this->stmt instanceof DriverStatement); return $this->stmt->errorInfo(); } public function execute($params = null) { assert($this->stmt instanceof DriverStatement); return $this->stmt->execute($params); } public function setFetchMode($fetchMode, $arg2 = null, $arg3 = null) { $this->defaultFetchMode = $fetchMode; return $this->stmt->setFetchMode($fetchMode, $arg2, $arg3); } public function getIterator() { return new StatementIterator($this); } public function fetch($fetchMode = null, $cursorOrientation = PDO::FETCH_ORI_NEXT, $cursorOffset = 0) { $fetchMode = $fetchMode ?: $this->defaultFetchMode; $row = $this->stmt->fetch($fetchMode); $iterateRow = ($this->portability & (Connection::PORTABILITY_EMPTY_TO_NULL | Connection::PORTABILITY_RTRIM)) !== 0; $fixCase = $this->case !== null && ($fetchMode === FetchMode::ASSOCIATIVE || $fetchMode === FetchMode::MIXED) && $this->portability & Connection::PORTABILITY_FIX_CASE; $row = $this->fixRow($row, $iterateRow, $fixCase); return $row; } public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = null) { $fetchMode = $fetchMode ?: $this->defaultFetchMode; if ($fetchArgument) { $rows = $this->stmt->fetchAll($fetchMode, $fetchArgument); } else { $rows = $this->stmt->fetchAll($fetchMode); } $fixCase = $this->case !== null && ($fetchMode === FetchMode::ASSOCIATIVE || $fetchMode === FetchMode::MIXED) && $this->portability & Connection::PORTABILITY_FIX_CASE; return $this->fixResultSet($rows, $fixCase, $fetchMode !== FetchMode::COLUMN); } public function fetchNumeric() { if ($this->stmt instanceof Result) { $row = $this->stmt->fetchNumeric(); } else { $row = $this->stmt->fetch(FetchMode::NUMERIC); } return $this->fixResult($row, \false); } public function fetchAssociative() { if ($this->stmt instanceof Result) { $row = $this->stmt->fetchAssociative(); } else { $row = $this->stmt->fetch(FetchMode::ASSOCIATIVE); } return $this->fixResult($row, \true); } public function fetchOne() { if ($this->stmt instanceof Result) { $value = $this->stmt->fetchOne(); } else { $value = $this->stmt->fetch(FetchMode::COLUMN); } if (($this->portability & Connection::PORTABILITY_EMPTY_TO_NULL) !== 0 && $value === '') { $value = null; } elseif (($this->portability & Connection::PORTABILITY_RTRIM) !== 0 && is_string($value)) { $value = rtrim($value); } return $value; } public function fetchAllNumeric() : array { if ($this->stmt instanceof Result) { $data = $this->stmt->fetchAllNumeric(); } else { $data = $this->stmt->fetchAll(FetchMode::NUMERIC); } return $this->fixResultSet($data, \false, \true); } public function fetchAllAssociative() : array { if ($this->stmt instanceof Result) { $data = $this->stmt->fetchAllAssociative(); } else { $data = $this->stmt->fetchAll(FetchMode::ASSOCIATIVE); } return $this->fixResultSet($data, \true, \true); } public function fetchFirstColumn() : array { if ($this->stmt instanceof Result) { $data = $this->stmt->fetchFirstColumn(); } else { $data = $this->stmt->fetchAll(FetchMode::COLUMN); } return $this->fixResultSet($data, \true, \false); } public function free() : void { if ($this->stmt instanceof Result) { $this->stmt->free(); return; } $this->stmt->closeCursor(); } private function fixResult($result, bool $fixCase) { $iterateRow = ($this->portability & (Connection::PORTABILITY_EMPTY_TO_NULL | Connection::PORTABILITY_RTRIM)) !== 0; $fixCase = $fixCase && $this->case !== null && ($this->portability & Connection::PORTABILITY_FIX_CASE) !== 0; return $this->fixRow($result, $iterateRow, $fixCase); } private function fixResultSet(array $resultSet, bool $fixCase, bool $isArray) : array { $iterateRow = ($this->portability & (Connection::PORTABILITY_EMPTY_TO_NULL | Connection::PORTABILITY_RTRIM)) !== 0; $fixCase = $fixCase && $this->case !== null && ($this->portability & Connection::PORTABILITY_FIX_CASE) !== 0; if (!$iterateRow && !$fixCase) { return $resultSet; } if (!$isArray) { foreach ($resultSet as $num => $value) { $resultSet[$num] = [$value]; } } foreach ($resultSet as $num => $row) { $resultSet[$num] = $this->fixRow($row, $iterateRow, $fixCase); } if (!$isArray) { foreach ($resultSet as $num => $row) { $resultSet[$num] = $row[0]; } } return $resultSet; } protected function fixRow($row, $iterateRow, $fixCase) { if (!$row) { return $row; } if ($fixCase) { $row = array_change_key_case($row, $this->case); } if ($iterateRow) { foreach ($row as $k => $v) { if ($this->portability & Connection::PORTABILITY_EMPTY_TO_NULL && $v === '') { $row[$k] = null; } elseif ($this->portability & Connection::PORTABILITY_RTRIM && is_string($v)) { $row[$k] = rtrim($v); } } } return $row; } public function fetchColumn($columnIndex = 0) { $value = $this->stmt->fetchColumn($columnIndex); if ($this->portability & (Connection::PORTABILITY_EMPTY_TO_NULL | Connection::PORTABILITY_RTRIM)) { if ($this->portability & Connection::PORTABILITY_EMPTY_TO_NULL && $value === '') { $value = null; } elseif ($this->portability & Connection::PORTABILITY_RTRIM && is_string($value)) { $value = rtrim($value); } } return $value; } public function rowCount() { assert($this->stmt instanceof DriverStatement); return $this->stmt->rowCount(); } }
1
  <?php
2
+ namespace MailPoetVendor\Doctrine\DBAL\Portability; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\DBAL\Driver\Result; use MailPoetVendor\Doctrine\DBAL\Driver\ResultStatement; use MailPoetVendor\Doctrine\DBAL\Driver\Statement as DriverStatement; use MailPoetVendor\Doctrine\DBAL\Driver\StatementIterator; use MailPoetVendor\Doctrine\DBAL\FetchMode; use MailPoetVendor\Doctrine\DBAL\ParameterType; use IteratorAggregate; use PDO; use MailPoetVendor\ReturnTypeWillChange; use function array_change_key_case; use function assert; use function is_string; use function rtrim; class Statement implements IteratorAggregate, DriverStatement, Result { private $portability; private $stmt; private $case; private $defaultFetchMode = FetchMode::MIXED; public function __construct($stmt, Connection $conn) { $this->stmt = $stmt; $this->portability = $conn->getPortability(); $this->case = $conn->getFetchCase(); } public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null) { assert($this->stmt instanceof DriverStatement); return $this->stmt->bindParam($param, $variable, $type, $length); } public function bindValue($param, $value, $type = ParameterType::STRING) { assert($this->stmt instanceof DriverStatement); return $this->stmt->bindValue($param, $value, $type); } public function closeCursor() { return $this->stmt->closeCursor(); } public function columnCount() { return $this->stmt->columnCount(); } public function errorCode() { assert($this->stmt instanceof DriverStatement); return $this->stmt->errorCode(); } public function errorInfo() { assert($this->stmt instanceof DriverStatement); return $this->stmt->errorInfo(); } public function execute($params = null) { assert($this->stmt instanceof DriverStatement); return $this->stmt->execute($params); } public function setFetchMode($fetchMode, $arg2 = null, $arg3 = null) { $this->defaultFetchMode = $fetchMode; return $this->stmt->setFetchMode($fetchMode, $arg2, $arg3); } public function getIterator() { return new StatementIterator($this); } public function fetch($fetchMode = null, $cursorOrientation = PDO::FETCH_ORI_NEXT, $cursorOffset = 0) { $fetchMode = $fetchMode ?: $this->defaultFetchMode; $row = $this->stmt->fetch($fetchMode); $iterateRow = ($this->portability & (Connection::PORTABILITY_EMPTY_TO_NULL | Connection::PORTABILITY_RTRIM)) !== 0; $fixCase = $this->case !== null && ($fetchMode === FetchMode::ASSOCIATIVE || $fetchMode === FetchMode::MIXED) && $this->portability & Connection::PORTABILITY_FIX_CASE; $row = $this->fixRow($row, $iterateRow, $fixCase); return $row; } public function fetchAll($fetchMode = null, $fetchArgument = null, $ctorArgs = null) { $fetchMode = $fetchMode ?: $this->defaultFetchMode; if ($fetchArgument) { $rows = $this->stmt->fetchAll($fetchMode, $fetchArgument); } else { $rows = $this->stmt->fetchAll($fetchMode); } $fixCase = $this->case !== null && ($fetchMode === FetchMode::ASSOCIATIVE || $fetchMode === FetchMode::MIXED) && $this->portability & Connection::PORTABILITY_FIX_CASE; return $this->fixResultSet($rows, $fixCase, $fetchMode !== FetchMode::COLUMN); } public function fetchNumeric() { if ($this->stmt instanceof Result) { $row = $this->stmt->fetchNumeric(); } else { $row = $this->stmt->fetch(FetchMode::NUMERIC); } return $this->fixResult($row, \false); } public function fetchAssociative() { if ($this->stmt instanceof Result) { $row = $this->stmt->fetchAssociative(); } else { $row = $this->stmt->fetch(FetchMode::ASSOCIATIVE); } return $this->fixResult($row, \true); } public function fetchOne() { if ($this->stmt instanceof Result) { $value = $this->stmt->fetchOne(); } else { $value = $this->stmt->fetch(FetchMode::COLUMN); } if (($this->portability & Connection::PORTABILITY_EMPTY_TO_NULL) !== 0 && $value === '') { $value = null; } elseif (($this->portability & Connection::PORTABILITY_RTRIM) !== 0 && is_string($value)) { $value = rtrim($value); } return $value; } public function fetchAllNumeric() : array { if ($this->stmt instanceof Result) { $data = $this->stmt->fetchAllNumeric(); } else { $data = $this->stmt->fetchAll(FetchMode::NUMERIC); } return $this->fixResultSet($data, \false, \true); } public function fetchAllAssociative() : array { if ($this->stmt instanceof Result) { $data = $this->stmt->fetchAllAssociative(); } else { $data = $this->stmt->fetchAll(FetchMode::ASSOCIATIVE); } return $this->fixResultSet($data, \true, \true); } public function fetchFirstColumn() : array { if ($this->stmt instanceof Result) { $data = $this->stmt->fetchFirstColumn(); } else { $data = $this->stmt->fetchAll(FetchMode::COLUMN); } return $this->fixResultSet($data, \true, \false); } public function free() : void { if ($this->stmt instanceof Result) { $this->stmt->free(); return; } $this->stmt->closeCursor(); } private function fixResult($result, bool $fixCase) { $iterateRow = ($this->portability & (Connection::PORTABILITY_EMPTY_TO_NULL | Connection::PORTABILITY_RTRIM)) !== 0; $fixCase = $fixCase && $this->case !== null && ($this->portability & Connection::PORTABILITY_FIX_CASE) !== 0; return $this->fixRow($result, $iterateRow, $fixCase); } private function fixResultSet(array $resultSet, bool $fixCase, bool $isArray) : array { $iterateRow = ($this->portability & (Connection::PORTABILITY_EMPTY_TO_NULL | Connection::PORTABILITY_RTRIM)) !== 0; $fixCase = $fixCase && $this->case !== null && ($this->portability & Connection::PORTABILITY_FIX_CASE) !== 0; if (!$iterateRow && !$fixCase) { return $resultSet; } if (!$isArray) { foreach ($resultSet as $num => $value) { $resultSet[$num] = [$value]; } } foreach ($resultSet as $num => $row) { $resultSet[$num] = $this->fixRow($row, $iterateRow, $fixCase); } if (!$isArray) { foreach ($resultSet as $num => $row) { $resultSet[$num] = $row[0]; } } return $resultSet; } protected function fixRow($row, $iterateRow, $fixCase) { if (!$row) { return $row; } if ($fixCase) { assert($this->case !== null); $row = array_change_key_case($row, $this->case); } if ($iterateRow) { foreach ($row as $k => $v) { if ($this->portability & Connection::PORTABILITY_EMPTY_TO_NULL && $v === '') { $row[$k] = null; } elseif ($this->portability & Connection::PORTABILITY_RTRIM && is_string($v)) { $row[$k] = rtrim($v); } } } return $row; } public function fetchColumn($columnIndex = 0) { $value = $this->stmt->fetchColumn($columnIndex); if ($this->portability & (Connection::PORTABILITY_EMPTY_TO_NULL | Connection::PORTABILITY_RTRIM)) { if ($this->portability & Connection::PORTABILITY_EMPTY_TO_NULL && $value === '') { $value = null; } elseif ($this->portability & Connection::PORTABILITY_RTRIM && is_string($value)) { $value = rtrim($value); } } return $value; } public function rowCount() { assert($this->stmt instanceof DriverStatement); return $this->stmt->rowCount(); } }
vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtils.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- namespace MailPoetVendor\Doctrine\DBAL; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\DBAL\Types\Type; use function array_fill; use function array_fill_keys; use function array_key_exists; use function array_keys; use function array_merge; use function array_slice; use function array_values; use function count; use function implode; use function is_int; use function key; use function ksort; use function preg_match_all; use function sprintf; use function strlen; use function strpos; use function substr; use const PREG_OFFSET_CAPTURE; class SQLParserUtils { public const POSITIONAL_TOKEN = '\\?'; public const NAMED_TOKEN = '(?<!:):[a-zA-Z_][a-zA-Z0-9_]*'; public const ESCAPED_SINGLE_QUOTED_TEXT = "(?:'(?:\\\\)+'|'(?:[^'\\\\]|\\\\'?|'')*')"; public const ESCAPED_DOUBLE_QUOTED_TEXT = '(?:"(?:\\\\)+"|"(?:[^"\\\\]|\\\\"?)*")'; public const ESCAPED_BACKTICK_QUOTED_TEXT = '(?:`(?:\\\\)+`|`(?:[^`\\\\]|\\\\`?)*`)'; private const ESCAPED_BRACKET_QUOTED_TEXT = '(?<!\\b(?i:ARRAY))\\[(?:[^\\]])*\\]'; public static function getPlaceholderPositions($statement, $isPositional = \true) { return $isPositional ? self::getPositionalPlaceholderPositions($statement) : self::getNamedPlaceholderPositions($statement); } private static function getPositionalPlaceholderPositions(string $statement) : array { return self::collectPlaceholders($statement, '?', self::POSITIONAL_TOKEN, static function (string $_, int $placeholderPosition, int $fragmentPosition, array &$carry) : void { $carry[] = $placeholderPosition + $fragmentPosition; }); } private static function getNamedPlaceholderPositions(string $statement) : array { return self::collectPlaceholders($statement, ':', self::NAMED_TOKEN, static function (string $placeholder, int $placeholderPosition, int $fragmentPosition, array &$carry) : void { $carry[$placeholderPosition + $fragmentPosition] = substr($placeholder, 1); }); } private static function collectPlaceholders(string $statement, string $match, string $token, callable $collector) : array { if (strpos($statement, $match) === \false) { return []; } $carry = []; foreach (self::getUnquotedStatementFragments($statement) as $fragment) { preg_match_all('/' . $token . '/', $fragment[0], $matches, \PREG_OFFSET_CAPTURE); foreach ($matches[0] as $placeholder) { $collector($placeholder[0], $placeholder[1], $fragment[1], $carry); } } return $carry; } public static function expandListParameters($query, $params, $types) { $isPositional = is_int(key($params)); $arrayPositions = []; $bindIndex = -1; if ($isPositional) { $types += array_fill_keys(array_keys($params), null); ksort($params); ksort($types); } foreach ($types as $name => $type) { ++$bindIndex; if ($type !== Connection::PARAM_INT_ARRAY && $type !== Connection::PARAM_STR_ARRAY) { continue; } if ($isPositional) { $name = $bindIndex; } $arrayPositions[$name] = \false; } if (!$arrayPositions && $isPositional) { return [$query, $params, $types]; } if ($isPositional) { $paramOffset = 0; $queryOffset = 0; $params = array_values($params); $types = array_values($types); $paramPos = self::getPositionalPlaceholderPositions($query); foreach ($paramPos as $needle => $needlePos) { if (!isset($arrayPositions[$needle])) { continue; } $needle += $paramOffset; $needlePos += $queryOffset; $count = count($params[$needle]); $params = array_merge(array_slice($params, 0, $needle), $params[$needle], array_slice($params, $needle + 1)); $types = array_merge(array_slice($types, 0, $needle), $count ? array_fill(0, $count, $types[$needle] - Connection::ARRAY_PARAM_OFFSET) : [], array_slice($types, $needle + 1)); $expandStr = $count ? implode(', ', array_fill(0, $count, '?')) : 'NULL'; $query = substr($query, 0, $needlePos) . $expandStr . substr($query, $needlePos + 1); $paramOffset += $count - 1; $queryOffset += strlen($expandStr) - 1; } return [$query, $params, $types]; } $queryOffset = 0; $typesOrd = []; $paramsOrd = []; $paramPos = self::getNamedPlaceholderPositions($query); foreach ($paramPos as $pos => $paramName) { $paramLen = strlen($paramName) + 1; $value = static::extractParam($paramName, $params, \true); if (!isset($arrayPositions[$paramName]) && !isset($arrayPositions[':' . $paramName])) { $pos += $queryOffset; $queryOffset -= $paramLen - 1; $paramsOrd[] = $value; $typesOrd[] = static::extractParam($paramName, $types, \false, ParameterType::STRING); $query = substr($query, 0, $pos) . '?' . substr($query, $pos + $paramLen); continue; } $count = count($value); $expandStr = $count > 0 ? implode(', ', array_fill(0, $count, '?')) : 'NULL'; foreach ($value as $val) { $paramsOrd[] = $val; $typesOrd[] = static::extractParam($paramName, $types, \false) - Connection::ARRAY_PARAM_OFFSET; } $pos += $queryOffset; $queryOffset += strlen($expandStr) - $paramLen; $query = substr($query, 0, $pos) . $expandStr . substr($query, $pos + $paramLen); } return [$query, $paramsOrd, $typesOrd]; } private static function getUnquotedStatementFragments($statement) { $literal = self::ESCAPED_SINGLE_QUOTED_TEXT . '|' . self::ESCAPED_DOUBLE_QUOTED_TEXT . '|' . self::ESCAPED_BACKTICK_QUOTED_TEXT . '|' . self::ESCAPED_BRACKET_QUOTED_TEXT; $expression = sprintf('/((.+(?i:ARRAY)\\[.+\\])|([^\'"`\\[]+))(?:%s)?/s', $literal); preg_match_all($expression, $statement, $fragments, \PREG_OFFSET_CAPTURE); return $fragments[1]; } private static function extractParam($paramName, $paramsOrTypes, $isParam, $defaultValue = null) { if (array_key_exists($paramName, $paramsOrTypes)) { return $paramsOrTypes[$paramName]; } if (array_key_exists(':' . $paramName, $paramsOrTypes)) { return $paramsOrTypes[':' . $paramName]; } if ($defaultValue !== null) { return $defaultValue; } if ($isParam) { throw SQLParserUtilsException::missingParam($paramName); } throw SQLParserUtilsException::missingType($paramName); } }
1
  <?php
2
+ namespace MailPoetVendor\Doctrine\DBAL; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\DBAL\Types\Type; use function array_fill; use function array_fill_keys; use function array_key_exists; use function array_keys; use function array_merge; use function array_slice; use function array_values; use function count; use function implode; use function is_int; use function key; use function ksort; use function preg_match_all; use function sprintf; use function strlen; use function strpos; use function substr; use const PREG_OFFSET_CAPTURE; class SQLParserUtils { public const POSITIONAL_TOKEN = '\\?'; public const NAMED_TOKEN = '(?<!:):[a-zA-Z_][a-zA-Z0-9_]*'; public const ESCAPED_SINGLE_QUOTED_TEXT = "(?:'(?:\\\\)+'|'(?:[^'\\\\]|\\\\'?|'')*')"; public const ESCAPED_DOUBLE_QUOTED_TEXT = '(?:"(?:\\\\)+"|"(?:[^"\\\\]|\\\\"?)*")'; public const ESCAPED_BACKTICK_QUOTED_TEXT = '(?:`(?:\\\\)+`|`(?:[^`\\\\]|\\\\`?)*`)'; private const ESCAPED_BRACKET_QUOTED_TEXT = '(?<!\\b(?i:ARRAY))\\[(?:[^\\]])*\\]'; public static function getPlaceholderPositions($statement, $isPositional = \true) { return $isPositional ? self::getPositionalPlaceholderPositions($statement) : self::getNamedPlaceholderPositions($statement); } private static function getPositionalPlaceholderPositions(string $statement) : array { return self::collectPlaceholders($statement, '?', self::POSITIONAL_TOKEN, static function (string $_, int $placeholderPosition, int $fragmentPosition, array &$carry) : void { $carry[] = $placeholderPosition + $fragmentPosition; }); } private static function getNamedPlaceholderPositions(string $statement) : array { return self::collectPlaceholders($statement, ':', self::NAMED_TOKEN, static function (string $placeholder, int $placeholderPosition, int $fragmentPosition, array &$carry) : void { $carry[$placeholderPosition + $fragmentPosition] = substr($placeholder, 1); }); } private static function collectPlaceholders(string $statement, string $match, string $token, callable $collector) : array { if (strpos($statement, $match) === \false) { return []; } $carry = []; foreach (self::getUnquotedStatementFragments($statement) as $fragment) { preg_match_all('/' . $token . '/', $fragment[0], $matches, \PREG_OFFSET_CAPTURE); foreach ($matches[0] as $placeholder) { $collector($placeholder[0], $placeholder[1], $fragment[1], $carry); } } return $carry; } public static function expandListParameters($query, $params, $types) { $isPositional = is_int(key($params)); $arrayPositions = []; $bindIndex = -1; if ($isPositional) { $types += array_fill_keys(array_keys($params), null); ksort($params); ksort($types); } foreach ($types as $name => $type) { ++$bindIndex; if ($type !== Connection::PARAM_INT_ARRAY && $type !== Connection::PARAM_STR_ARRAY) { continue; } if ($isPositional) { $name = $bindIndex; } $arrayPositions[$name] = \false; } if (!$arrayPositions && $isPositional) { return [$query, $params, $types]; } if ($isPositional) { $paramOffset = 0; $queryOffset = 0; $params = array_values($params); $types = array_values($types); $paramPos = self::getPositionalPlaceholderPositions($query); foreach ($paramPos as $needle => $needlePos) { if (!isset($arrayPositions[$needle])) { continue; } $needle += $paramOffset; $needlePos += $queryOffset; $count = count($params[$needle]); $params = array_merge(array_slice($params, 0, $needle), $params[$needle], array_slice($params, $needle + 1)); $types = array_merge(array_slice($types, 0, $needle), $count ? array_fill(0, $count, $types[$needle] - Connection::ARRAY_PARAM_OFFSET) : [], array_slice($types, $needle + 1)); $expandStr = $count ? implode(', ', array_fill(0, $count, '?')) : 'NULL'; $query = substr($query, 0, $needlePos) . $expandStr . substr($query, $needlePos + 1); $paramOffset += $count - 1; $queryOffset += strlen($expandStr) - 1; } return [$query, $params, $types]; } $queryOffset = 0; $typesOrd = []; $paramsOrd = []; $paramPos = self::getNamedPlaceholderPositions($query); foreach ($paramPos as $pos => $paramName) { $paramLen = strlen($paramName) + 1; $value = self::extractParam($paramName, $params, \true); if (!isset($arrayPositions[$paramName]) && !isset($arrayPositions[':' . $paramName])) { $pos += $queryOffset; $queryOffset -= $paramLen - 1; $paramsOrd[] = $value; $typesOrd[] = self::extractParam($paramName, $types, \false, ParameterType::STRING); $query = substr($query, 0, $pos) . '?' . substr($query, $pos + $paramLen); continue; } $count = count($value); $expandStr = $count > 0 ? implode(', ', array_fill(0, $count, '?')) : 'NULL'; foreach ($value as $val) { $paramsOrd[] = $val; $typesOrd[] = self::extractParam($paramName, $types, \false) - Connection::ARRAY_PARAM_OFFSET; } $pos += $queryOffset; $queryOffset += strlen($expandStr) - $paramLen; $query = substr($query, 0, $pos) . $expandStr . substr($query, $pos + $paramLen); } return [$query, $paramsOrd, $typesOrd]; } private static function getUnquotedStatementFragments($statement) { $literal = self::ESCAPED_SINGLE_QUOTED_TEXT . '|' . self::ESCAPED_DOUBLE_QUOTED_TEXT . '|' . self::ESCAPED_BACKTICK_QUOTED_TEXT . '|' . self::ESCAPED_BRACKET_QUOTED_TEXT; $expression = sprintf('/((.+(?i:ARRAY)\\[.+\\])|([^\'"`\\[]+))(?:%s)?/s', $literal); preg_match_all($expression, $statement, $fragments, \PREG_OFFSET_CAPTURE); return $fragments[1]; } private static function extractParam($paramName, $paramsOrTypes, $isParam, $defaultValue = null) { if (array_key_exists($paramName, $paramsOrTypes)) { return $paramsOrTypes[$paramName]; } if (array_key_exists(':' . $paramName, $paramsOrTypes)) { return $paramsOrTypes[':' . $paramName]; } if ($defaultValue !== null) { return $defaultValue; } if ($isParam) { throw SQLParserUtilsException::missingParam($paramName); } throw SQLParserUtilsException::missingType($paramName); } }
vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DecimalType.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- namespace MailPoetVendor\Doctrine\DBAL\Types; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\DBAL\Platforms\AbstractPlatform; use function is_float; use const PHP_VERSION_ID; class DecimalType extends Type { public function getName() { return Types::DECIMAL; } public function getSQLDeclaration(array $column, AbstractPlatform $platform) { return $platform->getDecimalTypeDeclarationSQL($column); } public function convertToPHPValue($value, AbstractPlatform $platform) { if (\PHP_VERSION_ID >= 80100 && is_float($value)) { return (string) $value; } return $value; } }
1
  <?php
2
+ namespace MailPoetVendor\Doctrine\DBAL\Types; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\DBAL\Platforms\AbstractPlatform; use function is_float; use function is_int; use const PHP_VERSION_ID; class DecimalType extends Type { public function getName() { return Types::DECIMAL; } public function getSQLDeclaration(array $column, AbstractPlatform $platform) { return $platform->getDecimalTypeDeclarationSQL($column); } public function convertToPHPValue($value, AbstractPlatform $platform) { if (\PHP_VERSION_ID >= 80100 && (is_float($value) || is_int($value))) { return (string) $value; } return $value; } }
vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Version.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- namespace MailPoetVendor\Doctrine\DBAL; if (!defined('ABSPATH')) exit; use function str_replace; use function strtoupper; use function version_compare; class Version { public const VERSION = '2.13.4'; public static function compare($version) { $version = str_replace(' ', '', strtoupper($version)); return version_compare($version, self::VERSION); } }
1
  <?php
2
+ namespace MailPoetVendor\Doctrine\DBAL; if (!defined('ABSPATH')) exit; use function str_replace; use function strtoupper; use function version_compare; class Version { public const VERSION = '2.13.7-dev'; public static function compare($version) { $version = str_replace(' ', '', strtoupper($version)); return version_compare($version, self::VERSION); } }
vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- declare (strict_types=1); namespace MailPoetVendor\Doctrine\ORM\Cache\Persister\Entity; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\Common\Collections\Criteria; use MailPoetVendor\Doctrine\Common\Util\ClassUtils; use MailPoetVendor\Doctrine\ORM\Cache; use MailPoetVendor\Doctrine\ORM\Cache\CollectionCacheKey; use MailPoetVendor\Doctrine\ORM\Cache\EntityCacheKey; use MailPoetVendor\Doctrine\ORM\Cache\EntityHydrator; use MailPoetVendor\Doctrine\ORM\Cache\Logging\CacheLogger; use MailPoetVendor\Doctrine\ORM\Cache\Persister\CachedPersister; use MailPoetVendor\Doctrine\ORM\Cache\QueryCacheKey; use MailPoetVendor\Doctrine\ORM\Cache\Region; use MailPoetVendor\Doctrine\ORM\Cache\TimestampCacheKey; use MailPoetVendor\Doctrine\ORM\Cache\TimestampRegion; use MailPoetVendor\Doctrine\ORM\EntityManagerInterface; use MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadata; use MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadataFactory; use MailPoetVendor\Doctrine\ORM\PersistentCollection; use MailPoetVendor\Doctrine\ORM\Persisters\Entity\EntityPersister; use MailPoetVendor\Doctrine\ORM\UnitOfWork; use function assert; use function serialize; use function sha1; abstract class AbstractEntityPersister implements CachedEntityPersister { protected $uow; protected $metadataFactory; protected $persister; protected $class; protected $queuedCache = []; protected $region; protected $timestampRegion; protected $timestampKey; protected $hydrator; protected $cache; protected $cacheLogger; protected $regionName; protected $joinedAssociations; public function __construct(EntityPersister $persister, Region $region, EntityManagerInterface $em, ClassMetadata $class) { $configuration = $em->getConfiguration(); $cacheConfig = $configuration->getSecondLevelCacheConfiguration(); $cacheFactory = $cacheConfig->getCacheFactory(); $this->class = $class; $this->region = $region; $this->persister = $persister; $this->cache = $em->getCache(); $this->regionName = $region->getName(); $this->uow = $em->getUnitOfWork(); $this->metadataFactory = $em->getMetadataFactory(); $this->cacheLogger = $cacheConfig->getCacheLogger(); $this->timestampRegion = $cacheFactory->getTimestampRegion(); $this->hydrator = $cacheFactory->buildEntityHydrator($em, $class); $this->timestampKey = new TimestampCacheKey($this->class->rootEntityName); } public function addInsert($entity) { $this->persister->addInsert($entity); } public function getInserts() { return $this->persister->getInserts(); } public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit = null, $offset = null, ?array $orderBy = null) { return $this->persister->getSelectSQL($criteria, $assoc, $lockMode, $limit, $offset, $orderBy); } public function getCountSQL($criteria = []) { return $this->persister->getCountSQL($criteria); } public function getInsertSQL() { return $this->persister->getInsertSQL(); } public function getResultSetMapping() { return $this->persister->getResultSetMapping(); } public function getSelectConditionStatementSQL($field, $value, $assoc = null, $comparison = null) { return $this->persister->getSelectConditionStatementSQL($field, $value, $assoc, $comparison); } public function exists($entity, ?Criteria $extraConditions = null) { if ($extraConditions === null) { $key = new EntityCacheKey($this->class->rootEntityName, $this->class->getIdentifierValues($entity)); if ($this->region->contains($key)) { return \true; } } return $this->persister->exists($entity, $extraConditions); } public function getCacheRegion() { return $this->region; } public function getEntityHydrator() { return $this->hydrator; } public function storeEntityCache($entity, EntityCacheKey $key) { $class = $this->class; $className = ClassUtils::getClass($entity); if ($className !== $this->class->name) { $class = $this->metadataFactory->getMetadataFor($className); } $entry = $this->hydrator->buildCacheEntry($class, $key, $entity); $cached = $this->region->put($key, $entry); if ($this->cacheLogger && $cached) { $this->cacheLogger->entityCachePut($this->regionName, $key); } return $cached; } private function storeJoinedAssociations($entity) : void { if ($this->joinedAssociations === null) { $associations = []; foreach ($this->class->associationMappings as $name => $assoc) { if (isset($assoc['cache']) && $assoc['type'] & ClassMetadata::TO_ONE && ($assoc['fetch'] === ClassMetadata::FETCH_EAGER || !$assoc['isOwningSide'])) { $associations[] = $name; } } $this->joinedAssociations = $associations; } foreach ($this->joinedAssociations as $name) { $assoc = $this->class->associationMappings[$name]; $assocEntity = $this->class->getFieldValue($entity, $name); if ($assocEntity === null) { continue; } $assocId = $this->uow->getEntityIdentifier($assocEntity); $assocMetadata = $this->metadataFactory->getMetadataFor($assoc['targetEntity']); $assocKey = new EntityCacheKey($assocMetadata->rootEntityName, $assocId); $assocPersister = $this->uow->getEntityPersister($assoc['targetEntity']); $assocPersister->storeEntityCache($assocEntity, $assocKey); } } protected function getHash($query, $criteria, ?array $orderBy = null, $limit = null, $offset = null) { [$params] = $criteria instanceof Criteria ? $this->persister->expandCriteriaParameters($criteria) : $this->persister->expandParameters($criteria); return sha1($query . serialize($params) . serialize($orderBy) . $limit . $offset); } public function expandParameters($criteria) { return $this->persister->expandParameters($criteria); } public function expandCriteriaParameters(Criteria $criteria) { return $this->persister->expandCriteriaParameters($criteria); } public function getClassMetadata() { return $this->persister->getClassMetadata(); } public function getManyToManyCollection(array $assoc, $sourceEntity, $offset = null, $limit = null) { return $this->persister->getManyToManyCollection($assoc, $sourceEntity, $offset, $limit); } public function getOneToManyCollection(array $assoc, $sourceEntity, $offset = null, $limit = null) { return $this->persister->getOneToManyCollection($assoc, $sourceEntity, $offset, $limit); } public function getOwningTable($fieldName) { return $this->persister->getOwningTable($fieldName); } public function executeInserts() { $this->queuedCache['insert'] = $this->persister->getInserts(); return $this->persister->executeInserts(); } public function load(array $criteria, $entity = null, $assoc = null, array $hints = [], $lockMode = null, $limit = null, ?array $orderBy = null) { if ($entity !== null || $assoc !== null || $hints !== [] || $lockMode !== null) { return $this->persister->load($criteria, $entity, $assoc, $hints, $lockMode, $limit, $orderBy); } $query = $this->persister->getSelectSQL($criteria, null, null, $limit, null, $orderBy); $hash = $this->getHash($query, $criteria, null, null, null); $rsm = $this->getResultSetMapping(); $queryKey = new QueryCacheKey($hash, 0, Cache::MODE_NORMAL, $this->timestampKey); $queryCache = $this->cache->getQueryCache($this->regionName); $result = $queryCache->get($queryKey, $rsm); if ($result !== null) { if ($this->cacheLogger) { $this->cacheLogger->queryCacheHit($this->regionName, $queryKey); } return $result[0]; } $result = $this->persister->load($criteria, $entity, $assoc, $hints, $lockMode, $limit, $orderBy); if ($result === null) { return null; } $cached = $queryCache->put($queryKey, $rsm, [$result]); if ($this->cacheLogger) { if ($result) { $this->cacheLogger->queryCacheMiss($this->regionName, $queryKey); } if ($cached) { $this->cacheLogger->queryCachePut($this->regionName, $queryKey); } } return $result; } public function loadAll(array $criteria = [], ?array $orderBy = null, $limit = null, $offset = null) { $query = $this->persister->getSelectSQL($criteria, null, null, $limit, $offset, $orderBy); $hash = $this->getHash($query, $criteria, null, null, null); $rsm = $this->getResultSetMapping(); $queryKey = new QueryCacheKey($hash, 0, Cache::MODE_NORMAL, $this->timestampKey); $queryCache = $this->cache->getQueryCache($this->regionName); $result = $queryCache->get($queryKey, $rsm); if ($result !== null) { if ($this->cacheLogger) { $this->cacheLogger->queryCacheHit($this->regionName, $queryKey); } return $result; } $result = $this->persister->loadAll($criteria, $orderBy, $limit, $offset); $cached = $queryCache->put($queryKey, $rsm, $result); if ($this->cacheLogger) { if ($result) { $this->cacheLogger->queryCacheMiss($this->regionName, $queryKey); } if ($cached) { $this->cacheLogger->queryCachePut($this->regionName, $queryKey); } } return $result; } public function loadById(array $identifier, $entity = null) { $cacheKey = new EntityCacheKey($this->class->rootEntityName, $identifier); $cacheEntry = $this->region->get($cacheKey); $class = $this->class; if ($cacheEntry !== null) { if ($cacheEntry->class !== $this->class->name) { $class = $this->metadataFactory->getMetadataFor($cacheEntry->class); } $cachedEntity = $this->hydrator->loadCacheEntry($class, $cacheKey, $cacheEntry, $entity); if ($cachedEntity !== null) { if ($this->cacheLogger) { $this->cacheLogger->entityCacheHit($this->regionName, $cacheKey); } return $cachedEntity; } } $entity = $this->persister->loadById($identifier, $entity); if ($entity === null) { return null; } $class = $this->class; $className = ClassUtils::getClass($entity); if ($className !== $this->class->name) { $class = $this->metadataFactory->getMetadataFor($className); } $cacheEntry = $this->hydrator->buildCacheEntry($class, $cacheKey, $entity); $cached = $this->region->put($cacheKey, $cacheEntry); if ($cached && ($this->joinedAssociations === null || $this->joinedAssociations)) { $this->storeJoinedAssociations($entity); } if ($this->cacheLogger) { if ($cached) { $this->cacheLogger->entityCachePut($this->regionName, $cacheKey); } $this->cacheLogger->entityCacheMiss($this->regionName, $cacheKey); } return $entity; } public function count($criteria = []) { return $this->persister->count($criteria); } public function loadCriteria(Criteria $criteria) { $orderBy = $criteria->getOrderings(); $limit = $criteria->getMaxResults(); $offset = $criteria->getFirstResult(); $query = $this->persister->getSelectSQL($criteria); $hash = $this->getHash($query, $criteria, $orderBy, $limit, $offset); $rsm = $this->getResultSetMapping(); $queryKey = new QueryCacheKey($hash, 0, Cache::MODE_NORMAL, $this->timestampKey); $queryCache = $this->cache->getQueryCache($this->regionName); $cacheResult = $queryCache->get($queryKey, $rsm); if ($cacheResult !== null) { if ($this->cacheLogger) { $this->cacheLogger->queryCacheHit($this->regionName, $queryKey); } return $cacheResult; } $result = $this->persister->loadCriteria($criteria); $cached = $queryCache->put($queryKey, $rsm, $result); if ($this->cacheLogger) { if ($result) { $this->cacheLogger->queryCacheMiss($this->regionName, $queryKey); } if ($cached) { $this->cacheLogger->queryCachePut($this->regionName, $queryKey); } } return $result; } public function loadManyToManyCollection(array $assoc, $sourceEntity, PersistentCollection $collection) { $persister = $this->uow->getCollectionPersister($assoc); $hasCache = $persister instanceof CachedPersister; if (!$hasCache) { return $this->persister->loadManyToManyCollection($assoc, $sourceEntity, $collection); } $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); $key = $this->buildCollectionCacheKey($assoc, $ownerId); $list = $persister->loadCollectionCache($collection, $key); if ($list !== null) { if ($this->cacheLogger) { $this->cacheLogger->collectionCacheHit($persister->getCacheRegion()->getName(), $key); } return $list; } $list = $this->persister->loadManyToManyCollection($assoc, $sourceEntity, $collection); $persister->storeCollectionCache($key, $list); if ($this->cacheLogger) { $this->cacheLogger->collectionCacheMiss($persister->getCacheRegion()->getName(), $key); } return $list; } public function loadOneToManyCollection(array $assoc, $sourceEntity, PersistentCollection $collection) { $persister = $this->uow->getCollectionPersister($assoc); $hasCache = $persister instanceof CachedPersister; if (!$hasCache) { return $this->persister->loadOneToManyCollection($assoc, $sourceEntity, $collection); } $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); $key = $this->buildCollectionCacheKey($assoc, $ownerId); $list = $persister->loadCollectionCache($collection, $key); if ($list !== null) { if ($this->cacheLogger) { $this->cacheLogger->collectionCacheHit($persister->getCacheRegion()->getName(), $key); } return $list; } $list = $this->persister->loadOneToManyCollection($assoc, $sourceEntity, $collection); $persister->storeCollectionCache($key, $list); if ($this->cacheLogger) { $this->cacheLogger->collectionCacheMiss($persister->getCacheRegion()->getName(), $key); } return $list; } public function loadOneToOneEntity(array $assoc, $sourceEntity, array $identifier = []) { return $this->persister->loadOneToOneEntity($assoc, $sourceEntity, $identifier); } public function lock(array $criteria, $lockMode) { $this->persister->lock($criteria, $lockMode); } public function refresh(array $id, $entity, $lockMode = null) { $this->persister->refresh($id, $entity, $lockMode); } protected function buildCollectionCacheKey(array $association, $ownerId) { $metadata = $this->metadataFactory->getMetadataFor($association['sourceEntity']); assert($metadata instanceof ClassMetadata); return new CollectionCacheKey($metadata->rootEntityName, $association['fieldName'], $ownerId); } }
1
  <?php
2
+ declare (strict_types=1); namespace MailPoetVendor\Doctrine\ORM\Cache\Persister\Entity; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\Common\Collections\Criteria; use MailPoetVendor\Doctrine\Common\Util\ClassUtils; use MailPoetVendor\Doctrine\ORM\Cache; use MailPoetVendor\Doctrine\ORM\Cache\CollectionCacheKey; use MailPoetVendor\Doctrine\ORM\Cache\EntityCacheKey; use MailPoetVendor\Doctrine\ORM\Cache\EntityHydrator; use MailPoetVendor\Doctrine\ORM\Cache\Logging\CacheLogger; use MailPoetVendor\Doctrine\ORM\Cache\Persister\CachedPersister; use MailPoetVendor\Doctrine\ORM\Cache\QueryCacheKey; use MailPoetVendor\Doctrine\ORM\Cache\Region; use MailPoetVendor\Doctrine\ORM\Cache\TimestampCacheKey; use MailPoetVendor\Doctrine\ORM\Cache\TimestampRegion; use MailPoetVendor\Doctrine\ORM\EntityManagerInterface; use MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadata; use MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadataFactory; use MailPoetVendor\Doctrine\ORM\PersistentCollection; use MailPoetVendor\Doctrine\ORM\Persisters\Entity\EntityPersister; use MailPoetVendor\Doctrine\ORM\UnitOfWork; use function assert; use function serialize; use function sha1; abstract class AbstractEntityPersister implements CachedEntityPersister { protected $uow; protected $metadataFactory; protected $persister; protected $class; protected $queuedCache = []; protected $region; protected $timestampRegion; protected $timestampKey; protected $hydrator; protected $cache; protected $cacheLogger; protected $regionName; protected $joinedAssociations; public function __construct(EntityPersister $persister, Region $region, EntityManagerInterface $em, ClassMetadata $class) { $configuration = $em->getConfiguration(); $cacheConfig = $configuration->getSecondLevelCacheConfiguration(); $cacheFactory = $cacheConfig->getCacheFactory(); $this->class = $class; $this->region = $region; $this->persister = $persister; $this->cache = $em->getCache(); $this->regionName = $region->getName(); $this->uow = $em->getUnitOfWork(); $this->metadataFactory = $em->getMetadataFactory(); $this->cacheLogger = $cacheConfig->getCacheLogger(); $this->timestampRegion = $cacheFactory->getTimestampRegion(); $this->hydrator = $cacheFactory->buildEntityHydrator($em, $class); $this->timestampKey = new TimestampCacheKey($this->class->rootEntityName); } public function addInsert($entity) { $this->persister->addInsert($entity); } public function getInserts() { return $this->persister->getInserts(); } public function getSelectSQL($criteria, $assoc = null, $lockMode = null, $limit = null, $offset = null, ?array $orderBy = null) { return $this->persister->getSelectSQL($criteria, $assoc, $lockMode, $limit, $offset, $orderBy); } public function getCountSQL($criteria = []) { return $this->persister->getCountSQL($criteria); } public function getInsertSQL() { return $this->persister->getInsertSQL(); } public function getResultSetMapping() { return $this->persister->getResultSetMapping(); } public function getSelectConditionStatementSQL($field, $value, $assoc = null, $comparison = null) { return $this->persister->getSelectConditionStatementSQL($field, $value, $assoc, $comparison); } public function exists($entity, ?Criteria $extraConditions = null) { if ($extraConditions === null) { $key = new EntityCacheKey($this->class->rootEntityName, $this->class->getIdentifierValues($entity)); if ($this->region->contains($key)) { return \true; } } return $this->persister->exists($entity, $extraConditions); } public function getCacheRegion() { return $this->region; } public function getEntityHydrator() { return $this->hydrator; } public function storeEntityCache($entity, EntityCacheKey $key) { $class = $this->class; $className = ClassUtils::getClass($entity); if ($className !== $this->class->name) { $class = $this->metadataFactory->getMetadataFor($className); } $entry = $this->hydrator->buildCacheEntry($class, $key, $entity); $cached = $this->region->put($key, $entry); if ($this->cacheLogger && $cached) { $this->cacheLogger->entityCachePut($this->regionName, $key); } return $cached; } private function storeJoinedAssociations($entity) : void { if ($this->joinedAssociations === null) { $associations = []; foreach ($this->class->associationMappings as $name => $assoc) { if (isset($assoc['cache']) && $assoc['type'] & ClassMetadata::TO_ONE && ($assoc['fetch'] === ClassMetadata::FETCH_EAGER || !$assoc['isOwningSide'])) { $associations[] = $name; } } $this->joinedAssociations = $associations; } foreach ($this->joinedAssociations as $name) { $assoc = $this->class->associationMappings[$name]; $assocEntity = $this->class->getFieldValue($entity, $name); if ($assocEntity === null) { continue; } $assocId = $this->uow->getEntityIdentifier($assocEntity); $assocMetadata = $this->metadataFactory->getMetadataFor($assoc['targetEntity']); $assocKey = new EntityCacheKey($assocMetadata->rootEntityName, $assocId); $assocPersister = $this->uow->getEntityPersister($assoc['targetEntity']); $assocPersister->storeEntityCache($assocEntity, $assocKey); } } protected function getHash($query, $criteria, ?array $orderBy = null, $limit = null, $offset = null) { [$params] = $criteria instanceof Criteria ? $this->persister->expandCriteriaParameters($criteria) : $this->persister->expandParameters($criteria); return sha1($query . serialize($params) . serialize($orderBy) . $limit . $offset); } public function expandParameters($criteria) { return $this->persister->expandParameters($criteria); } public function expandCriteriaParameters(Criteria $criteria) { return $this->persister->expandCriteriaParameters($criteria); } public function getClassMetadata() { return $this->persister->getClassMetadata(); } public function getManyToManyCollection(array $assoc, $sourceEntity, $offset = null, $limit = null) { return $this->persister->getManyToManyCollection($assoc, $sourceEntity, $offset, $limit); } public function getOneToManyCollection(array $assoc, $sourceEntity, $offset = null, $limit = null) { return $this->persister->getOneToManyCollection($assoc, $sourceEntity, $offset, $limit); } public function getOwningTable($fieldName) { return $this->persister->getOwningTable($fieldName); } public function executeInserts() { $this->queuedCache['insert'] = $this->persister->getInserts(); return $this->persister->executeInserts(); } public function load(array $criteria, $entity = null, $assoc = null, array $hints = [], $lockMode = null, $limit = null, ?array $orderBy = null) { if ($entity !== null || $assoc !== null || $hints !== [] || $lockMode !== null) { return $this->persister->load($criteria, $entity, $assoc, $hints, $lockMode, $limit, $orderBy); } $query = $this->persister->getSelectSQL($criteria, null, null, $limit, null, $orderBy); $hash = $this->getHash($query, $criteria, null, null, null); $rsm = $this->getResultSetMapping(); $queryKey = new QueryCacheKey($hash, 0, Cache::MODE_NORMAL, $this->timestampKey); $queryCache = $this->cache->getQueryCache($this->regionName); $result = $queryCache->get($queryKey, $rsm); if ($result !== null) { if ($this->cacheLogger) { $this->cacheLogger->queryCacheHit($this->regionName, $queryKey); } return $result[0]; } $result = $this->persister->load($criteria, $entity, $assoc, $hints, $lockMode, $limit, $orderBy); if ($result === null) { return null; } $cached = $queryCache->put($queryKey, $rsm, [$result]); if ($this->cacheLogger) { $this->cacheLogger->queryCacheMiss($this->regionName, $queryKey); if ($cached) { $this->cacheLogger->queryCachePut($this->regionName, $queryKey); } } return $result; } public function loadAll(array $criteria = [], ?array $orderBy = null, $limit = null, $offset = null) { $query = $this->persister->getSelectSQL($criteria, null, null, $limit, $offset, $orderBy); $hash = $this->getHash($query, $criteria, null, null, null); $rsm = $this->getResultSetMapping(); $queryKey = new QueryCacheKey($hash, 0, Cache::MODE_NORMAL, $this->timestampKey); $queryCache = $this->cache->getQueryCache($this->regionName); $result = $queryCache->get($queryKey, $rsm); if ($result !== null) { if ($this->cacheLogger) { $this->cacheLogger->queryCacheHit($this->regionName, $queryKey); } return $result; } $result = $this->persister->loadAll($criteria, $orderBy, $limit, $offset); $cached = $queryCache->put($queryKey, $rsm, $result); if ($this->cacheLogger) { if ($result) { $this->cacheLogger->queryCacheMiss($this->regionName, $queryKey); } if ($cached) { $this->cacheLogger->queryCachePut($this->regionName, $queryKey); } } return $result; } public function loadById(array $identifier, $entity = null) { $cacheKey = new EntityCacheKey($this->class->rootEntityName, $identifier); $cacheEntry = $this->region->get($cacheKey); $class = $this->class; if ($cacheEntry !== null) { if ($cacheEntry->class !== $this->class->name) { $class = $this->metadataFactory->getMetadataFor($cacheEntry->class); } $cachedEntity = $this->hydrator->loadCacheEntry($class, $cacheKey, $cacheEntry, $entity); if ($cachedEntity !== null) { if ($this->cacheLogger) { $this->cacheLogger->entityCacheHit($this->regionName, $cacheKey); } return $cachedEntity; } } $entity = $this->persister->loadById($identifier, $entity); if ($entity === null) { return null; } $class = $this->class; $className = ClassUtils::getClass($entity); if ($className !== $this->class->name) { $class = $this->metadataFactory->getMetadataFor($className); } $cacheEntry = $this->hydrator->buildCacheEntry($class, $cacheKey, $entity); $cached = $this->region->put($cacheKey, $cacheEntry); if ($cached && ($this->joinedAssociations === null || $this->joinedAssociations)) { $this->storeJoinedAssociations($entity); } if ($this->cacheLogger) { if ($cached) { $this->cacheLogger->entityCachePut($this->regionName, $cacheKey); } $this->cacheLogger->entityCacheMiss($this->regionName, $cacheKey); } return $entity; } public function count($criteria = []) { return $this->persister->count($criteria); } public function loadCriteria(Criteria $criteria) { $orderBy = $criteria->getOrderings(); $limit = $criteria->getMaxResults(); $offset = $criteria->getFirstResult(); $query = $this->persister->getSelectSQL($criteria); $hash = $this->getHash($query, $criteria, $orderBy, $limit, $offset); $rsm = $this->getResultSetMapping(); $queryKey = new QueryCacheKey($hash, 0, Cache::MODE_NORMAL, $this->timestampKey); $queryCache = $this->cache->getQueryCache($this->regionName); $cacheResult = $queryCache->get($queryKey, $rsm); if ($cacheResult !== null) { if ($this->cacheLogger) { $this->cacheLogger->queryCacheHit($this->regionName, $queryKey); } return $cacheResult; } $result = $this->persister->loadCriteria($criteria); $cached = $queryCache->put($queryKey, $rsm, $result); if ($this->cacheLogger) { if ($result) { $this->cacheLogger->queryCacheMiss($this->regionName, $queryKey); } if ($cached) { $this->cacheLogger->queryCachePut($this->regionName, $queryKey); } } return $result; } public function loadManyToManyCollection(array $assoc, $sourceEntity, PersistentCollection $collection) { $persister = $this->uow->getCollectionPersister($assoc); $hasCache = $persister instanceof CachedPersister; if (!$hasCache) { return $this->persister->loadManyToManyCollection($assoc, $sourceEntity, $collection); } $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); $key = $this->buildCollectionCacheKey($assoc, $ownerId); $list = $persister->loadCollectionCache($collection, $key); if ($list !== null) { if ($this->cacheLogger) { $this->cacheLogger->collectionCacheHit($persister->getCacheRegion()->getName(), $key); } return $list; } $list = $this->persister->loadManyToManyCollection($assoc, $sourceEntity, $collection); $persister->storeCollectionCache($key, $list); if ($this->cacheLogger) { $this->cacheLogger->collectionCacheMiss($persister->getCacheRegion()->getName(), $key); } return $list; } public function loadOneToManyCollection(array $assoc, $sourceEntity, PersistentCollection $collection) { $persister = $this->uow->getCollectionPersister($assoc); $hasCache = $persister instanceof CachedPersister; if (!$hasCache) { return $this->persister->loadOneToManyCollection($assoc, $sourceEntity, $collection); } $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); $key = $this->buildCollectionCacheKey($assoc, $ownerId); $list = $persister->loadCollectionCache($collection, $key); if ($list !== null) { if ($this->cacheLogger) { $this->cacheLogger->collectionCacheHit($persister->getCacheRegion()->getName(), $key); } return $list; } $list = $this->persister->loadOneToManyCollection($assoc, $sourceEntity, $collection); $persister->storeCollectionCache($key, $list); if ($this->cacheLogger) { $this->cacheLogger->collectionCacheMiss($persister->getCacheRegion()->getName(), $key); } return $list; } public function loadOneToOneEntity(array $assoc, $sourceEntity, array $identifier = []) { return $this->persister->loadOneToOneEntity($assoc, $sourceEntity, $identifier); } public function lock(array $criteria, $lockMode) { $this->persister->lock($criteria, $lockMode); } public function refresh(array $id, $entity, $lockMode = null) { $this->persister->refresh($id, $entity, $lockMode); } protected function buildCollectionCacheKey(array $association, $ownerId) { $metadata = $this->metadataFactory->getMetadataFor($association['sourceEntity']); assert($metadata instanceof ClassMetadata); return new CollectionCacheKey($metadata->rootEntityName, $association['fieldName'], $ownerId); } }
vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- declare (strict_types=1); namespace MailPoetVendor\Doctrine\ORM\Internal\Hydration; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\DBAL\Driver\ResultStatement; use MailPoetVendor\Doctrine\DBAL\ForwardCompatibility\Result as ForwardCompatibilityResult; use MailPoetVendor\Doctrine\DBAL\Platforms\AbstractPlatform; use MailPoetVendor\Doctrine\DBAL\Result; use MailPoetVendor\Doctrine\DBAL\Types\Type; use MailPoetVendor\Doctrine\Deprecations\Deprecation; use MailPoetVendor\Doctrine\ORM\EntityManagerInterface; use MailPoetVendor\Doctrine\ORM\Events; use MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadata; use MailPoetVendor\Doctrine\ORM\Query\ResultSetMapping; use MailPoetVendor\Doctrine\ORM\Tools\Pagination\LimitSubqueryWalker; use MailPoetVendor\Doctrine\ORM\UnitOfWork; use Generator; use LogicException; use ReflectionClass; use TypeError; use function array_map; use function array_merge; use function count; use function end; use function get_debug_type; use function in_array; use function sprintf; abstract class AbstractHydrator { protected $_rsm; protected $_em; protected $_platform; protected $_uow; protected $_metadataCache = []; protected $_cache = []; protected $_stmt; protected $_hints = []; public function __construct(EntityManagerInterface $em) { $this->_em = $em; $this->_platform = $em->getConnection()->getDatabasePlatform(); $this->_uow = $em->getUnitOfWork(); } public function iterate($stmt, $resultSetMapping, array $hints = []) { Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/issues/8463', 'Method %s() is deprecated and will be removed in Doctrine ORM 3.0. Use toIterable() instead.', __METHOD__); $this->_stmt = $stmt instanceof ResultStatement ? ForwardCompatibilityResult::ensure($stmt) : $stmt; $this->_rsm = $resultSetMapping; $this->_hints = $hints; $evm = $this->_em->getEventManager(); $evm->addEventListener([Events::onClear], $this); $this->prepare(); return new IterableResult($this); } public function toIterable($stmt, ResultSetMapping $resultSetMapping, array $hints = []) : iterable { if (!$stmt instanceof Result) { if (!$stmt instanceof ResultStatement) { throw new TypeError(sprintf('%s: Expected parameter $stmt to be an instance of %s or %s, got %s', __METHOD__, Result::class, ResultStatement::class, get_debug_type($stmt))); } Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/pull/8796', '%s: Passing a result as $stmt that does not implement %s is deprecated and will cause a TypeError on 3.0', __METHOD__, Result::class); $stmt = ForwardCompatibilityResult::ensure($stmt); } $this->_stmt = $stmt; $this->_rsm = $resultSetMapping; $this->_hints = $hints; $evm = $this->_em->getEventManager(); $evm->addEventListener([Events::onClear], $this); $this->prepare(); while (\true) { $row = $this->statement()->fetchAssociative(); if ($row === \false) { $this->cleanup(); break; } $result = []; $this->hydrateRowData($row, $result); $this->cleanupAfterRowIteration(); if (count($result) === 1) { (yield end($result)); } else { (yield $result); } } } protected final function statement() : Result { if ($this->_stmt === null) { throw new LogicException('Uninitialized _stmt property'); } return $this->_stmt; } protected final function resultSetMapping() : ResultSetMapping { if ($this->_rsm === null) { throw new LogicException('Uninitialized _rsm property'); } return $this->_rsm; } public function hydrateAll($stmt, $resultSetMapping, array $hints = []) { if (!$stmt instanceof Result) { if (!$stmt instanceof ResultStatement) { throw new TypeError(sprintf('%s: Expected parameter $stmt to be an instance of %s or %s, got %s', __METHOD__, Result::class, ResultStatement::class, get_debug_type($stmt))); } Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/pull/8796', '%s: Passing a result as $stmt that does not implement %s is deprecated and will cause a TypeError on 3.0', __METHOD__, Result::class); $stmt = ForwardCompatibilityResult::ensure($stmt); } $this->_stmt = $stmt; $this->_rsm = $resultSetMapping; $this->_hints = $hints; $this->_em->getEventManager()->addEventListener([Events::onClear], $this); $this->prepare(); try { $result = $this->hydrateAllData(); } finally { $this->cleanup(); } return $result; } public function hydrateRow() { $row = $this->statement()->fetchAssociative(); if ($row === \false) { $this->cleanup(); return \false; } $result = []; $this->hydrateRowData($row, $result); return $result; } public function onClear($eventArgs) { } protected function prepare() { } protected function cleanup() { $this->statement()->free(); $this->_stmt = null; $this->_rsm = null; $this->_cache = []; $this->_metadataCache = []; $this->_em->getEventManager()->removeEventListener([Events::onClear], $this); } protected function cleanupAfterRowIteration() : void { } protected function hydrateRowData(array $row, array &$result) { throw new HydrationException('hydrateRowData() not implemented by this hydrator.'); } protected abstract function hydrateAllData(); protected function gatherRowData(array $data, array &$id, array &$nonemptyComponents) { $rowData = ['data' => []]; foreach ($data as $key => $value) { $cacheKeyInfo = $this->hydrateColumnInfo($key); if ($cacheKeyInfo === null) { continue; } $fieldName = $cacheKeyInfo['fieldName']; switch (\true) { case isset($cacheKeyInfo['isNewObjectParameter']): $argIndex = $cacheKeyInfo['argIndex']; $objIndex = $cacheKeyInfo['objIndex']; $type = $cacheKeyInfo['type']; $value = $type->convertToPHPValue($value, $this->_platform); $rowData['newObjects'][$objIndex]['class'] = $cacheKeyInfo['class']; $rowData['newObjects'][$objIndex]['args'][$argIndex] = $value; break; case isset($cacheKeyInfo['isScalar']): $type = $cacheKeyInfo['type']; $value = $type->convertToPHPValue($value, $this->_platform); $rowData['scalars'][$fieldName] = $value; break; default: $dqlAlias = $cacheKeyInfo['dqlAlias']; $type = $cacheKeyInfo['type']; if (isset($cacheKeyInfo['discriminatorColumn'], $data[$cacheKeyInfo['discriminatorColumn']]) && !in_array((string) $data[$cacheKeyInfo['discriminatorColumn']], $cacheKeyInfo['discriminatorValues'], \true)) { break; } if (isset($rowData['data'][$dqlAlias][$fieldName])) { break; } $rowData['data'][$dqlAlias][$fieldName] = $type ? $type->convertToPHPValue($value, $this->_platform) : $value; if ($cacheKeyInfo['isIdentifier'] && $value !== null) { $id[$dqlAlias] .= '|' . $value; $nonemptyComponents[$dqlAlias] = \true; } break; } } return $rowData; } protected function gatherScalarRowData(&$data) { $rowData = []; foreach ($data as $key => $value) { $cacheKeyInfo = $this->hydrateColumnInfo($key); if ($cacheKeyInfo === null) { continue; } $fieldName = $cacheKeyInfo['fieldName']; if (!isset($cacheKeyInfo['isScalar'])) { $type = $cacheKeyInfo['type']; $value = $type ? $type->convertToPHPValue($value, $this->_platform) : $value; $fieldName = $cacheKeyInfo['dqlAlias'] . '_' . $fieldName; } $rowData[$fieldName] = $value; } return $rowData; } protected function hydrateColumnInfo($key) { if (isset($this->_cache[$key])) { return $this->_cache[$key]; } switch (\true) { case isset($this->_rsm->fieldMappings[$key]): $classMetadata = $this->getClassMetadata($this->_rsm->declaringClasses[$key]); $fieldName = $this->_rsm->fieldMappings[$key]; $fieldMapping = $classMetadata->fieldMappings[$fieldName]; $ownerMap = $this->_rsm->columnOwnerMap[$key]; $columnInfo = ['isIdentifier' => in_array($fieldName, $classMetadata->identifier, \true), 'fieldName' => $fieldName, 'type' => Type::getType($fieldMapping['type']), 'dqlAlias' => $ownerMap]; if ($classMetadata->parentClasses && isset($this->_rsm->discriminatorColumns[$ownerMap])) { return $this->_cache[$key] = array_merge($columnInfo, ['discriminatorColumn' => $this->_rsm->discriminatorColumns[$ownerMap], 'discriminatorValue' => $classMetadata->discriminatorValue, 'discriminatorValues' => $this->getDiscriminatorValues($classMetadata)]); } return $this->_cache[$key] = $columnInfo; case isset($this->_rsm->newObjectMappings[$key]): $mapping = $this->_rsm->newObjectMappings[$key]; return $this->_cache[$key] = ['isScalar' => \true, 'isNewObjectParameter' => \true, 'fieldName' => $this->_rsm->scalarMappings[$key], 'type' => Type::getType($this->_rsm->typeMappings[$key]), 'argIndex' => $mapping['argIndex'], 'objIndex' => $mapping['objIndex'], 'class' => new ReflectionClass($mapping['className'])]; case isset($this->_rsm->scalarMappings[$key], $this->_hints[LimitSubqueryWalker::FORCE_DBAL_TYPE_CONVERSION]): return $this->_cache[$key] = ['fieldName' => $this->_rsm->scalarMappings[$key], 'type' => Type::getType($this->_rsm->typeMappings[$key]), 'dqlAlias' => '']; case isset($this->_rsm->scalarMappings[$key]): return $this->_cache[$key] = ['isScalar' => \true, 'fieldName' => $this->_rsm->scalarMappings[$key], 'type' => Type::getType($this->_rsm->typeMappings[$key])]; case isset($this->_rsm->metaMappings[$key]): $fieldName = $this->_rsm->metaMappings[$key]; $dqlAlias = $this->_rsm->columnOwnerMap[$key]; $type = isset($this->_rsm->typeMappings[$key]) ? Type::getType($this->_rsm->typeMappings[$key]) : null; $this->getClassMetadata($this->_rsm->aliasMap[$dqlAlias]); return $this->_cache[$key] = ['isIdentifier' => isset($this->_rsm->isIdentifierColumn[$dqlAlias][$key]), 'isMetaColumn' => \true, 'fieldName' => $fieldName, 'type' => $type, 'dqlAlias' => $dqlAlias]; } return null; } private function getDiscriminatorValues(ClassMetadata $classMetadata) : array { $values = array_map(function (string $subClass) : string { return (string) $this->getClassMetadata($subClass)->discriminatorValue; }, $classMetadata->subClasses); $values[] = (string) $classMetadata->discriminatorValue; return $values; } protected function getClassMetadata($className) { if (!isset($this->_metadataCache[$className])) { $this->_metadataCache[$className] = $this->_em->getClassMetadata($className); } return $this->_metadataCache[$className]; } protected function registerManaged(ClassMetadata $class, $entity, array $data) { if ($class->isIdentifierComposite) { $id = []; foreach ($class->identifier as $fieldName) { $id[$fieldName] = isset($class->associationMappings[$fieldName]) ? $data[$class->associationMappings[$fieldName]['joinColumns'][0]['name']] : $data[$fieldName]; } } else { $fieldName = $class->identifier[0]; $id = [$fieldName => isset($class->associationMappings[$fieldName]) ? $data[$class->associationMappings[$fieldName]['joinColumns'][0]['name']] : $data[$fieldName]]; } $this->_em->getUnitOfWork()->registerManaged($entity, $id, $data); } }
1
  <?php
2
+ declare (strict_types=1); namespace MailPoetVendor\Doctrine\ORM\Internal\Hydration; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\DBAL\Driver\ResultStatement; use MailPoetVendor\Doctrine\DBAL\ForwardCompatibility\Result as ForwardCompatibilityResult; use MailPoetVendor\Doctrine\DBAL\Platforms\AbstractPlatform; use MailPoetVendor\Doctrine\DBAL\Result; use MailPoetVendor\Doctrine\DBAL\Types\Type; use MailPoetVendor\Doctrine\Deprecations\Deprecation; use MailPoetVendor\Doctrine\ORM\EntityManagerInterface; use MailPoetVendor\Doctrine\ORM\Events; use MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadata; use MailPoetVendor\Doctrine\ORM\Query\ResultSetMapping; use MailPoetVendor\Doctrine\ORM\Tools\Pagination\LimitSubqueryWalker; use MailPoetVendor\Doctrine\ORM\UnitOfWork; use Generator; use LogicException; use ReflectionClass; use TypeError; use function array_map; use function array_merge; use function count; use function end; use function get_debug_type; use function in_array; use function sprintf; abstract class AbstractHydrator { protected $_rsm; protected $_em; protected $_platform; protected $_uow; protected $_metadataCache = []; protected $_cache = []; protected $_stmt; protected $_hints = []; public function __construct(EntityManagerInterface $em) { $this->_em = $em; $this->_platform = $em->getConnection()->getDatabasePlatform(); $this->_uow = $em->getUnitOfWork(); } public function iterate($stmt, $resultSetMapping, array $hints = []) { Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/issues/8463', 'Method %s() is deprecated and will be removed in Doctrine ORM 3.0. Use toIterable() instead.', __METHOD__); $this->_stmt = $stmt instanceof ResultStatement ? ForwardCompatibilityResult::ensure($stmt) : $stmt; $this->_rsm = $resultSetMapping; $this->_hints = $hints; $evm = $this->_em->getEventManager(); $evm->addEventListener([Events::onClear], $this); $this->prepare(); return new IterableResult($this); } public function toIterable($stmt, ResultSetMapping $resultSetMapping, array $hints = []) : iterable { if (!$stmt instanceof Result) { if (!$stmt instanceof ResultStatement) { throw new TypeError(sprintf('%s: Expected parameter $stmt to be an instance of %s or %s, got %s', __METHOD__, Result::class, ResultStatement::class, get_debug_type($stmt))); } Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/pull/8796', '%s: Passing a result as $stmt that does not implement %s is deprecated and will cause a TypeError on 3.0', __METHOD__, Result::class); $stmt = ForwardCompatibilityResult::ensure($stmt); } $this->_stmt = $stmt; $this->_rsm = $resultSetMapping; $this->_hints = $hints; $evm = $this->_em->getEventManager(); $evm->addEventListener([Events::onClear], $this); $this->prepare(); while (\true) { $row = $this->statement()->fetchAssociative(); if ($row === \false) { $this->cleanup(); break; } $result = []; $this->hydrateRowData($row, $result); $this->cleanupAfterRowIteration(); if (count($result) === 1) { if (count($resultSetMapping->indexByMap) === 0) { (yield end($result)); } else { yield from $result; } } else { (yield $result); } } } protected final function statement() : Result { if ($this->_stmt === null) { throw new LogicException('Uninitialized _stmt property'); } return $this->_stmt; } protected final function resultSetMapping() : ResultSetMapping { if ($this->_rsm === null) { throw new LogicException('Uninitialized _rsm property'); } return $this->_rsm; } public function hydrateAll($stmt, $resultSetMapping, array $hints = []) { if (!$stmt instanceof Result) { if (!$stmt instanceof ResultStatement) { throw new TypeError(sprintf('%s: Expected parameter $stmt to be an instance of %s or %s, got %s', __METHOD__, Result::class, ResultStatement::class, get_debug_type($stmt))); } Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/pull/8796', '%s: Passing a result as $stmt that does not implement %s is deprecated and will cause a TypeError on 3.0', __METHOD__, Result::class); $stmt = ForwardCompatibilityResult::ensure($stmt); } $this->_stmt = $stmt; $this->_rsm = $resultSetMapping; $this->_hints = $hints; $this->_em->getEventManager()->addEventListener([Events::onClear], $this); $this->prepare(); try { $result = $this->hydrateAllData(); } finally { $this->cleanup(); } return $result; } public function hydrateRow() { $row = $this->statement()->fetchAssociative(); if ($row === \false) { $this->cleanup(); return \false; } $result = []; $this->hydrateRowData($row, $result); return $result; } public function onClear($eventArgs) { } protected function prepare() { } protected function cleanup() { $this->statement()->free(); $this->_stmt = null; $this->_rsm = null; $this->_cache = []; $this->_metadataCache = []; $this->_em->getEventManager()->removeEventListener([Events::onClear], $this); } protected function cleanupAfterRowIteration() : void { } protected function hydrateRowData(array $row, array &$result) { throw new HydrationException('hydrateRowData() not implemented by this hydrator.'); } protected abstract function hydrateAllData(); protected function gatherRowData(array $data, array &$id, array &$nonemptyComponents) { $rowData = ['data' => []]; foreach ($data as $key => $value) { $cacheKeyInfo = $this->hydrateColumnInfo($key); if ($cacheKeyInfo === null) { continue; } $fieldName = $cacheKeyInfo['fieldName']; switch (\true) { case isset($cacheKeyInfo['isNewObjectParameter']): $argIndex = $cacheKeyInfo['argIndex']; $objIndex = $cacheKeyInfo['objIndex']; $type = $cacheKeyInfo['type']; $value = $type->convertToPHPValue($value, $this->_platform); $rowData['newObjects'][$objIndex]['class'] = $cacheKeyInfo['class']; $rowData['newObjects'][$objIndex]['args'][$argIndex] = $value; break; case isset($cacheKeyInfo['isScalar']): $type = $cacheKeyInfo['type']; $value = $type->convertToPHPValue($value, $this->_platform); $rowData['scalars'][$fieldName] = $value; break; default: $dqlAlias = $cacheKeyInfo['dqlAlias']; $type = $cacheKeyInfo['type']; if (isset($cacheKeyInfo['discriminatorColumn'], $data[$cacheKeyInfo['discriminatorColumn']]) && !in_array((string) $data[$cacheKeyInfo['discriminatorColumn']], $cacheKeyInfo['discriminatorValues'], \true)) { break; } if (isset($rowData['data'][$dqlAlias][$fieldName])) { break; } $rowData['data'][$dqlAlias][$fieldName] = $type ? $type->convertToPHPValue($value, $this->_platform) : $value; if ($cacheKeyInfo['isIdentifier'] && $value !== null) { $id[$dqlAlias] .= '|' . $value; $nonemptyComponents[$dqlAlias] = \true; } break; } } return $rowData; } protected function gatherScalarRowData(&$data) { $rowData = []; foreach ($data as $key => $value) { $cacheKeyInfo = $this->hydrateColumnInfo($key); if ($cacheKeyInfo === null) { continue; } $fieldName = $cacheKeyInfo['fieldName']; if (!isset($cacheKeyInfo['isScalar'])) { $type = $cacheKeyInfo['type']; $value = $type ? $type->convertToPHPValue($value, $this->_platform) : $value; $fieldName = $cacheKeyInfo['dqlAlias'] . '_' . $fieldName; } $rowData[$fieldName] = $value; } return $rowData; } protected function hydrateColumnInfo($key) { if (isset($this->_cache[$key])) { return $this->_cache[$key]; } switch (\true) { case isset($this->_rsm->fieldMappings[$key]): $classMetadata = $this->getClassMetadata($this->_rsm->declaringClasses[$key]); $fieldName = $this->_rsm->fieldMappings[$key]; $fieldMapping = $classMetadata->fieldMappings[$fieldName]; $ownerMap = $this->_rsm->columnOwnerMap[$key]; $columnInfo = ['isIdentifier' => in_array($fieldName, $classMetadata->identifier, \true), 'fieldName' => $fieldName, 'type' => Type::getType($fieldMapping['type']), 'dqlAlias' => $ownerMap]; if ($classMetadata->parentClasses && isset($this->_rsm->discriminatorColumns[$ownerMap])) { return $this->_cache[$key] = array_merge($columnInfo, ['discriminatorColumn' => $this->_rsm->discriminatorColumns[$ownerMap], 'discriminatorValue' => $classMetadata->discriminatorValue, 'discriminatorValues' => $this->getDiscriminatorValues($classMetadata)]); } return $this->_cache[$key] = $columnInfo; case isset($this->_rsm->newObjectMappings[$key]): $mapping = $this->_rsm->newObjectMappings[$key]; return $this->_cache[$key] = ['isScalar' => \true, 'isNewObjectParameter' => \true, 'fieldName' => $this->_rsm->scalarMappings[$key], 'type' => Type::getType($this->_rsm->typeMappings[$key]), 'argIndex' => $mapping['argIndex'], 'objIndex' => $mapping['objIndex'], 'class' => new ReflectionClass($mapping['className'])]; case isset($this->_rsm->scalarMappings[$key], $this->_hints[LimitSubqueryWalker::FORCE_DBAL_TYPE_CONVERSION]): return $this->_cache[$key] = ['fieldName' => $this->_rsm->scalarMappings[$key], 'type' => Type::getType($this->_rsm->typeMappings[$key]), 'dqlAlias' => '']; case isset($this->_rsm->scalarMappings[$key]): return $this->_cache[$key] = ['isScalar' => \true, 'fieldName' => $this->_rsm->scalarMappings[$key], 'type' => Type::getType($this->_rsm->typeMappings[$key])]; case isset($this->_rsm->metaMappings[$key]): $fieldName = $this->_rsm->metaMappings[$key]; $dqlAlias = $this->_rsm->columnOwnerMap[$key]; $type = isset($this->_rsm->typeMappings[$key]) ? Type::getType($this->_rsm->typeMappings[$key]) : null; $this->getClassMetadata($this->_rsm->aliasMap[$dqlAlias]); return $this->_cache[$key] = ['isIdentifier' => isset($this->_rsm->isIdentifierColumn[$dqlAlias][$key]), 'isMetaColumn' => \true, 'fieldName' => $fieldName, 'type' => $type, 'dqlAlias' => $dqlAlias]; } return null; } private function getDiscriminatorValues(ClassMetadata $classMetadata) : array { $values = array_map(function (string $subClass) : string { return (string) $this->getClassMetadata($subClass)->discriminatorValue; }, $classMetadata->subClasses); $values[] = (string) $classMetadata->discriminatorValue; return $values; } protected function getClassMetadata($className) { if (!isset($this->_metadataCache[$className])) { $this->_metadataCache[$className] = $this->_em->getClassMetadata($className); } return $this->_metadataCache[$className]; } protected function registerManaged(ClassMetadata $class, $entity, array $data) { if ($class->isIdentifierComposite) { $id = []; foreach ($class->identifier as $fieldName) { $id[$fieldName] = isset($class->associationMappings[$fieldName]) ? $data[$class->associationMappings[$fieldName]['joinColumns'][0]['name']] : $data[$fieldName]; } } else { $fieldName = $class->identifier[0]; $id = [$fieldName => isset($class->associationMappings[$fieldName]) ? $data[$class->associationMappings[$fieldName]['joinColumns'][0]['name']] : $data[$fieldName]]; } $this->_em->getUnitOfWork()->registerManaged($entity, $id, $data); } }
vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- declare (strict_types=1); namespace MailPoetVendor\Doctrine\ORM\Mapping; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\Common\EventManager; use MailPoetVendor\Doctrine\DBAL\Platforms; use MailPoetVendor\Doctrine\DBAL\Platforms\AbstractPlatform; use MailPoetVendor\Doctrine\Deprecations\Deprecation; use MailPoetVendor\Doctrine\ORM\EntityManagerInterface; use MailPoetVendor\Doctrine\ORM\Event\LoadClassMetadataEventArgs; use MailPoetVendor\Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; use MailPoetVendor\Doctrine\ORM\Events; use MailPoetVendor\Doctrine\ORM\Exception\ORMException; use MailPoetVendor\Doctrine\ORM\Id\AssignedGenerator; use MailPoetVendor\Doctrine\ORM\Id\BigIntegerIdentityGenerator; use MailPoetVendor\Doctrine\ORM\Id\IdentityGenerator; use MailPoetVendor\Doctrine\ORM\Id\SequenceGenerator; use MailPoetVendor\Doctrine\ORM\Id\UuidGenerator; use MailPoetVendor\Doctrine\ORM\Mapping\Exception\CannotGenerateIds; use MailPoetVendor\Doctrine\ORM\Mapping\Exception\InvalidCustomGenerator; use MailPoetVendor\Doctrine\ORM\Mapping\Exception\TableGeneratorNotImplementedYet; use MailPoetVendor\Doctrine\ORM\Mapping\Exception\UnknownGeneratorType; use MailPoetVendor\Doctrine\Persistence\Mapping\AbstractClassMetadataFactory; use MailPoetVendor\Doctrine\Persistence\Mapping\ClassMetadata as ClassMetadataInterface; use MailPoetVendor\Doctrine\Persistence\Mapping\Driver\MappingDriver; use MailPoetVendor\Doctrine\Persistence\Mapping\ReflectionService; use ReflectionClass; use ReflectionException; use function assert; use function class_exists; use function count; use function end; use function explode; use function in_array; use function is_subclass_of; use function strlen; use function strpos; use function strtolower; use function substr; class ClassMetadataFactory extends AbstractClassMetadataFactory { private $em; private $targetPlatform; private $driver; private $evm; private $embeddablesActiveNesting = []; public function setEntityManager(EntityManagerInterface $em) { $this->em = $em; } protected function initialize() { $this->driver = $this->em->getConfiguration()->getMetadataDriverImpl(); $this->evm = $this->em->getEventManager(); $this->initialized = \true; } protected function onNotFoundMetadata($className) { if (!$this->evm->hasListeners(Events::onClassMetadataNotFound)) { return; } $eventArgs = new OnClassMetadataNotFoundEventArgs($className, $this->em); $this->evm->dispatchEvent(Events::onClassMetadataNotFound, $eventArgs); return $eventArgs->getFoundMetadata(); } protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents) { if ($parent) { $class->setInheritanceType($parent->inheritanceType); $class->setDiscriminatorColumn($parent->discriminatorColumn); $class->setIdGeneratorType($parent->generatorType); $this->addInheritedFields($class, $parent); $this->addInheritedRelations($class, $parent); $this->addInheritedEmbeddedClasses($class, $parent); $class->setIdentifier($parent->identifier); $class->setVersioned($parent->isVersioned); $class->setVersionField($parent->versionField); $class->setDiscriminatorMap($parent->discriminatorMap); $class->setLifecycleCallbacks($parent->lifecycleCallbacks); $class->setChangeTrackingPolicy($parent->changeTrackingPolicy); if (!empty($parent->customGeneratorDefinition)) { $class->setCustomGeneratorDefinition($parent->customGeneratorDefinition); } if ($parent->isMappedSuperclass) { $class->setCustomRepositoryClass($parent->customRepositoryClassName); } } try { $this->driver->loadMetadataForClass($class->getName(), $class); } catch (ReflectionException $e) { throw MappingException::reflectionFailure($class->getName(), $e); } if ($parent && $rootEntityFound) { $this->inheritIdGeneratorMapping($class, $parent); } else { $this->completeIdGeneratorMapping($class); } if (!$class->isMappedSuperclass) { foreach ($class->embeddedClasses as $property => $embeddableClass) { if (isset($embeddableClass['inherited'])) { continue; } if (!(isset($embeddableClass['class']) && $embeddableClass['class'])) { throw MappingException::missingEmbeddedClass($property); } if (isset($this->embeddablesActiveNesting[$embeddableClass['class']])) { throw MappingException::infiniteEmbeddableNesting($class->name, $property); } $this->embeddablesActiveNesting[$class->name] = \true; $embeddableMetadata = $this->getMetadataFor($embeddableClass['class']); if ($embeddableMetadata->isEmbeddedClass) { $this->addNestedEmbeddedClasses($embeddableMetadata, $class, $property); } $identifier = $embeddableMetadata->getIdentifier(); if (!empty($identifier)) { $this->inheritIdGeneratorMapping($class, $embeddableMetadata); } $class->inlineEmbeddable($property, $embeddableMetadata); unset($this->embeddablesActiveNesting[$class->name]); } } if ($parent) { if ($parent->isInheritanceTypeSingleTable()) { $class->setPrimaryTable($parent->table); } if ($parent) { $this->addInheritedIndexes($class, $parent); } if ($parent->cache) { $class->cache = $parent->cache; } if ($parent->containsForeignIdentifier) { $class->containsForeignIdentifier = \true; } if (!empty($parent->namedQueries)) { $this->addInheritedNamedQueries($class, $parent); } if (!empty($parent->namedNativeQueries)) { $this->addInheritedNamedNativeQueries($class, $parent); } if (!empty($parent->sqlResultSetMappings)) { $this->addInheritedSqlResultSetMappings($class, $parent); } if (!empty($parent->entityListeners) && empty($class->entityListeners)) { $class->entityListeners = $parent->entityListeners; } } $class->setParentClasses($nonSuperclassParents); if ($class->isRootEntity() && !$class->isInheritanceTypeNone() && !$class->discriminatorMap) { $this->addDefaultDiscriminatorMap($class); } if ($this->evm->hasListeners(Events::loadClassMetadata)) { $eventArgs = new LoadClassMetadataEventArgs($class, $this->em); $this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs); } if ($class->changeTrackingPolicy === ClassMetadataInfo::CHANGETRACKING_NOTIFY) { Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/issues/8383', 'NOTIFY Change Tracking policy used in "%s" is deprecated, use deferred explicit instead.', $class->name); } $this->validateRuntimeMetadata($class, $parent); } protected function validateRuntimeMetadata($class, $parent) { if (!$class->reflClass) { return; } $class->validateIdentifier(); $class->validateAssociations(); $class->validateLifecycleCallbacks($this->getReflectionService()); if (!$class->isMappedSuperclass && !$class->isInheritanceTypeNone()) { if (!$parent) { if (count($class->discriminatorMap) === 0) { throw MappingException::missingDiscriminatorMap($class->name); } if (!$class->discriminatorColumn) { throw MappingException::missingDiscriminatorColumn($class->name); } foreach ($class->subClasses as $subClass) { if ((new ReflectionClass($subClass))->name !== $subClass) { throw MappingException::invalidClassInDiscriminatorMap($subClass, $class->name); } } } else { assert($parent instanceof ClassMetadataInfo); if ((!$class->reflClass || !$class->reflClass->isAbstract()) && !in_array($class->name, $class->discriminatorMap, \true)) { throw MappingException::mappedClassNotPartOfDiscriminatorMap($class->name, $class->rootEntityName); } } } elseif ($class->isMappedSuperclass && $class->name === $class->rootEntityName && (count($class->discriminatorMap) || $class->discriminatorColumn)) { throw MappingException::noInheritanceOnMappedSuperClass($class->name); } } protected function newClassMetadataInstance($className) { return new ClassMetadata($className, $this->em->getConfiguration()->getNamingStrategy()); } private function addDefaultDiscriminatorMap(ClassMetadata $class) : void { $allClasses = $this->driver->getAllClassNames(); $fqcn = $class->getName(); $map = [$this->getShortName($class->name) => $fqcn]; $duplicates = []; foreach ($allClasses as $subClassCandidate) { if (is_subclass_of($subClassCandidate, $fqcn)) { $shortName = $this->getShortName($subClassCandidate); if (isset($map[$shortName])) { $duplicates[] = $shortName; } $map[$shortName] = $subClassCandidate; } } if ($duplicates) { throw MappingException::duplicateDiscriminatorEntry($class->name, $duplicates, $map); } $class->setDiscriminatorMap($map); } private function getShortName(string $className) : string { if (strpos($className, '\\') === \false) { return strtolower($className); } $parts = explode('\\', $className); return strtolower(end($parts)); } private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->fieldMappings as $mapping) { if (!isset($mapping['inherited']) && !$parentClass->isMappedSuperclass) { $mapping['inherited'] = $parentClass->name; } if (!isset($mapping['declared'])) { $mapping['declared'] = $parentClass->name; } $subClass->addInheritedFieldMapping($mapping); } foreach ($parentClass->reflFields as $name => $field) { $subClass->reflFields[$name] = $field; } } private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->associationMappings as $field => $mapping) { if ($parentClass->isMappedSuperclass) { if ($mapping['type'] & ClassMetadata::TO_MANY && !$mapping['isOwningSide']) { throw MappingException::illegalToManyAssociationOnMappedSuperclass($parentClass->name, $field); } $mapping['sourceEntity'] = $subClass->name; } if (!isset($mapping['inherited']) && !$parentClass->isMappedSuperclass) { $mapping['inherited'] = $parentClass->name; } if (!isset($mapping['declared'])) { $mapping['declared'] = $parentClass->name; } $subClass->addInheritedAssociationMapping($mapping); } } private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->embeddedClasses as $field => $embeddedClass) { if (!isset($embeddedClass['inherited']) && !$parentClass->isMappedSuperclass) { $embeddedClass['inherited'] = $parentClass->name; } if (!isset($embeddedClass['declared'])) { $embeddedClass['declared'] = $parentClass->name; } $subClass->embeddedClasses[$field] = $embeddedClass; } } private function addNestedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass, string $prefix) : void { foreach ($subClass->embeddedClasses as $property => $embeddableClass) { if (isset($embeddableClass['inherited'])) { continue; } $embeddableMetadata = $this->getMetadataFor($embeddableClass['class']); $parentClass->mapEmbedded(['fieldName' => $prefix . '.' . $property, 'class' => $embeddableMetadata->name, 'columnPrefix' => $embeddableClass['columnPrefix'], 'declaredField' => $embeddableClass['declaredField'] ? $prefix . '.' . $embeddableClass['declaredField'] : $prefix, 'originalField' => $embeddableClass['originalField'] ?: $property]); } } private function addInheritedIndexes(ClassMetadata $subClass, ClassMetadata $parentClass) : void { if (!$parentClass->isMappedSuperclass) { return; } foreach (['uniqueConstraints', 'indexes'] as $indexType) { if (isset($parentClass->table[$indexType])) { foreach ($parentClass->table[$indexType] as $indexName => $index) { if (isset($subClass->table[$indexType][$indexName])) { continue; } $subClass->table[$indexType][$indexName] = $index; } } } } private function addInheritedNamedQueries(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->namedQueries as $name => $query) { if (!isset($subClass->namedQueries[$name])) { $subClass->addNamedQuery(['name' => $query['name'], 'query' => $query['query']]); } } } private function addInheritedNamedNativeQueries(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->namedNativeQueries as $name => $query) { if (!isset($subClass->namedNativeQueries[$name])) { $subClass->addNamedNativeQuery(['name' => $query['name'], 'query' => $query['query'], 'isSelfClass' => $query['isSelfClass'], 'resultSetMapping' => $query['resultSetMapping'], 'resultClass' => $query['isSelfClass'] ? $subClass->name : $query['resultClass']]); } } } private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->sqlResultSetMappings as $name => $mapping) { if (!isset($subClass->sqlResultSetMappings[$name])) { $entities = []; foreach ($mapping['entities'] as $entity) { $entities[] = ['fields' => $entity['fields'], 'isSelfClass' => $entity['isSelfClass'], 'discriminatorColumn' => $entity['discriminatorColumn'], 'entityClass' => $entity['isSelfClass'] ? $subClass->name : $entity['entityClass']]; } $subClass->addSqlResultSetMapping(['name' => $mapping['name'], 'columns' => $mapping['columns'], 'entities' => $entities]); } } } private function completeIdGeneratorMapping(ClassMetadataInfo $class) : void { $idGenType = $class->generatorType; if ($idGenType === ClassMetadata::GENERATOR_TYPE_AUTO) { $class->setIdGeneratorType($this->determineIdGeneratorStrategy($this->getTargetPlatform())); } switch ($class->generatorType) { case ClassMetadata::GENERATOR_TYPE_IDENTITY: $sequenceName = null; $fieldName = $class->identifier ? $class->getSingleIdentifierFieldName() : null; if ($this->getTargetPlatform()->usesSequenceEmulatedIdentityColumns()) { $columnName = $class->getSingleIdentifierColumnName(); $quoted = isset($class->fieldMappings[$fieldName]['quoted']) || isset($class->table['quoted']); $sequencePrefix = $class->getSequencePrefix($this->getTargetPlatform()); $sequenceName = $this->getTargetPlatform()->getIdentitySequenceName($sequencePrefix, $columnName); $definition = ['sequenceName' => $this->truncateSequenceName($sequenceName)]; if ($quoted) { $definition['quoted'] = \true; } $sequenceName = $this->em->getConfiguration()->getQuoteStrategy()->getSequenceName($definition, $class, $this->getTargetPlatform()); } $generator = $fieldName && $class->fieldMappings[$fieldName]['type'] === 'bigint' ? new BigIntegerIdentityGenerator($sequenceName) : new IdentityGenerator($sequenceName); $class->setIdGenerator($generator); break; case ClassMetadata::GENERATOR_TYPE_SEQUENCE: $definition = $class->sequenceGeneratorDefinition; if (!$definition) { $fieldName = $class->getSingleIdentifierFieldName(); $sequenceName = $class->getSequenceName($this->getTargetPlatform()); $quoted = isset($class->fieldMappings[$fieldName]['quoted']) || isset($class->table['quoted']); $definition = ['sequenceName' => $this->truncateSequenceName($sequenceName), 'allocationSize' => 1, 'initialValue' => 1]; if ($quoted) { $definition['quoted'] = \true; } $class->setSequenceGeneratorDefinition($definition); } $sequenceGenerator = new SequenceGenerator($this->em->getConfiguration()->getQuoteStrategy()->getSequenceName($definition, $class, $this->getTargetPlatform()), (int) $definition['allocationSize']); $class->setIdGenerator($sequenceGenerator); break; case ClassMetadata::GENERATOR_TYPE_NONE: $class->setIdGenerator(new AssignedGenerator()); break; case ClassMetadata::GENERATOR_TYPE_UUID: Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/issues/7312', 'Mapping for %s: the "UUID" id generator strategy is deprecated with no replacement', $class->name); $class->setIdGenerator(new UuidGenerator()); break; case ClassMetadata::GENERATOR_TYPE_CUSTOM: $definition = $class->customGeneratorDefinition; if ($definition === null) { throw InvalidCustomGenerator::onClassNotConfigured(); } if (!class_exists($definition['class'])) { throw InvalidCustomGenerator::onMissingClass($definition); } $class->setIdGenerator(new $definition['class']()); break; default: throw UnknownGeneratorType::create($class->generatorType); } } private function determineIdGeneratorStrategy(AbstractPlatform $platform) : int { if ($platform instanceof Platforms\OraclePlatform || $platform instanceof Platforms\PostgreSQL94Platform || $platform instanceof Platforms\PostgreSQLPlatform) { return ClassMetadata::GENERATOR_TYPE_SEQUENCE; } if ($platform->supportsIdentityColumns()) { return ClassMetadata::GENERATOR_TYPE_IDENTITY; } if ($platform->supportsSequences()) { return ClassMetadata::GENERATOR_TYPE_SEQUENCE; } throw CannotGenerateIds::withPlatform($platform); } private function truncateSequenceName(string $schemaElementName) : string { $platform = $this->getTargetPlatform(); if (!in_array($platform->getName(), ['oracle', 'sqlanywhere'], \true)) { return $schemaElementName; } $maxIdentifierLength = $platform->getMaxIdentifierLength(); if (strlen($schemaElementName) > $maxIdentifierLength) { return substr($schemaElementName, 0, $maxIdentifierLength); } return $schemaElementName; } private function inheritIdGeneratorMapping(ClassMetadataInfo $class, ClassMetadataInfo $parent) : void { if ($parent->isIdGeneratorSequence()) { $class->setSequenceGeneratorDefinition($parent->sequenceGeneratorDefinition); } if ($parent->generatorType) { $class->setIdGeneratorType($parent->generatorType); } if ($parent->idGenerator) { $class->setIdGenerator($parent->idGenerator); } } protected function wakeupReflection(ClassMetadataInterface $class, ReflectionService $reflService) { assert($class instanceof ClassMetadata); $class->wakeupReflection($reflService); } protected function initializeReflection(ClassMetadataInterface $class, ReflectionService $reflService) { assert($class instanceof ClassMetadata); $class->initializeReflection($reflService); } protected function getFqcnFromAlias($namespaceAlias, $simpleClassName) { return $this->em->getConfiguration()->getEntityNamespace($namespaceAlias) . '\\' . $simpleClassName; } protected function getDriver() { return $this->driver; } protected function isEntity(ClassMetadataInterface $class) { return isset($class->isMappedSuperclass) && $class->isMappedSuperclass === \false; } private function getTargetPlatform() : Platforms\AbstractPlatform { if (!$this->targetPlatform) { $this->targetPlatform = $this->em->getConnection()->getDatabasePlatform(); } return $this->targetPlatform; } }
1
  <?php
2
+ declare (strict_types=1); namespace MailPoetVendor\Doctrine\ORM\Mapping; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\Common\EventManager; use MailPoetVendor\Doctrine\DBAL\Platforms; use MailPoetVendor\Doctrine\DBAL\Platforms\AbstractPlatform; use MailPoetVendor\Doctrine\Deprecations\Deprecation; use MailPoetVendor\Doctrine\ORM\EntityManagerInterface; use MailPoetVendor\Doctrine\ORM\Event\LoadClassMetadataEventArgs; use MailPoetVendor\Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs; use MailPoetVendor\Doctrine\ORM\Events; use MailPoetVendor\Doctrine\ORM\Exception\ORMException; use MailPoetVendor\Doctrine\ORM\Id\AssignedGenerator; use MailPoetVendor\Doctrine\ORM\Id\BigIntegerIdentityGenerator; use MailPoetVendor\Doctrine\ORM\Id\IdentityGenerator; use MailPoetVendor\Doctrine\ORM\Id\SequenceGenerator; use MailPoetVendor\Doctrine\ORM\Id\UuidGenerator; use MailPoetVendor\Doctrine\ORM\Mapping\Exception\CannotGenerateIds; use MailPoetVendor\Doctrine\ORM\Mapping\Exception\InvalidCustomGenerator; use MailPoetVendor\Doctrine\ORM\Mapping\Exception\TableGeneratorNotImplementedYet; use MailPoetVendor\Doctrine\ORM\Mapping\Exception\UnknownGeneratorType; use MailPoetVendor\Doctrine\Persistence\Mapping\AbstractClassMetadataFactory; use MailPoetVendor\Doctrine\Persistence\Mapping\ClassMetadata as ClassMetadataInterface; use MailPoetVendor\Doctrine\Persistence\Mapping\Driver\MappingDriver; use MailPoetVendor\Doctrine\Persistence\Mapping\ReflectionService; use ReflectionClass; use ReflectionException; use function assert; use function class_exists; use function count; use function end; use function explode; use function in_array; use function is_subclass_of; use function strlen; use function strpos; use function strtolower; use function substr; class ClassMetadataFactory extends AbstractClassMetadataFactory { private $em; private $targetPlatform; private $driver; private $evm; private $embeddablesActiveNesting = []; public function setEntityManager(EntityManagerInterface $em) { $this->em = $em; } protected function initialize() { $this->driver = $this->em->getConfiguration()->getMetadataDriverImpl(); $this->evm = $this->em->getEventManager(); $this->initialized = \true; } protected function onNotFoundMetadata($className) { if (!$this->evm->hasListeners(Events::onClassMetadataNotFound)) { return; } $eventArgs = new OnClassMetadataNotFoundEventArgs($className, $this->em); $this->evm->dispatchEvent(Events::onClassMetadataNotFound, $eventArgs); return $eventArgs->getFoundMetadata(); } protected function doLoadMetadata($class, $parent, $rootEntityFound, array $nonSuperclassParents) { if ($parent) { $class->setInheritanceType($parent->inheritanceType); $class->setDiscriminatorColumn($parent->discriminatorColumn); $class->setIdGeneratorType($parent->generatorType); $this->addInheritedFields($class, $parent); $this->addInheritedRelations($class, $parent); $this->addInheritedEmbeddedClasses($class, $parent); $class->setIdentifier($parent->identifier); $class->setVersioned($parent->isVersioned); $class->setVersionField($parent->versionField); $class->setDiscriminatorMap($parent->discriminatorMap); $class->setLifecycleCallbacks($parent->lifecycleCallbacks); $class->setChangeTrackingPolicy($parent->changeTrackingPolicy); if (!empty($parent->customGeneratorDefinition)) { $class->setCustomGeneratorDefinition($parent->customGeneratorDefinition); } if ($parent->isMappedSuperclass) { $class->setCustomRepositoryClass($parent->customRepositoryClassName); } } try { $this->driver->loadMetadataForClass($class->getName(), $class); } catch (ReflectionException $e) { throw MappingException::reflectionFailure($class->getName(), $e); } if ($parent && $rootEntityFound) { $this->inheritIdGeneratorMapping($class, $parent); } else { $this->completeIdGeneratorMapping($class); } if (!$class->isMappedSuperclass) { foreach ($class->embeddedClasses as $property => $embeddableClass) { if (isset($embeddableClass['inherited'])) { continue; } if (!(isset($embeddableClass['class']) && $embeddableClass['class'])) { throw MappingException::missingEmbeddedClass($property); } if (isset($this->embeddablesActiveNesting[$embeddableClass['class']])) { throw MappingException::infiniteEmbeddableNesting($class->name, $property); } $this->embeddablesActiveNesting[$class->name] = \true; $embeddableMetadata = $this->getMetadataFor($embeddableClass['class']); if ($embeddableMetadata->isEmbeddedClass) { $this->addNestedEmbeddedClasses($embeddableMetadata, $class, $property); } $identifier = $embeddableMetadata->getIdentifier(); if (!empty($identifier)) { $this->inheritIdGeneratorMapping($class, $embeddableMetadata); } $class->inlineEmbeddable($property, $embeddableMetadata); unset($this->embeddablesActiveNesting[$class->name]); } } if ($parent) { if ($parent->isInheritanceTypeSingleTable()) { $class->setPrimaryTable($parent->table); } $this->addInheritedIndexes($class, $parent); if ($parent->cache) { $class->cache = $parent->cache; } if ($parent->containsForeignIdentifier) { $class->containsForeignIdentifier = \true; } if (!empty($parent->namedQueries)) { $this->addInheritedNamedQueries($class, $parent); } if (!empty($parent->namedNativeQueries)) { $this->addInheritedNamedNativeQueries($class, $parent); } if (!empty($parent->sqlResultSetMappings)) { $this->addInheritedSqlResultSetMappings($class, $parent); } if (!empty($parent->entityListeners) && empty($class->entityListeners)) { $class->entityListeners = $parent->entityListeners; } } $class->setParentClasses($nonSuperclassParents); if ($class->isRootEntity() && !$class->isInheritanceTypeNone() && !$class->discriminatorMap) { $this->addDefaultDiscriminatorMap($class); } if ($this->evm->hasListeners(Events::loadClassMetadata)) { $eventArgs = new LoadClassMetadataEventArgs($class, $this->em); $this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs); } if ($class->changeTrackingPolicy === ClassMetadataInfo::CHANGETRACKING_NOTIFY) { Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/issues/8383', 'NOTIFY Change Tracking policy used in "%s" is deprecated, use deferred explicit instead.', $class->name); } $this->validateRuntimeMetadata($class, $parent); } protected function validateRuntimeMetadata($class, $parent) { if (!$class->reflClass) { return; } $class->validateIdentifier(); $class->validateAssociations(); $class->validateLifecycleCallbacks($this->getReflectionService()); if (!$class->isMappedSuperclass && !$class->isInheritanceTypeNone()) { if (!$parent) { if (count($class->discriminatorMap) === 0) { throw MappingException::missingDiscriminatorMap($class->name); } if (!$class->discriminatorColumn) { throw MappingException::missingDiscriminatorColumn($class->name); } foreach ($class->subClasses as $subClass) { if ((new ReflectionClass($subClass))->name !== $subClass) { throw MappingException::invalidClassInDiscriminatorMap($subClass, $class->name); } } } else { assert($parent instanceof ClassMetadataInfo); if (!$class->reflClass->isAbstract() && !in_array($class->name, $class->discriminatorMap, \true)) { throw MappingException::mappedClassNotPartOfDiscriminatorMap($class->name, $class->rootEntityName); } } } elseif ($class->isMappedSuperclass && $class->name === $class->rootEntityName && (count($class->discriminatorMap) || $class->discriminatorColumn)) { throw MappingException::noInheritanceOnMappedSuperClass($class->name); } } protected function newClassMetadataInstance($className) { return new ClassMetadata($className, $this->em->getConfiguration()->getNamingStrategy()); } private function addDefaultDiscriminatorMap(ClassMetadata $class) : void { $allClasses = $this->driver->getAllClassNames(); $fqcn = $class->getName(); $map = [$this->getShortName($class->name) => $fqcn]; $duplicates = []; foreach ($allClasses as $subClassCandidate) { if (is_subclass_of($subClassCandidate, $fqcn)) { $shortName = $this->getShortName($subClassCandidate); if (isset($map[$shortName])) { $duplicates[] = $shortName; } $map[$shortName] = $subClassCandidate; } } if ($duplicates) { throw MappingException::duplicateDiscriminatorEntry($class->name, $duplicates, $map); } $class->setDiscriminatorMap($map); } private function getShortName(string $className) : string { if (strpos($className, '\\') === \false) { return strtolower($className); } $parts = explode('\\', $className); return strtolower(end($parts)); } private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->fieldMappings as $mapping) { if (!isset($mapping['inherited']) && !$parentClass->isMappedSuperclass) { $mapping['inherited'] = $parentClass->name; } if (!isset($mapping['declared'])) { $mapping['declared'] = $parentClass->name; } $subClass->addInheritedFieldMapping($mapping); } foreach ($parentClass->reflFields as $name => $field) { $subClass->reflFields[$name] = $field; } } private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->associationMappings as $field => $mapping) { if ($parentClass->isMappedSuperclass) { if ($mapping['type'] & ClassMetadata::TO_MANY && !$mapping['isOwningSide']) { throw MappingException::illegalToManyAssociationOnMappedSuperclass($parentClass->name, $field); } $mapping['sourceEntity'] = $subClass->name; } if (!isset($mapping['inherited']) && !$parentClass->isMappedSuperclass) { $mapping['inherited'] = $parentClass->name; } if (!isset($mapping['declared'])) { $mapping['declared'] = $parentClass->name; } $subClass->addInheritedAssociationMapping($mapping); } } private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->embeddedClasses as $field => $embeddedClass) { if (!isset($embeddedClass['inherited']) && !$parentClass->isMappedSuperclass) { $embeddedClass['inherited'] = $parentClass->name; } if (!isset($embeddedClass['declared'])) { $embeddedClass['declared'] = $parentClass->name; } $subClass->embeddedClasses[$field] = $embeddedClass; } } private function addNestedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass, string $prefix) : void { foreach ($subClass->embeddedClasses as $property => $embeddableClass) { if (isset($embeddableClass['inherited'])) { continue; } $embeddableMetadata = $this->getMetadataFor($embeddableClass['class']); $parentClass->mapEmbedded(['fieldName' => $prefix . '.' . $property, 'class' => $embeddableMetadata->name, 'columnPrefix' => $embeddableClass['columnPrefix'], 'declaredField' => $embeddableClass['declaredField'] ? $prefix . '.' . $embeddableClass['declaredField'] : $prefix, 'originalField' => $embeddableClass['originalField'] ?: $property]); } } private function addInheritedIndexes(ClassMetadata $subClass, ClassMetadata $parentClass) : void { if (!$parentClass->isMappedSuperclass) { return; } foreach (['uniqueConstraints', 'indexes'] as $indexType) { if (isset($parentClass->table[$indexType])) { foreach ($parentClass->table[$indexType] as $indexName => $index) { if (isset($subClass->table[$indexType][$indexName])) { continue; } $subClass->table[$indexType][$indexName] = $index; } } } } private function addInheritedNamedQueries(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->namedQueries as $name => $query) { if (!isset($subClass->namedQueries[$name])) { $subClass->addNamedQuery(['name' => $query['name'], 'query' => $query['query']]); } } } private function addInheritedNamedNativeQueries(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->namedNativeQueries as $name => $query) { if (!isset($subClass->namedNativeQueries[$name])) { $subClass->addNamedNativeQuery(['name' => $query['name'], 'query' => $query['query'], 'isSelfClass' => $query['isSelfClass'], 'resultSetMapping' => $query['resultSetMapping'], 'resultClass' => $query['isSelfClass'] ? $subClass->name : $query['resultClass']]); } } } private function addInheritedSqlResultSetMappings(ClassMetadata $subClass, ClassMetadata $parentClass) : void { foreach ($parentClass->sqlResultSetMappings as $name => $mapping) { if (!isset($subClass->sqlResultSetMappings[$name])) { $entities = []; foreach ($mapping['entities'] as $entity) { $entities[] = ['fields' => $entity['fields'], 'isSelfClass' => $entity['isSelfClass'], 'discriminatorColumn' => $entity['discriminatorColumn'], 'entityClass' => $entity['isSelfClass'] ? $subClass->name : $entity['entityClass']]; } $subClass->addSqlResultSetMapping(['name' => $mapping['name'], 'columns' => $mapping['columns'], 'entities' => $entities]); } } } private function completeIdGeneratorMapping(ClassMetadataInfo $class) : void { $idGenType = $class->generatorType; if ($idGenType === ClassMetadata::GENERATOR_TYPE_AUTO) { $class->setIdGeneratorType($this->determineIdGeneratorStrategy($this->getTargetPlatform())); } switch ($class->generatorType) { case ClassMetadata::GENERATOR_TYPE_IDENTITY: $sequenceName = null; $fieldName = $class->identifier ? $class->getSingleIdentifierFieldName() : null; if ($this->getTargetPlatform()->usesSequenceEmulatedIdentityColumns()) { $columnName = $class->getSingleIdentifierColumnName(); $quoted = isset($class->fieldMappings[$fieldName]['quoted']) || isset($class->table['quoted']); $sequencePrefix = $class->getSequencePrefix($this->getTargetPlatform()); $sequenceName = $this->getTargetPlatform()->getIdentitySequenceName($sequencePrefix, $columnName); $definition = ['sequenceName' => $this->truncateSequenceName($sequenceName)]; if ($quoted) { $definition['quoted'] = \true; } $sequenceName = $this->em->getConfiguration()->getQuoteStrategy()->getSequenceName($definition, $class, $this->getTargetPlatform()); } $generator = $fieldName && $class->fieldMappings[$fieldName]['type'] === 'bigint' ? new BigIntegerIdentityGenerator($sequenceName) : new IdentityGenerator($sequenceName); $class->setIdGenerator($generator); break; case ClassMetadata::GENERATOR_TYPE_SEQUENCE: $definition = $class->sequenceGeneratorDefinition; if (!$definition) { $fieldName = $class->getSingleIdentifierFieldName(); $sequenceName = $class->getSequenceName($this->getTargetPlatform()); $quoted = isset($class->fieldMappings[$fieldName]['quoted']) || isset($class->table['quoted']); $definition = ['sequenceName' => $this->truncateSequenceName($sequenceName), 'allocationSize' => 1, 'initialValue' => 1]; if ($quoted) { $definition['quoted'] = \true; } $class->setSequenceGeneratorDefinition($definition); } $sequenceGenerator = new SequenceGenerator($this->em->getConfiguration()->getQuoteStrategy()->getSequenceName($definition, $class, $this->getTargetPlatform()), (int) $definition['allocationSize']); $class->setIdGenerator($sequenceGenerator); break; case ClassMetadata::GENERATOR_TYPE_NONE: $class->setIdGenerator(new AssignedGenerator()); break; case ClassMetadata::GENERATOR_TYPE_UUID: Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/issues/7312', 'Mapping for %s: the "UUID" id generator strategy is deprecated with no replacement', $class->name); $class->setIdGenerator(new UuidGenerator()); break; case ClassMetadata::GENERATOR_TYPE_CUSTOM: $definition = $class->customGeneratorDefinition; if ($definition === null) { throw InvalidCustomGenerator::onClassNotConfigured(); } if (!class_exists($definition['class'])) { throw InvalidCustomGenerator::onMissingClass($definition); } $class->setIdGenerator(new $definition['class']()); break; default: throw UnknownGeneratorType::create($class->generatorType); } } private function determineIdGeneratorStrategy(AbstractPlatform $platform) : int { if ($platform instanceof Platforms\OraclePlatform || $platform instanceof Platforms\PostgreSQL94Platform || $platform instanceof Platforms\PostgreSQLPlatform) { return ClassMetadata::GENERATOR_TYPE_SEQUENCE; } if ($platform->supportsIdentityColumns()) { return ClassMetadata::GENERATOR_TYPE_IDENTITY; } if ($platform->supportsSequences()) { return ClassMetadata::GENERATOR_TYPE_SEQUENCE; } throw CannotGenerateIds::withPlatform($platform); } private function truncateSequenceName(string $schemaElementName) : string { $platform = $this->getTargetPlatform(); if (!in_array($platform->getName(), ['oracle', 'sqlanywhere'], \true)) { return $schemaElementName; } $maxIdentifierLength = $platform->getMaxIdentifierLength(); if (strlen($schemaElementName) > $maxIdentifierLength) { return substr($schemaElementName, 0, $maxIdentifierLength); } return $schemaElementName; } private function inheritIdGeneratorMapping(ClassMetadataInfo $class, ClassMetadataInfo $parent) : void { if ($parent->isIdGeneratorSequence()) { $class->setSequenceGeneratorDefinition($parent->sequenceGeneratorDefinition); } if ($parent->generatorType) { $class->setIdGeneratorType($parent->generatorType); } if ($parent->idGenerator) { $class->setIdGenerator($parent->idGenerator); } } protected function wakeupReflection(ClassMetadataInterface $class, ReflectionService $reflService) { assert($class instanceof ClassMetadata); $class->wakeupReflection($reflService); } protected function initializeReflection(ClassMetadataInterface $class, ReflectionService $reflService) { assert($class instanceof ClassMetadata); $class->initializeReflection($reflService); } protected function getFqcnFromAlias($namespaceAlias, $simpleClassName) { return $this->em->getConfiguration()->getEntityNamespace($namespaceAlias) . '\\' . $simpleClassName; } protected function getDriver() { return $this->driver; } protected function isEntity(ClassMetadataInterface $class) { return isset($class->isMappedSuperclass) && $class->isMappedSuperclass === \false; } private function getTargetPlatform() : Platforms\AbstractPlatform { if (!$this->targetPlatform) { $this->targetPlatform = $this->em->getConnection()->getDatabasePlatform(); } return $this->targetPlatform; } }
vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- declare (strict_types=1); namespace MailPoetVendor\Doctrine\ORM; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\Common\Cache\Cache; use MailPoetVendor\Doctrine\Common\Cache\Psr6\CacheAdapter; use MailPoetVendor\Doctrine\Common\Cache\Psr6\DoctrineProvider; use MailPoetVendor\Doctrine\Common\Collections\ArrayCollection; use MailPoetVendor\Doctrine\DBAL\Cache\QueryCacheProfile; use MailPoetVendor\Doctrine\DBAL\LockMode; use MailPoetVendor\Doctrine\DBAL\Types\Type; use MailPoetVendor\Doctrine\Deprecations\Deprecation; use MailPoetVendor\Doctrine\ORM\Internal\Hydration\IterableResult; use MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadata; use MailPoetVendor\Doctrine\ORM\Query\AST\DeleteStatement; use MailPoetVendor\Doctrine\ORM\Query\AST\SelectStatement; use MailPoetVendor\Doctrine\ORM\Query\AST\UpdateStatement; use MailPoetVendor\Doctrine\ORM\Query\Exec\AbstractSqlExecutor; use MailPoetVendor\Doctrine\ORM\Query\Parameter; use MailPoetVendor\Doctrine\ORM\Query\ParameterTypeInferer; use MailPoetVendor\Doctrine\ORM\Query\Parser; use MailPoetVendor\Doctrine\ORM\Query\ParserResult; use MailPoetVendor\Doctrine\ORM\Query\QueryException; use MailPoetVendor\Doctrine\ORM\Utility\HierarchyDiscriminatorResolver; use MailPoetVendor\Psr\Cache\CacheItemPoolInterface; use function array_keys; use function array_values; use function assert; use function count; use function get_debug_type; use function in_array; use function ksort; use function md5; use function method_exists; use function reset; use function serialize; use function sha1; use function stripos; final class Query extends AbstractQuery { public const STATE_CLEAN = 1; public const STATE_DIRTY = 2; public const HINT_REFRESH = 'doctrine.refresh'; public const HINT_CACHE_ENABLED = 'doctrine.cache.enabled'; public const HINT_CACHE_EVICT = 'doctrine.cache.evict'; public const HINT_REFRESH_ENTITY = 'doctrine.refresh.entity'; public const HINT_FORCE_PARTIAL_LOAD = 'doctrine.forcePartialLoad'; public const HINT_INCLUDE_META_COLUMNS = 'doctrine.includeMetaColumns'; public const HINT_CUSTOM_TREE_WALKERS = 'doctrine.customTreeWalkers'; public const HINT_CUSTOM_OUTPUT_WALKER = 'doctrine.customOutputWalker'; public const HINT_READ_ONLY = 'doctrine.readOnly'; public const HINT_INTERNAL_ITERATION = 'doctrine.internal.iteration'; public const HINT_LOCK_MODE = 'doctrine.lockMode'; private $_state = self::STATE_DIRTY; private $parsedTypes = []; private $dql = null; private $parserResult; private $firstResult = null; private $maxResults = null; private $queryCache; private $expireQueryCache = \false; private $queryCacheTTL; private $useQueryCache = \true; public function getSQL() { return $this->parse()->getSqlExecutor()->getSqlStatements(); } public function getAST() { $parser = new Parser($this); return $parser->getAST(); } protected function getResultSetMapping() { if ($this->_resultSetMapping === null) { $this->_resultSetMapping = $this->parse()->getResultSetMapping(); } return $this->_resultSetMapping; } private function parse() : ParserResult { $types = []; foreach ($this->parameters as $parameter) { $types[$parameter->getName()] = $parameter->getType(); } if ($this->_state === self::STATE_CLEAN && $this->parsedTypes === $types && $this->_em->isFiltersStateClean()) { return $this->parserResult; } $this->_state = self::STATE_CLEAN; $this->parsedTypes = $types; $queryCache = $this->queryCache ?? $this->_em->getConfiguration()->getQueryCache(); if (!($this->useQueryCache && $queryCache)) { $parser = new Parser($this); $this->parserResult = $parser->parse(); return $this->parserResult; } $cacheItem = $queryCache->getItem($this->getQueryCacheId()); if (!$this->expireQueryCache && $cacheItem->isHit()) { $cached = $cacheItem->get(); if ($cached instanceof ParserResult) { $this->parserResult = $cached; return $this->parserResult; } } $parser = new Parser($this); $this->parserResult = $parser->parse(); $queryCache->save($cacheItem->set($this->parserResult)->expiresAfter($this->queryCacheTTL)); return $this->parserResult; } protected function _doExecute() { $executor = $this->parse()->getSqlExecutor(); if ($this->_queryCacheProfile) { $executor->setQueryCacheProfile($this->_queryCacheProfile); } else { $executor->removeQueryCacheProfile(); } if ($this->_resultSetMapping === null) { $this->_resultSetMapping = $this->parserResult->getResultSetMapping(); } $paramMappings = $this->parserResult->getParameterMappings(); $paramCount = count($this->parameters); $mappingCount = count($paramMappings); if ($paramCount > $mappingCount) { throw QueryException::tooManyParameters($mappingCount, $paramCount); } if ($paramCount < $mappingCount) { throw QueryException::tooFewParameters($mappingCount, $paramCount); } if ($this->hasCache && isset($this->_hints[self::HINT_CACHE_EVICT]) && $this->_hints[self::HINT_CACHE_EVICT]) { $this->evictEntityCacheRegion(); } [$sqlParams, $types] = $this->processParameterMappings($paramMappings); $this->evictResultSetCache($executor, $sqlParams, $types, $this->_em->getConnection()->getParams()); return $executor->execute($this->_em->getConnection(), $sqlParams, $types); } private function evictResultSetCache(AbstractSqlExecutor $executor, array $sqlParams, array $types, array $connectionParams) : void { if ($this->_queryCacheProfile === null || !$this->getExpireResultCache()) { return; } $cache = method_exists(QueryCacheProfile::class, 'getResultCache') ? $this->_queryCacheProfile->getResultCache() : $this->_queryCacheProfile->getResultCacheDriver(); assert($cache !== null); $statements = (array) $executor->getSqlStatements(); foreach ($statements as $statement) { $cacheKeys = $this->_queryCacheProfile->generateCacheKeys($statement, $sqlParams, $types, $connectionParams); $cache instanceof CacheItemPoolInterface ? $cache->deleteItem(reset($cacheKeys)) : $cache->delete(reset($cacheKeys)); } } private function evictEntityCacheRegion() : void { $AST = $this->getAST(); if ($AST instanceof SelectStatement) { throw new QueryException('The hint "HINT_CACHE_EVICT" is not valid for select statements.'); } $className = $AST instanceof DeleteStatement ? $AST->deleteClause->abstractSchemaName : $AST->updateClause->abstractSchemaName; $this->_em->getCache()->evictEntityRegion($className); } private function processParameterMappings(array $paramMappings) : array { $sqlParams = []; $types = []; foreach ($this->parameters as $parameter) { $key = $parameter->getName(); if (!isset($paramMappings[$key])) { throw QueryException::unknownParameter($key); } [$value, $type] = $this->resolveParameterValue($parameter); foreach ($paramMappings[$key] as $position) { $types[$position] = $type; } $sqlPositions = $paramMappings[$key]; $value = [$value]; $countValue = count($value); for ($i = 0, $l = count($sqlPositions); $i < $l; $i++) { $sqlParams[$sqlPositions[$i]] = $value[$i % $countValue]; } } if (count($sqlParams) !== count($types)) { throw QueryException::parameterTypeMismatch(); } if ($sqlParams) { ksort($sqlParams); $sqlParams = array_values($sqlParams); ksort($types); $types = array_values($types); } return [$sqlParams, $types]; } private function resolveParameterValue(Parameter $parameter) : array { if ($parameter->typeWasSpecified()) { return [$parameter->getValue(), $parameter->getType()]; } $key = $parameter->getName(); $originalValue = $parameter->getValue(); $value = $originalValue; $rsm = $this->getResultSetMapping(); assert($rsm !== null); if ($value instanceof ClassMetadata && isset($rsm->metadataParameterMapping[$key])) { $value = $value->getMetadataValue($rsm->metadataParameterMapping[$key]); } if ($value instanceof ClassMetadata && isset($rsm->discriminatorParameters[$key])) { $value = array_keys(HierarchyDiscriminatorResolver::resolveDiscriminatorsForClass($value, $this->_em)); } $processedValue = $this->processParameterValue($value); return [$processedValue, $originalValue === $processedValue ? $parameter->getType() : ParameterTypeInferer::inferType($processedValue)]; } public function setQueryCacheDriver($queryCache) : self { Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/pull/9004', '%s is deprecated and will be removed in Doctrine 3.0. Use setQueryCache() instead.', __METHOD__); $this->queryCache = $queryCache ? CacheAdapter::wrap($queryCache) : null; return $this; } public function setQueryCache(?CacheItemPoolInterface $queryCache) : self { $this->queryCache = $queryCache; return $this; } public function useQueryCache($bool) : self { $this->useQueryCache = $bool; return $this; } public function getQueryCacheDriver() : ?Cache { Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/pull/9004', '%s is deprecated and will be removed in Doctrine 3.0 without replacement.', __METHOD__); $queryCache = $this->queryCache ?? $this->_em->getConfiguration()->getQueryCache(); return $queryCache ? DoctrineProvider::wrap($queryCache) : null; } public function setQueryCacheLifetime($timeToLive) : self { if ($timeToLive !== null) { $timeToLive = (int) $timeToLive; } $this->queryCacheTTL = $timeToLive; return $this; } public function getQueryCacheLifetime() : ?int { return $this->queryCacheTTL; } public function expireQueryCache($expire = \true) : self { $this->expireQueryCache = $expire; return $this; } public function getExpireQueryCache() : bool { return $this->expireQueryCache; } public function free() : void { parent::free(); $this->dql = null; $this->_state = self::STATE_CLEAN; } public function setDQL($dqlQuery) : self { if ($dqlQuery !== null) { $this->dql = $dqlQuery; $this->_state = self::STATE_DIRTY; } return $this; } public function getDQL() : ?string { return $this->dql; } public function getState() : int { return $this->_state; } public function contains($dql) : bool { return stripos($this->getDQL(), $dql) !== \false; } public function setFirstResult($firstResult) : self { $this->firstResult = $firstResult; $this->_state = self::STATE_DIRTY; return $this; } public function getFirstResult() : ?int { return $this->firstResult; } public function setMaxResults($maxResults) : self { $this->maxResults = $maxResults; $this->_state = self::STATE_DIRTY; return $this; } public function getMaxResults() : ?int { return $this->maxResults; } public function iterate($parameters = null, $hydrationMode = self::HYDRATE_OBJECT) : IterableResult { $this->setHint(self::HINT_INTERNAL_ITERATION, \true); return parent::iterate($parameters, $hydrationMode); } public function toIterable(iterable $parameters = [], $hydrationMode = self::HYDRATE_OBJECT) : iterable { $this->setHint(self::HINT_INTERNAL_ITERATION, \true); return parent::toIterable($parameters, $hydrationMode); } public function setHint($name, $value) : self { $this->_state = self::STATE_DIRTY; return parent::setHint($name, $value); } public function setHydrationMode($hydrationMode) : self { $this->_state = self::STATE_DIRTY; return parent::setHydrationMode($hydrationMode); } public function setLockMode($lockMode) : self { if (in_array($lockMode, [LockMode::NONE, LockMode::PESSIMISTIC_READ, LockMode::PESSIMISTIC_WRITE], \true)) { if (!$this->_em->getConnection()->isTransactionActive()) { throw TransactionRequiredException::transactionRequired(); } } $this->setHint(self::HINT_LOCK_MODE, $lockMode); return $this; } public function getLockMode() : ?int { $lockMode = $this->getHint(self::HINT_LOCK_MODE); if ($lockMode === \false) { return null; } return $lockMode; } protected function getQueryCacheId() : string { ksort($this->_hints); return md5($this->getDQL() . serialize($this->_hints) . '&platform=' . get_debug_type($this->getEntityManager()->getConnection()->getDatabasePlatform()) . ($this->_em->hasFilters() ? $this->_em->getFilters()->getHash() : '') . '&firstResult=' . $this->firstResult . '&maxResult=' . $this->maxResults . '&hydrationMode=' . $this->_hydrationMode . '&types=' . serialize($this->parsedTypes) . 'DOCTRINE_QUERY_CACHE_SALT'); } protected function getHash() : string { return sha1(parent::getHash() . '-' . $this->firstResult . '-' . $this->maxResults); } public function __clone() { parent::__clone(); $this->_state = self::STATE_DIRTY; } }
1
  <?php
2
+ declare (strict_types=1); namespace MailPoetVendor\Doctrine\ORM; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\Common\Cache\Cache; use MailPoetVendor\Doctrine\Common\Cache\Psr6\CacheAdapter; use MailPoetVendor\Doctrine\Common\Cache\Psr6\DoctrineProvider; use MailPoetVendor\Doctrine\Common\Collections\ArrayCollection; use MailPoetVendor\Doctrine\DBAL\Cache\QueryCacheProfile; use MailPoetVendor\Doctrine\DBAL\LockMode; use MailPoetVendor\Doctrine\DBAL\Types\Type; use MailPoetVendor\Doctrine\Deprecations\Deprecation; use MailPoetVendor\Doctrine\ORM\Internal\Hydration\IterableResult; use MailPoetVendor\Doctrine\ORM\Mapping\ClassMetadata; use MailPoetVendor\Doctrine\ORM\Query\AST\DeleteStatement; use MailPoetVendor\Doctrine\ORM\Query\AST\SelectStatement; use MailPoetVendor\Doctrine\ORM\Query\AST\UpdateStatement; use MailPoetVendor\Doctrine\ORM\Query\Exec\AbstractSqlExecutor; use MailPoetVendor\Doctrine\ORM\Query\Parameter; use MailPoetVendor\Doctrine\ORM\Query\ParameterTypeInferer; use MailPoetVendor\Doctrine\ORM\Query\Parser; use MailPoetVendor\Doctrine\ORM\Query\ParserResult; use MailPoetVendor\Doctrine\ORM\Query\QueryException; use MailPoetVendor\Doctrine\ORM\Utility\HierarchyDiscriminatorResolver; use MailPoetVendor\Psr\Cache\CacheItemPoolInterface; use function array_keys; use function array_values; use function assert; use function count; use function get_debug_type; use function in_array; use function ksort; use function md5; use function method_exists; use function reset; use function serialize; use function sha1; use function stripos; final class Query extends AbstractQuery { public const STATE_CLEAN = 1; public const STATE_DIRTY = 2; public const HINT_REFRESH = 'doctrine.refresh'; public const HINT_CACHE_ENABLED = 'doctrine.cache.enabled'; public const HINT_CACHE_EVICT = 'doctrine.cache.evict'; public const HINT_REFRESH_ENTITY = 'doctrine.refresh.entity'; public const HINT_FORCE_PARTIAL_LOAD = 'doctrine.forcePartialLoad'; public const HINT_INCLUDE_META_COLUMNS = 'doctrine.includeMetaColumns'; public const HINT_CUSTOM_TREE_WALKERS = 'doctrine.customTreeWalkers'; public const HINT_CUSTOM_OUTPUT_WALKER = 'doctrine.customOutputWalker'; public const HINT_READ_ONLY = 'doctrine.readOnly'; public const HINT_INTERNAL_ITERATION = 'doctrine.internal.iteration'; public const HINT_LOCK_MODE = 'doctrine.lockMode'; private $_state = self::STATE_DIRTY; private $parsedTypes = []; private $dql = null; private $parserResult; private $firstResult = null; private $maxResults = null; private $queryCache; private $expireQueryCache = \false; private $queryCacheTTL; private $useQueryCache = \true; public function getSQL() { return $this->parse()->getSqlExecutor()->getSqlStatements(); } public function getAST() { $parser = new Parser($this); return $parser->getAST(); } protected function getResultSetMapping() { if ($this->_resultSetMapping === null) { $this->_resultSetMapping = $this->parse()->getResultSetMapping(); } return $this->_resultSetMapping; } private function parse() : ParserResult { $types = []; foreach ($this->parameters as $parameter) { $types[$parameter->getName()] = $parameter->getType(); } if ($this->_state === self::STATE_CLEAN && $this->parsedTypes === $types && $this->_em->isFiltersStateClean()) { return $this->parserResult; } $this->_state = self::STATE_CLEAN; $this->parsedTypes = $types; $queryCache = $this->queryCache ?? $this->_em->getConfiguration()->getQueryCache(); if (!($this->useQueryCache && $queryCache)) { $parser = new Parser($this); $this->parserResult = $parser->parse(); return $this->parserResult; } $cacheItem = $queryCache->getItem($this->getQueryCacheId()); if (!$this->expireQueryCache && $cacheItem->isHit()) { $cached = $cacheItem->get(); if ($cached instanceof ParserResult) { $this->parserResult = $cached; return $this->parserResult; } } $parser = new Parser($this); $this->parserResult = $parser->parse(); $queryCache->save($cacheItem->set($this->parserResult)->expiresAfter($this->queryCacheTTL)); return $this->parserResult; } protected function _doExecute() { $executor = $this->parse()->getSqlExecutor(); if ($this->_queryCacheProfile) { $executor->setQueryCacheProfile($this->_queryCacheProfile); } else { $executor->removeQueryCacheProfile(); } if ($this->_resultSetMapping === null) { $this->_resultSetMapping = $this->parserResult->getResultSetMapping(); } $paramMappings = $this->parserResult->getParameterMappings(); $paramCount = count($this->parameters); $mappingCount = count($paramMappings); if ($paramCount > $mappingCount) { throw QueryException::tooManyParameters($mappingCount, $paramCount); } if ($paramCount < $mappingCount) { throw QueryException::tooFewParameters($mappingCount, $paramCount); } if ($this->hasCache && isset($this->_hints[self::HINT_CACHE_EVICT]) && $this->_hints[self::HINT_CACHE_EVICT]) { $this->evictEntityCacheRegion(); } [$sqlParams, $types] = $this->processParameterMappings($paramMappings); $this->evictResultSetCache($executor, $sqlParams, $types, $this->_em->getConnection()->getParams()); return $executor->execute($this->_em->getConnection(), $sqlParams, $types); } private function evictResultSetCache(AbstractSqlExecutor $executor, array $sqlParams, array $types, array $connectionParams) : void { if ($this->_queryCacheProfile === null || !$this->getExpireResultCache()) { return; } $cache = method_exists(QueryCacheProfile::class, 'getResultCache') ? $this->_queryCacheProfile->getResultCache() : $this->_queryCacheProfile->getResultCacheDriver(); assert($cache !== null); $statements = (array) $executor->getSqlStatements(); foreach ($statements as $statement) { $cacheKeys = $this->_queryCacheProfile->generateCacheKeys($statement, $sqlParams, $types, $connectionParams); $cache instanceof CacheItemPoolInterface ? $cache->deleteItem(reset($cacheKeys)) : $cache->delete(reset($cacheKeys)); } } private function evictEntityCacheRegion() : void { $AST = $this->getAST(); if ($AST instanceof SelectStatement) { throw new QueryException('The hint "HINT_CACHE_EVICT" is not valid for select statements.'); } $className = $AST instanceof DeleteStatement ? $AST->deleteClause->abstractSchemaName : $AST->updateClause->abstractSchemaName; $this->_em->getCache()->evictEntityRegion($className); } private function processParameterMappings(array $paramMappings) : array { $sqlParams = []; $types = []; foreach ($this->parameters as $parameter) { $key = $parameter->getName(); if (!isset($paramMappings[$key])) { throw QueryException::unknownParameter($key); } [$value, $type] = $this->resolveParameterValue($parameter); foreach ($paramMappings[$key] as $position) { $types[$position] = $type; } $sqlPositions = $paramMappings[$key]; $value = [$value]; $countValue = count($value); for ($i = 0, $l = count($sqlPositions); $i < $l; $i++) { $sqlParams[$sqlPositions[$i]] = $value[$i % $countValue]; } } if (count($sqlParams) !== count($types)) { throw QueryException::parameterTypeMismatch(); } if ($sqlParams) { ksort($sqlParams); $sqlParams = array_values($sqlParams); ksort($types); $types = array_values($types); } return [$sqlParams, $types]; } private function resolveParameterValue(Parameter $parameter) : array { if ($parameter->typeWasSpecified()) { return [$parameter->getValue(), $parameter->getType()]; } $key = $parameter->getName(); $originalValue = $parameter->getValue(); $value = $originalValue; $rsm = $this->getResultSetMapping(); assert($rsm !== null); if ($value instanceof ClassMetadata && isset($rsm->metadataParameterMapping[$key])) { $value = $value->getMetadataValue($rsm->metadataParameterMapping[$key]); } if ($value instanceof ClassMetadata && isset($rsm->discriminatorParameters[$key])) { $value = array_keys(HierarchyDiscriminatorResolver::resolveDiscriminatorsForClass($value, $this->_em)); } $processedValue = $this->processParameterValue($value); return [$processedValue, $originalValue === $processedValue ? $parameter->getType() : ParameterTypeInferer::inferType($processedValue)]; } public function setQueryCacheDriver($queryCache) : self { Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/pull/9004', '%s is deprecated and will be removed in Doctrine 3.0. Use setQueryCache() instead.', __METHOD__); $this->queryCache = $queryCache ? CacheAdapter::wrap($queryCache) : null; return $this; } public function setQueryCache(?CacheItemPoolInterface $queryCache) : self { $this->queryCache = $queryCache; return $this; } public function useQueryCache($bool) : self { $this->useQueryCache = $bool; return $this; } public function getQueryCacheDriver() : ?Cache { Deprecation::trigger('doctrine/orm', 'https://github.com/doctrine/orm/pull/9004', '%s is deprecated and will be removed in Doctrine 3.0 without replacement.', __METHOD__); $queryCache = $this->queryCache ?? $this->_em->getConfiguration()->getQueryCache(); return $queryCache ? DoctrineProvider::wrap($queryCache) : null; } public function setQueryCacheLifetime($timeToLive) : self { if ($timeToLive !== null) { $timeToLive = (int) $timeToLive; } $this->queryCacheTTL = $timeToLive; return $this; } public function getQueryCacheLifetime() : ?int { return $this->queryCacheTTL; } public function expireQueryCache($expire = \true) : self { $this->expireQueryCache = $expire; return $this; } public function getExpireQueryCache() : bool { return $this->expireQueryCache; } public function free() : void { parent::free(); $this->dql = null; $this->_state = self::STATE_CLEAN; } public function setDQL($dqlQuery) : self { if ($dqlQuery !== null) { $this->dql = $dqlQuery; $this->_state = self::STATE_DIRTY; } return $this; } public function getDQL() : ?string { return $this->dql; } public function getState() : int { return $this->_state; } public function contains($dql) : bool { return stripos($this->getDQL(), $dql) !== \false; } public function setFirstResult($firstResult) : self { if ($firstResult !== null) { $firstResult = (int) $firstResult; } $this->firstResult = $firstResult; $this->_state = self::STATE_DIRTY; return $this; } public function getFirstResult() : ?int { return $this->firstResult; } public function setMaxResults($maxResults) : self { if ($maxResults !== null) { $maxResults = (int) $maxResults; } $this->maxResults = $maxResults; $this->_state = self::STATE_DIRTY; return $this; } public function getMaxResults() : ?int { return $this->maxResults; } public function iterate($parameters = null, $hydrationMode = self::HYDRATE_OBJECT) : IterableResult { $this->setHint(self::HINT_INTERNAL_ITERATION, \true); return parent::iterate($parameters, $hydrationMode); } public function toIterable(iterable $parameters = [], $hydrationMode = self::HYDRATE_OBJECT) : iterable { $this->setHint(self::HINT_INTERNAL_ITERATION, \true); return parent::toIterable($parameters, $hydrationMode); } public function setHint($name, $value) : self { $this->_state = self::STATE_DIRTY; return parent::setHint($name, $value); } public function setHydrationMode($hydrationMode) : self { $this->_state = self::STATE_DIRTY; return parent::setHydrationMode($hydrationMode); } public function setLockMode($lockMode) : self { if (in_array($lockMode, [LockMode::NONE, LockMode::PESSIMISTIC_READ, LockMode::PESSIMISTIC_WRITE], \true)) { if (!$this->_em->getConnection()->isTransactionActive()) { throw TransactionRequiredException::transactionRequired(); } } $this->setHint(self::HINT_LOCK_MODE, $lockMode); return $this; } public function getLockMode() : ?int { $lockMode = $this->getHint(self::HINT_LOCK_MODE); if ($lockMode === \false) { return null; } return $lockMode; } protected function getQueryCacheId() : string { ksort($this->_hints); return md5($this->getDQL() . serialize($this->_hints) . '&platform=' . get_debug_type($this->getEntityManager()->getConnection()->getDatabasePlatform()) . ($this->_em->hasFilters() ? $this->_em->getFilters()->getHash() : '') . '&firstResult=' . $this->firstResult . '&maxResult=' . $this->maxResults . '&hydrationMode=' . $this->_hydrationMode . '&types=' . serialize($this->parsedTypes) . 'DOCTRINE_QUERY_CACHE_SALT'); } protected function getHash() : string { return sha1(parent::getHash() . '-' . $this->firstResult . '-' . $this->maxResults); } public function __clone() { parent::__clone(); $this->_state = self::STATE_DIRTY; } }
vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- declare (strict_types=1); namespace MailPoetVendor\Doctrine\ORM; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\Common\Collections\ArrayCollection; use MailPoetVendor\Doctrine\Common\Collections\Criteria; use MailPoetVendor\Doctrine\ORM\Query\Expr; use MailPoetVendor\Doctrine\ORM\Query\Parameter; use MailPoetVendor\Doctrine\ORM\Query\QueryExpressionVisitor; use InvalidArgumentException; use RuntimeException; use function array_keys; use function array_merge; use function array_unshift; use function assert; use function func_get_args; use function func_num_args; use function implode; use function in_array; use function is_array; use function is_numeric; use function is_object; use function is_string; use function key; use function reset; use function sprintf; use function strpos; use function strrpos; use function substr; class QueryBuilder { public const SELECT = 0; public const DELETE = 1; public const UPDATE = 2; public const STATE_DIRTY = 0; public const STATE_CLEAN = 1; private $_em; private $_dqlParts = ['distinct' => \false, 'select' => [], 'from' => [], 'join' => [], 'set' => [], 'where' => null, 'groupBy' => [], 'having' => null, 'orderBy' => []]; private $_type = self::SELECT; private $_state = self::STATE_CLEAN; private $_dql; private $parameters; private $_firstResult = null; private $_maxResults = null; private $joinRootAliases = []; protected $cacheable = \false; protected $cacheRegion; protected $cacheMode; protected $lifetime = 0; public function __construct(EntityManagerInterface $em) { $this->_em = $em; $this->parameters = new ArrayCollection(); } public function expr() { return $this->_em->getExpressionBuilder(); } public function setCacheable($cacheable) { $this->cacheable = (bool) $cacheable; return $this; } public function isCacheable() { return $this->cacheable; } public function setCacheRegion($cacheRegion) { $this->cacheRegion = (string) $cacheRegion; return $this; } public function getCacheRegion() { return $this->cacheRegion; } public function getLifetime() { return $this->lifetime; } public function setLifetime($lifetime) { $this->lifetime = (int) $lifetime; return $this; } public function getCacheMode() { return $this->cacheMode; } public function setCacheMode($cacheMode) { $this->cacheMode = (int) $cacheMode; return $this; } public function getType() { return $this->_type; } public function getEntityManager() { return $this->_em; } public function getState() { return $this->_state; } public function getDQL() { if ($this->_dql !== null && $this->_state === self::STATE_CLEAN) { return $this->_dql; } switch ($this->_type) { case self::DELETE: $dql = $this->getDQLForDelete(); break; case self::UPDATE: $dql = $this->getDQLForUpdate(); break; case self::SELECT: default: $dql = $this->getDQLForSelect(); break; } $this->_state = self::STATE_CLEAN; $this->_dql = $dql; return $dql; } public function getQuery() { $parameters = clone $this->parameters; $query = $this->_em->createQuery($this->getDQL())->setParameters($parameters)->setFirstResult($this->_firstResult)->setMaxResults($this->_maxResults); if ($this->lifetime) { $query->setLifetime($this->lifetime); } if ($this->cacheMode) { $query->setCacheMode($this->cacheMode); } if ($this->cacheable) { $query->setCacheable($this->cacheable); } if ($this->cacheRegion) { $query->setCacheRegion($this->cacheRegion); } return $query; } private function findRootAlias(string $alias, string $parentAlias) : string { if (in_array($parentAlias, $this->getRootAliases(), \true)) { $rootAlias = $parentAlias; } elseif (isset($this->joinRootAliases[$parentAlias])) { $rootAlias = $this->joinRootAliases[$parentAlias]; } else { $rootAlias = $this->getRootAlias(); } $this->joinRootAliases[$alias] = $rootAlias; return $rootAlias; } public function getRootAlias() { $aliases = $this->getRootAliases(); if (!isset($aliases[0])) { throw new RuntimeException('No alias was set before invoking getRootAlias().'); } return $aliases[0]; } public function getRootAliases() { $aliases = []; foreach ($this->_dqlParts['from'] as &$fromClause) { if (is_string($fromClause)) { $spacePos = strrpos($fromClause, ' '); $from = substr($fromClause, 0, $spacePos); $alias = substr($fromClause, $spacePos + 1); $fromClause = new Query\Expr\From($from, $alias); } $aliases[] = $fromClause->getAlias(); } return $aliases; } public function getAllAliases() { return array_merge($this->getRootAliases(), array_keys($this->joinRootAliases)); } public function getRootEntities() { $entities = []; foreach ($this->_dqlParts['from'] as &$fromClause) { if (is_string($fromClause)) { $spacePos = strrpos($fromClause, ' '); $from = substr($fromClause, 0, $spacePos); $alias = substr($fromClause, $spacePos + 1); $fromClause = new Query\Expr\From($from, $alias); } $entities[] = $fromClause->getFrom(); } return $entities; } public function setParameter($key, $value, $type = null) { $existingParameter = $this->getParameter($key); if ($existingParameter !== null) { $existingParameter->setValue($value, $type); return $this; } $this->parameters->add(new Parameter($key, $value, $type)); return $this; } public function setParameters($parameters) { if (is_array($parameters)) { $parameterCollection = new ArrayCollection(); foreach ($parameters as $key => $value) { $parameter = new Parameter($key, $value); $parameterCollection->add($parameter); } $parameters = $parameterCollection; } $this->parameters = $parameters; return $this; } public function getParameters() { return $this->parameters; } public function getParameter($key) { $key = Parameter::normalizeName($key); $filteredParameters = $this->parameters->filter(static function (Parameter $parameter) use($key) : bool { $parameterName = $parameter->getName(); return $key === $parameterName; }); return !$filteredParameters->isEmpty() ? $filteredParameters->first() : null; } public function setFirstResult($firstResult) { $this->_firstResult = $firstResult; return $this; } public function getFirstResult() { return $this->_firstResult; } public function setMaxResults($maxResults) { $this->_maxResults = $maxResults; return $this; } public function getMaxResults() { return $this->_maxResults; } public function add($dqlPartName, $dqlPart, $append = \false) { if ($append && ($dqlPartName === 'where' || $dqlPartName === 'having')) { throw new InvalidArgumentException("Using \$append = true does not have an effect with 'where' or 'having' " . 'parts. See QueryBuilder#andWhere() for an example for correct usage.'); } $isMultiple = is_array($this->_dqlParts[$dqlPartName]) && !($dqlPartName === 'join' && !$append); if (is_array($dqlPart) && $dqlPartName !== 'join') { $dqlPart = reset($dqlPart); } if ($dqlPartName === 'join') { $newDqlPart = []; foreach ($dqlPart as $k => $v) { $k = is_numeric($k) ? $this->getRootAlias() : $k; $newDqlPart[$k] = $v; } $dqlPart = $newDqlPart; } if ($append && $isMultiple) { if (is_array($dqlPart)) { $key = key($dqlPart); $this->_dqlParts[$dqlPartName][$key][] = $dqlPart[$key]; } else { $this->_dqlParts[$dqlPartName][] = $dqlPart; } } else { $this->_dqlParts[$dqlPartName] = $isMultiple ? [$dqlPart] : $dqlPart; } $this->_state = self::STATE_DIRTY; return $this; } public function select($select = null) { $this->_type = self::SELECT; if (empty($select)) { return $this; } $selects = is_array($select) ? $select : func_get_args(); return $this->add('select', new Expr\Select($selects), \false); } public function distinct($flag = \true) { $this->_dqlParts['distinct'] = (bool) $flag; return $this; } public function addSelect($select = null) { $this->_type = self::SELECT; if (empty($select)) { return $this; } $selects = is_array($select) ? $select : func_get_args(); return $this->add('select', new Expr\Select($selects), \true); } public function delete($delete = null, $alias = null) { $this->_type = self::DELETE; if (!$delete) { return $this; } return $this->add('from', new Expr\From($delete, $alias)); } public function update($update = null, $alias = null) { $this->_type = self::UPDATE; if (!$update) { return $this; } return $this->add('from', new Expr\From($update, $alias)); } public function from($from, $alias, $indexBy = null) { return $this->add('from', new Expr\From($from, $alias, $indexBy), \true); } public function indexBy($alias, $indexBy) { $rootAliases = $this->getRootAliases(); if (!in_array($alias, $rootAliases, \true)) { throw new Query\QueryException(sprintf('Specified root alias %s must be set before invoking indexBy().', $alias)); } foreach ($this->_dqlParts['from'] as &$fromClause) { assert($fromClause instanceof Expr\From); if ($fromClause->getAlias() !== $alias) { continue; } $fromClause = new Expr\From($fromClause->getFrom(), $fromClause->getAlias(), $indexBy); } return $this; } public function join($join, $alias, $conditionType = null, $condition = null, $indexBy = null) { return $this->innerJoin($join, $alias, $conditionType, $condition, $indexBy); } public function innerJoin($join, $alias, $conditionType = null, $condition = null, $indexBy = null) { $parentAlias = substr($join, 0, (int) strpos($join, '.')); $rootAlias = $this->findRootAlias($alias, $parentAlias); $join = new Expr\Join(Expr\Join::INNER_JOIN, $join, $alias, $conditionType, $condition, $indexBy); return $this->add('join', [$rootAlias => $join], \true); } public function leftJoin($join, $alias, $conditionType = null, $condition = null, $indexBy = null) { $parentAlias = substr($join, 0, (int) strpos($join, '.')); $rootAlias = $this->findRootAlias($alias, $parentAlias); $join = new Expr\Join(Expr\Join::LEFT_JOIN, $join, $alias, $conditionType, $condition, $indexBy); return $this->add('join', [$rootAlias => $join], \true); } public function set($key, $value) { return $this->add('set', new Expr\Comparison($key, Expr\Comparison::EQ, $value), \true); } public function where($predicates) { if (!(func_num_args() === 1 && $predicates instanceof Expr\Composite)) { $predicates = new Expr\Andx(func_get_args()); } return $this->add('where', $predicates); } public function andWhere() { $args = func_get_args(); $where = $this->getDQLPart('where'); if ($where instanceof Expr\Andx) { $where->addMultiple($args); } else { array_unshift($args, $where); $where = new Expr\Andx($args); } return $this->add('where', $where); } public function orWhere() { $args = func_get_args(); $where = $this->getDQLPart('where'); if ($where instanceof Expr\Orx) { $where->addMultiple($args); } else { array_unshift($args, $where); $where = new Expr\Orx($args); } return $this->add('where', $where); } public function groupBy($groupBy) { return $this->add('groupBy', new Expr\GroupBy(func_get_args())); } public function addGroupBy($groupBy) { return $this->add('groupBy', new Expr\GroupBy(func_get_args()), \true); } public function having($having) { if (!(func_num_args() === 1 && ($having instanceof Expr\Andx || $having instanceof Expr\Orx))) { $having = new Expr\Andx(func_get_args()); } return $this->add('having', $having); } public function andHaving($having) { $args = func_get_args(); $having = $this->getDQLPart('having'); if ($having instanceof Expr\Andx) { $having->addMultiple($args); } else { array_unshift($args, $having); $having = new Expr\Andx($args); } return $this->add('having', $having); } public function orHaving($having) { $args = func_get_args(); $having = $this->getDQLPart('having'); if ($having instanceof Expr\Orx) { $having->addMultiple($args); } else { array_unshift($args, $having); $having = new Expr\Orx($args); } return $this->add('having', $having); } public function orderBy($sort, $order = null) { $orderBy = $sort instanceof Expr\OrderBy ? $sort : new Expr\OrderBy($sort, $order); return $this->add('orderBy', $orderBy); } public function addOrderBy($sort, $order = null) { $orderBy = $sort instanceof Expr\OrderBy ? $sort : new Expr\OrderBy($sort, $order); return $this->add('orderBy', $orderBy, \true); } public function addCriteria(Criteria $criteria) { $allAliases = $this->getAllAliases(); if (!isset($allAliases[0])) { throw new Query\QueryException('No aliases are set before invoking addCriteria().'); } $visitor = new QueryExpressionVisitor($this->getAllAliases()); $whereExpression = $criteria->getWhereExpression(); if ($whereExpression) { $this->andWhere($visitor->dispatch($whereExpression)); foreach ($visitor->getParameters() as $parameter) { $this->parameters->add($parameter); } } if ($criteria->getOrderings()) { foreach ($criteria->getOrderings() as $sort => $order) { $hasValidAlias = \false; foreach ($allAliases as $alias) { if (strpos($sort . '.', $alias . '.') === 0) { $hasValidAlias = \true; break; } } if (!$hasValidAlias) { $sort = $allAliases[0] . '.' . $sort; } $this->addOrderBy($sort, $order); } } $firstResult = $criteria->getFirstResult(); if ($firstResult !== null) { $this->setFirstResult($firstResult); } $maxResults = $criteria->getMaxResults(); if ($maxResults !== null) { $this->setMaxResults($maxResults); } return $this; } public function getDQLPart($queryPartName) { return $this->_dqlParts[$queryPartName]; } public function getDQLParts() { return $this->_dqlParts; } private function getDQLForDelete() : string { return 'DELETE' . $this->getReducedDQLQueryPart('from', ['pre' => ' ', 'separator' => ', ']) . $this->getReducedDQLQueryPart('where', ['pre' => ' WHERE ']) . $this->getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); } private function getDQLForUpdate() : string { return 'UPDATE' . $this->getReducedDQLQueryPart('from', ['pre' => ' ', 'separator' => ', ']) . $this->getReducedDQLQueryPart('set', ['pre' => ' SET ', 'separator' => ', ']) . $this->getReducedDQLQueryPart('where', ['pre' => ' WHERE ']) . $this->getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); } private function getDQLForSelect() : string { $dql = 'SELECT' . ($this->_dqlParts['distinct'] === \true ? ' DISTINCT' : '') . $this->getReducedDQLQueryPart('select', ['pre' => ' ', 'separator' => ', ']); $fromParts = $this->getDQLPart('from'); $joinParts = $this->getDQLPart('join'); $fromClauses = []; if (!empty($fromParts)) { $dql .= ' FROM '; foreach ($fromParts as $from) { $fromClause = (string) $from; if ($from instanceof Expr\From && isset($joinParts[$from->getAlias()])) { foreach ($joinParts[$from->getAlias()] as $join) { $fromClause .= ' ' . (string) $join; } } $fromClauses[] = $fromClause; } } $dql .= implode(', ', $fromClauses) . $this->getReducedDQLQueryPart('where', ['pre' => ' WHERE ']) . $this->getReducedDQLQueryPart('groupBy', ['pre' => ' GROUP BY ', 'separator' => ', ']) . $this->getReducedDQLQueryPart('having', ['pre' => ' HAVING ']) . $this->getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); return $dql; } private function getReducedDQLQueryPart(string $queryPartName, array $options = []) : string { $queryPart = $this->getDQLPart($queryPartName); if (empty($queryPart)) { return $options['empty'] ?? ''; } return ($options['pre'] ?? '') . (is_array($queryPart) ? implode($options['separator'], $queryPart) : $queryPart) . ($options['post'] ?? ''); } public function resetDQLParts($parts = null) { if ($parts === null) { $parts = array_keys($this->_dqlParts); } foreach ($parts as $part) { $this->resetDQLPart($part); } return $this; } public function resetDQLPart($part) { $this->_dqlParts[$part] = is_array($this->_dqlParts[$part]) ? [] : null; $this->_state = self::STATE_DIRTY; return $this; } public function __toString() { return $this->getDQL(); } public function __clone() { foreach ($this->_dqlParts as $part => $elements) { if (is_array($this->_dqlParts[$part])) { foreach ($this->_dqlParts[$part] as $idx => $element) { if (is_object($element)) { $this->_dqlParts[$part][$idx] = clone $element; } } } elseif (is_object($elements)) { $this->_dqlParts[$part] = clone $elements; } } $parameters = []; foreach ($this->parameters as $parameter) { $parameters[] = clone $parameter; } $this->parameters = new ArrayCollection($parameters); } }
1
  <?php
2
+ declare (strict_types=1); namespace MailPoetVendor\Doctrine\ORM; if (!defined('ABSPATH')) exit; use MailPoetVendor\Doctrine\Common\Collections\ArrayCollection; use MailPoetVendor\Doctrine\Common\Collections\Criteria; use MailPoetVendor\Doctrine\ORM\Query\Expr; use MailPoetVendor\Doctrine\ORM\Query\Parameter; use MailPoetVendor\Doctrine\ORM\Query\QueryExpressionVisitor; use InvalidArgumentException; use RuntimeException; use function array_keys; use function array_merge; use function array_unshift; use function assert; use function func_get_args; use function func_num_args; use function implode; use function in_array; use function is_array; use function is_numeric; use function is_object; use function is_string; use function key; use function reset; use function sprintf; use function strpos; use function strrpos; use function substr; class QueryBuilder { public const SELECT = 0; public const DELETE = 1; public const UPDATE = 2; public const STATE_DIRTY = 0; public const STATE_CLEAN = 1; private $_em; private $_dqlParts = ['distinct' => \false, 'select' => [], 'from' => [], 'join' => [], 'set' => [], 'where' => null, 'groupBy' => [], 'having' => null, 'orderBy' => []]; private $_type = self::SELECT; private $_state = self::STATE_CLEAN; private $_dql; private $parameters; private $_firstResult = null; private $_maxResults = null; private $joinRootAliases = []; protected $cacheable = \false; protected $cacheRegion; protected $cacheMode; protected $lifetime = 0; public function __construct(EntityManagerInterface $em) { $this->_em = $em; $this->parameters = new ArrayCollection(); } public function expr() { return $this->_em->getExpressionBuilder(); } public function setCacheable($cacheable) { $this->cacheable = (bool) $cacheable; return $this; } public function isCacheable() { return $this->cacheable; } public function setCacheRegion($cacheRegion) { $this->cacheRegion = (string) $cacheRegion; return $this; } public function getCacheRegion() { return $this->cacheRegion; } public function getLifetime() { return $this->lifetime; } public function setLifetime($lifetime) { $this->lifetime = (int) $lifetime; return $this; } public function getCacheMode() { return $this->cacheMode; } public function setCacheMode($cacheMode) { $this->cacheMode = (int) $cacheMode; return $this; } public function getType() { return $this->_type; } public function getEntityManager() { return $this->_em; } public function getState() { return $this->_state; } public function getDQL() { if ($this->_dql !== null && $this->_state === self::STATE_CLEAN) { return $this->_dql; } switch ($this->_type) { case self::DELETE: $dql = $this->getDQLForDelete(); break; case self::UPDATE: $dql = $this->getDQLForUpdate(); break; case self::SELECT: default: $dql = $this->getDQLForSelect(); break; } $this->_state = self::STATE_CLEAN; $this->_dql = $dql; return $dql; } public function getQuery() { $parameters = clone $this->parameters; $query = $this->_em->createQuery($this->getDQL())->setParameters($parameters)->setFirstResult($this->_firstResult)->setMaxResults($this->_maxResults); if ($this->lifetime) { $query->setLifetime($this->lifetime); } if ($this->cacheMode) { $query->setCacheMode($this->cacheMode); } if ($this->cacheable) { $query->setCacheable($this->cacheable); } if ($this->cacheRegion) { $query->setCacheRegion($this->cacheRegion); } return $query; } private function findRootAlias(string $alias, string $parentAlias) : string { if (in_array($parentAlias, $this->getRootAliases(), \true)) { $rootAlias = $parentAlias; } elseif (isset($this->joinRootAliases[$parentAlias])) { $rootAlias = $this->joinRootAliases[$parentAlias]; } else { $rootAlias = $this->getRootAlias(); } $this->joinRootAliases[$alias] = $rootAlias; return $rootAlias; } public function getRootAlias() { $aliases = $this->getRootAliases(); if (!isset($aliases[0])) { throw new RuntimeException('No alias was set before invoking getRootAlias().'); } return $aliases[0]; } public function getRootAliases() { $aliases = []; foreach ($this->_dqlParts['from'] as &$fromClause) { if (is_string($fromClause)) { $spacePos = strrpos($fromClause, ' '); $from = substr($fromClause, 0, $spacePos); $alias = substr($fromClause, $spacePos + 1); $fromClause = new Query\Expr\From($from, $alias); } $aliases[] = $fromClause->getAlias(); } return $aliases; } public function getAllAliases() { return array_merge($this->getRootAliases(), array_keys($this->joinRootAliases)); } public function getRootEntities() { $entities = []; foreach ($this->_dqlParts['from'] as &$fromClause) { if (is_string($fromClause)) { $spacePos = strrpos($fromClause, ' '); $from = substr($fromClause, 0, $spacePos); $alias = substr($fromClause, $spacePos + 1); $fromClause = new Query\Expr\From($from, $alias); } $entities[] = $fromClause->getFrom(); } return $entities; } public function setParameter($key, $value, $type = null) { $existingParameter = $this->getParameter($key); if ($existingParameter !== null) { $existingParameter->setValue($value, $type); return $this; } $this->parameters->add(new Parameter($key, $value, $type)); return $this; } public function setParameters($parameters) { if (is_array($parameters)) { $parameterCollection = new ArrayCollection(); foreach ($parameters as $key => $value) { $parameter = new Parameter($key, $value); $parameterCollection->add($parameter); } $parameters = $parameterCollection; } $this->parameters = $parameters; return $this; } public function getParameters() { return $this->parameters; } public function getParameter($key) { $key = Parameter::normalizeName($key); $filteredParameters = $this->parameters->filter(static function (Parameter $parameter) use($key) : bool { $parameterName = $parameter->getName(); return $key === $parameterName; }); return !$filteredParameters->isEmpty() ? $filteredParameters->first() : null; } public function setFirstResult($firstResult) { if ($firstResult !== null) { $firstResult = (int) $firstResult; } $this->_firstResult = $firstResult; return $this; } public function getFirstResult() { return $this->_firstResult; } public function setMaxResults($maxResults) { if ($maxResults !== null) { $maxResults = (int) $maxResults; } $this->_maxResults = $maxResults; return $this; } public function getMaxResults() { return $this->_maxResults; } public function add($dqlPartName, $dqlPart, $append = \false) { if ($append && ($dqlPartName === 'where' || $dqlPartName === 'having')) { throw new InvalidArgumentException("Using \$append = true does not have an effect with 'where' or 'having' " . 'parts. See QueryBuilder#andWhere() for an example for correct usage.'); } $isMultiple = is_array($this->_dqlParts[$dqlPartName]) && !($dqlPartName === 'join' && !$append); if (is_array($dqlPart) && $dqlPartName !== 'join') { $dqlPart = reset($dqlPart); } if ($dqlPartName === 'join') { $newDqlPart = []; foreach ($dqlPart as $k => $v) { $k = is_numeric($k) ? $this->getRootAlias() : $k; $newDqlPart[$k] = $v; } $dqlPart = $newDqlPart; } if ($append && $isMultiple) { if (is_array($dqlPart)) { $key = key($dqlPart); $this->_dqlParts[$dqlPartName][$key][] = $dqlPart[$key]; } else { $this->_dqlParts[$dqlPartName][] = $dqlPart; } } else { $this->_dqlParts[$dqlPartName] = $isMultiple ? [$dqlPart] : $dqlPart; } $this->_state = self::STATE_DIRTY; return $this; } public function select($select = null) { $this->_type = self::SELECT; if (empty($select)) { return $this; } $selects = is_array($select) ? $select : func_get_args(); return $this->add('select', new Expr\Select($selects), \false); } public function distinct($flag = \true) { $this->_dqlParts['distinct'] = (bool) $flag; return $this; } public function addSelect($select = null) { $this->_type = self::SELECT; if (empty($select)) { return $this; } $selects = is_array($select) ? $select : func_get_args(); return $this->add('select', new Expr\Select($selects), \true); } public function delete($delete = null, $alias = null) { $this->_type = self::DELETE; if (!$delete) { return $this; } return $this->add('from', new Expr\From($delete, $alias)); } public function update($update = null, $alias = null) { $this->_type = self::UPDATE; if (!$update) { return $this; } return $this->add('from', new Expr\From($update, $alias)); } public function from($from, $alias, $indexBy = null) { return $this->add('from', new Expr\From($from, $alias, $indexBy), \true); } public function indexBy($alias, $indexBy) { $rootAliases = $this->getRootAliases(); if (!in_array($alias, $rootAliases, \true)) { throw new Query\QueryException(sprintf('Specified root alias %s must be set before invoking indexBy().', $alias)); } foreach ($this->_dqlParts['from'] as &$fromClause) { assert($fromClause instanceof Expr\From); if ($fromClause->getAlias() !== $alias) { continue; } $fromClause = new Expr\From($fromClause->getFrom(), $fromClause->getAlias(), $indexBy); } return $this; } public function join($join, $alias, $conditionType = null, $condition = null, $indexBy = null) { return $this->innerJoin($join, $alias, $conditionType, $condition, $indexBy); } public function innerJoin($join, $alias, $conditionType = null, $condition = null, $indexBy = null) { $parentAlias = substr($join, 0, (int) strpos($join, '.')); $rootAlias = $this->findRootAlias($alias, $parentAlias); $join = new Expr\Join(Expr\Join::INNER_JOIN, $join, $alias, $conditionType, $condition, $indexBy); return $this->add('join', [$rootAlias => $join], \true); } public function leftJoin($join, $alias, $conditionType = null, $condition = null, $indexBy = null) { $parentAlias = substr($join, 0, (int) strpos($join, '.')); $rootAlias = $this->findRootAlias($alias, $parentAlias); $join = new Expr\Join(Expr\Join::LEFT_JOIN, $join, $alias, $conditionType, $condition, $indexBy); return $this->add('join', [$rootAlias => $join], \true); } public function set($key, $value) { return $this->add('set', new Expr\Comparison($key, Expr\Comparison::EQ, $value), \true); } public function where($predicates) { if (!(func_num_args() === 1 && $predicates instanceof Expr\Composite)) { $predicates = new Expr\Andx(func_get_args()); } return $this->add('where', $predicates); } public function andWhere() { $args = func_get_args(); $where = $this->getDQLPart('where'); if ($where instanceof Expr\Andx) { $where->addMultiple($args); } else { array_unshift($args, $where); $where = new Expr\Andx($args); } return $this->add('where', $where); } public function orWhere() { $args = func_get_args(); $where = $this->getDQLPart('where'); if ($where instanceof Expr\Orx) { $where->addMultiple($args); } else { array_unshift($args, $where); $where = new Expr\Orx($args); } return $this->add('where', $where); } public function groupBy($groupBy) { return $this->add('groupBy', new Expr\GroupBy(func_get_args())); } public function addGroupBy($groupBy) { return $this->add('groupBy', new Expr\GroupBy(func_get_args()), \true); } public function having($having) { if (!(func_num_args() === 1 && ($having instanceof Expr\Andx || $having instanceof Expr\Orx))) { $having = new Expr\Andx(func_get_args()); } return $this->add('having', $having); } public function andHaving($having) { $args = func_get_args(); $having = $this->getDQLPart('having'); if ($having instanceof Expr\Andx) { $having->addMultiple($args); } else { array_unshift($args, $having); $having = new Expr\Andx($args); } return $this->add('having', $having); } public function orHaving($having) { $args = func_get_args(); $having = $this->getDQLPart('having'); if ($having instanceof Expr\Orx) { $having->addMultiple($args); } else { array_unshift($args, $having); $having = new Expr\Orx($args); } return $this->add('having', $having); } public function orderBy($sort, $order = null) { $orderBy = $sort instanceof Expr\OrderBy ? $sort : new Expr\OrderBy($sort, $order); return $this->add('orderBy', $orderBy); } public function addOrderBy($sort, $order = null) { $orderBy = $sort instanceof Expr\OrderBy ? $sort : new Expr\OrderBy($sort, $order); return $this->add('orderBy', $orderBy, \true); } public function addCriteria(Criteria $criteria) { $allAliases = $this->getAllAliases(); if (!isset($allAliases[0])) { throw new Query\QueryException('No aliases are set before invoking addCriteria().'); } $visitor = new QueryExpressionVisitor($this->getAllAliases()); $whereExpression = $criteria->getWhereExpression(); if ($whereExpression) { $this->andWhere($visitor->dispatch($whereExpression)); foreach ($visitor->getParameters() as $parameter) { $this->parameters->add($parameter); } } if ($criteria->getOrderings()) { foreach ($criteria->getOrderings() as $sort => $order) { $hasValidAlias = \false; foreach ($allAliases as $alias) { if (strpos($sort . '.', $alias . '.') === 0) { $hasValidAlias = \true; break; } } if (!$hasValidAlias) { $sort = $allAliases[0] . '.' . $sort; } $this->addOrderBy($sort, $order); } } $firstResult = $criteria->getFirstResult(); if ($firstResult !== null) { $this->setFirstResult($firstResult); } $maxResults = $criteria->getMaxResults(); if ($maxResults !== null) { $this->setMaxResults($maxResults); } return $this; } public function getDQLPart($queryPartName) { return $this->_dqlParts[$queryPartName]; } public function getDQLParts() { return $this->_dqlParts; } private function getDQLForDelete() : string { return 'DELETE' . $this->getReducedDQLQueryPart('from', ['pre' => ' ', 'separator' => ', ']) . $this->getReducedDQLQueryPart('where', ['pre' => ' WHERE ']) . $this->getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); } private function getDQLForUpdate() : string { return 'UPDATE' . $this->getReducedDQLQueryPart('from', ['pre' => ' ', 'separator' => ', ']) . $this->getReducedDQLQueryPart('set', ['pre' => ' SET ', 'separator' => ', ']) . $this->getReducedDQLQueryPart('where', ['pre' => ' WHERE ']) . $this->getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); } private function getDQLForSelect() : string { $dql = 'SELECT' . ($this->_dqlParts['distinct'] === \true ? ' DISTINCT' : '') . $this->getReducedDQLQueryPart('select', ['pre' => ' ', 'separator' => ', ']); $fromParts = $this->getDQLPart('from'); $joinParts = $this->getDQLPart('join'); $fromClauses = []; if (!empty($fromParts)) { $dql .= ' FROM '; foreach ($fromParts as $from) { $fromClause = (string) $from; if ($from instanceof Expr\From && isset($joinParts[$from->getAlias()])) { foreach ($joinParts[$from->getAlias()] as $join) { $fromClause .= ' ' . (string) $join; } } $fromClauses[] = $fromClause; } } $dql .= implode(', ', $fromClauses) . $this->getReducedDQLQueryPart('where', ['pre' => ' WHERE ']) . $this->getReducedDQLQueryPart('groupBy', ['pre' => ' GROUP BY ', 'separator' => ', ']) . $this->getReducedDQLQueryPart('having', ['pre' => ' HAVING ']) . $this->getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); return $dql; } private function getReducedDQLQueryPart(string $queryPartName, array $options = []) : string { $queryPart = $this->getDQLPart($queryPartName); if (empty($queryPart)) { return $options['empty'] ?? ''; } return ($options['pre'] ?? '') . (is_array($queryPart) ? implode($options['separator'], $queryPart) : $queryPart) . ($options['post'] ?? ''); } public function resetDQLParts($parts = null) { if ($parts === null) { $parts = array_keys($this->_dqlParts); } foreach ($parts as $part) { $this->resetDQLPart($part); } return $this; } public function resetDQLPart($part) { $this->_dqlParts[$part] = is_array($this->_dqlParts[$part]) ? [] : null; $this->_state = self::STATE_DIRTY; return $this; } public function __toString() { return $this->getDQL(); } public function __clone() { foreach ($this->_dqlParts as $part => $elements) { if (is_array($this->_dqlParts[$part])) { foreach ($this->_dqlParts[$part] as $idx => $element) { if (is_object($element)) { $this->_dqlParts[$part][$idx] = clone $element; } } } elseif (is_object($elements)) { $this->_dqlParts[$part] = clone $elements; } } $parameters = []; foreach ($this->parameters as $parameter) { $parameters[] = clone $parameter; } $this->parameters = new ArrayCollection($parameters); } }
vendor-prefixed/symfony/service-contracts/ServiceSubscriberTrait.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- namespace MailPoetVendor\Symfony\Contracts\Service; if (!defined('ABSPATH')) exit; use MailPoetVendor\Psr\Container\ContainerInterface; trait ServiceSubscriberTrait { protected $container; public static function getSubscribedServices() : array { static $services; if (null !== $services) { return $services; } $services = \is_callable(['parent', __FUNCTION__]) ? parent::getSubscribedServices() : []; foreach ((new \ReflectionClass(self::class))->getMethods() as $method) { if ($method->isStatic() || $method->isAbstract() || $method->isGenerator() || $method->isInternal() || $method->getNumberOfRequiredParameters()) { continue; } if (self::class === $method->getDeclaringClass()->name && ($returnType = $method->getReturnType()) && !$returnType->isBuiltin()) { $services[self::class . '::' . $method->name] = '?' . ($returnType instanceof \ReflectionNamedType ? $returnType->getName() : $type); } } return $services; } public function setContainer(ContainerInterface $container) { $this->container = $container; if (\is_callable(['parent', __FUNCTION__])) { return parent::setContainer($container); } return null; } }
1
  <?php
2
+ namespace MailPoetVendor\Symfony\Contracts\Service; if (!defined('ABSPATH')) exit; use MailPoetVendor\Psr\Container\ContainerInterface; trait ServiceSubscriberTrait { protected $container; public static function getSubscribedServices() : array { static $services; if (null !== $services) { return $services; } $services = \is_callable(['parent', __FUNCTION__]) ? parent::getSubscribedServices() : []; foreach ((new \ReflectionClass(self::class))->getMethods() as $method) { if ($method->isStatic() || $method->isAbstract() || $method->isGenerator() || $method->isInternal() || $method->getNumberOfRequiredParameters()) { continue; } if (self::class !== $method->getDeclaringClass()->name) { continue; } if (!($returnType = $method->getReturnType()) instanceof \ReflectionNamedType) { continue; } if ($returnType->isBuiltin()) { continue; } $services[self::class . '::' . $method->name] = '?' . $returnType->getName(); } return $services; } public function setContainer(ContainerInterface $container) { $this->container = $container; if (\is_callable(['parent', __FUNCTION__])) { return parent::setContainer($container); } return null; } }
vendor-prefixed/symfony/service-contracts/Test/ServiceLocatorTest.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- namespace MailPoetVendor\Symfony\Contracts\Service\Test; if (!defined('ABSPATH')) exit; use MailPoetVendor\PHPUnit\Framework\TestCase; use MailPoetVendor\Psr\Container\ContainerInterface; use MailPoetVendor\Symfony\Contracts\Service\ServiceLocatorTrait; abstract class ServiceLocatorTest extends TestCase { protected function getServiceLocator(array $factories) { return new class($factories) implements ContainerInterface { use ServiceLocatorTrait; }; } public function testHas() { $locator = $this->getServiceLocator(['foo' => function () { return 'bar'; }, 'bar' => function () { return 'baz'; }, function () { return 'dummy'; }]); $this->assertTrue($locator->has('foo')); $this->assertTrue($locator->has('bar')); $this->assertFalse($locator->has('dummy')); } public function testGet() { $locator = $this->getServiceLocator(['foo' => function () { return 'bar'; }, 'bar' => function () { return 'baz'; }]); $this->assertSame('bar', $locator->get('foo')); $this->assertSame('baz', $locator->get('bar')); } public function testGetDoesNotMemoize() { $i = 0; $locator = $this->getServiceLocator(['foo' => function () use(&$i) { ++$i; return 'bar'; }]); $this->assertSame('bar', $locator->get('foo')); $this->assertSame('bar', $locator->get('foo')); $this->assertSame(2, $i); } public function testThrowsOnUndefinedInternalService() { if (!$this->getExpectedException()) { $this->expectException('MailPoetVendor\\Psr\\Container\\NotFoundExceptionInterface'); $this->expectExceptionMessage('The service "foo" has a dependency on a non-existent service "bar". This locator only knows about the "foo" service.'); } $locator = $this->getServiceLocator(['foo' => function () use(&$locator) { return $locator->get('bar'); }]); $locator->get('foo'); } public function testThrowsOnCircularReference() { $this->expectException('MailPoetVendor\\Psr\\Container\\ContainerExceptionInterface'); $this->expectExceptionMessage('Circular reference detected for service "bar", path: "bar -> baz -> bar".'); $locator = $this->getServiceLocator(['foo' => function () use(&$locator) { return $locator->get('bar'); }, 'bar' => function () use(&$locator) { return $locator->get('baz'); }, 'baz' => function () use(&$locator) { return $locator->get('bar'); }]); $locator->get('foo'); } }
1
  <?php
2
+ namespace MailPoetVendor\Symfony\Contracts\Service\Test; if (!defined('ABSPATH')) exit; use MailPoetVendor\PHPUnit\Framework\TestCase; use MailPoetVendor\Psr\Container\ContainerInterface; use MailPoetVendor\Symfony\Contracts\Service\ServiceLocatorTrait; abstract class ServiceLocatorTest extends TestCase { protected function getServiceLocator(array $factories) { return new class($factories) implements ContainerInterface { use ServiceLocatorTrait; }; } public function testHas() { $locator = $this->getServiceLocator(['foo' => function () { return 'bar'; }, 'bar' => function () { return 'baz'; }, function () { return 'dummy'; }]); $this->assertTrue($locator->has('foo')); $this->assertTrue($locator->has('bar')); $this->assertFalse($locator->has('dummy')); } public function testGet() { $locator = $this->getServiceLocator(['foo' => function () { return 'bar'; }, 'bar' => function () { return 'baz'; }]); $this->assertSame('bar', $locator->get('foo')); $this->assertSame('baz', $locator->get('bar')); } public function testGetDoesNotMemoize() { $i = 0; $locator = $this->getServiceLocator(['foo' => function () use(&$i) { ++$i; return 'bar'; }]); $this->assertSame('bar', $locator->get('foo')); $this->assertSame('bar', $locator->get('foo')); $this->assertSame(2, $i); } public function testThrowsOnUndefinedInternalService() { if (!$this->getExpectedException()) { $this->expectException(\MailPoetVendor\Psr\Container\NotFoundExceptionInterface::class); $this->expectExceptionMessage('The service "foo" has a dependency on a non-existent service "bar". This locator only knows about the "foo" service.'); } $locator = $this->getServiceLocator(['foo' => function () use(&$locator) { return $locator->get('bar'); }]); $locator->get('foo'); } public function testThrowsOnCircularReference() { $this->expectException(\MailPoetVendor\Psr\Container\ContainerExceptionInterface::class); $this->expectExceptionMessage('Circular reference detected for service "bar", path: "bar -> baz -> bar".'); $locator = $this->getServiceLocator(['foo' => function () use(&$locator) { return $locator->get('bar'); }, 'bar' => function () use(&$locator) { return $locator->get('baz'); }, 'baz' => function () use(&$locator) { return $locator->get('bar'); }]); $locator->get('foo'); } }
vendor-prefixed/symfony/translation-contracts/Test/TranslatorTest.php CHANGED
@@ -1,5 +1,5 @@
1
  <?php
2
- namespace MailPoetVendor\Symfony\Contracts\Translation\Test; if (!defined('ABSPATH')) exit; use MailPoetVendor\PHPUnit\Framework\TestCase; use MailPoetVendor\Symfony\Contracts\Translation\TranslatorInterface; use MailPoetVendor\Symfony\Contracts\Translation\TranslatorTrait; class TranslatorTest extends TestCase { public function getTranslator() { return new class implements TranslatorInterface { use TranslatorTrait; }; } public function testTrans($expected, $id, $parameters) { $translator = $this->getTranslator(); $this->assertEquals($expected, $translator->trans($id, $parameters)); } public function testTransChoiceWithExplicitLocale($expected, $id, $number) { $translator = $this->getTranslator(); $translator->setLocale('en'); $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number])); } public function testTransChoiceWithDefaultLocale($expected, $id, $number) { \Locale::setDefault('en'); $translator = $this->getTranslator(); $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number])); } public function testGetSetLocale() { $translator = $this->getTranslator(); $translator->setLocale('en'); $this->assertEquals('en', $translator->getLocale()); } public function testGetLocaleReturnsDefaultLocaleIfNotSet() { $translator = $this->getTranslator(); \Locale::setDefault('pt_BR'); $this->assertEquals('pt_BR', $translator->getLocale()); \Locale::setDefault('en'); $this->assertEquals('en', $translator->getLocale()); } public function getTransTests() { return [['Symfony is great!', 'Symfony is great!', []], ['Symfony is awesome!', 'Symfony is %what%!', ['%what%' => 'awesome']]]; } public function getTransChoiceTests() { return [ ['There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0], ['There is one apple', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 1], ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10], ['There are 0 apples', 'There is 1 apple|There are %count% apples', 0], ['There is 1 apple', 'There is 1 apple|There are %count% apples', 1], ['There are 10 apples', 'There is 1 apple|There are %count% apples', 10], ['There are 2 apples', 'There are 2 apples', 2], ]; } public function testInterval($expected, $number, $interval) { $translator = $this->getTranslator(); $this->assertEquals($expected, $translator->trans($interval . ' foo|[1,Inf[ bar', ['%count%' => $number])); } public function getInternal() { return [['foo', 3, '{1,2, 3 ,4}'], ['bar', 10, '{1,2, 3 ,4}'], ['bar', 3, '[1,2]'], ['foo', 1, '[1,2]'], ['foo', 2, '[1,2]'], ['bar', 1, ']1,2['], ['bar', 2, ']1,2['], ['foo', \log(0), '[-Inf,2['], ['foo', -\log(0), '[-2,+Inf]']]; } public function testChoose($expected, $id, $number) { $translator = $this->getTranslator(); $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number])); } public function testReturnMessageIfExactlyOneStandardRuleIsGiven() { $translator = $this->getTranslator(); $this->assertEquals('There are two apples', $translator->trans('There are two apples', ['%count%' => 2])); } public function testThrowExceptionIfMatchingMessageCannotBeFound($id, $number) { $this->expectException('InvalidArgumentException'); $translator = $this->getTranslator(); $translator->trans($id, ['%count%' => $number]); } public function getNonMatchingMessages() { return [['{0} There are no apples|{1} There is one apple', 2], ['{1} There is one apple|]1,Inf] There are %count% apples', 0], ['{1} There is one apple|]2,Inf] There are %count% apples', 2], ['{0} There are no apples|There is one apple', 2]]; } public function getChooseTests() { return [ ['There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0], ['There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0], ['There are no apples', '{0}There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0], ['There is one apple', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 1], ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10], ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf]There are %count% apples', 10], ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10], ['There are 0 apples', 'There is one apple|There are %count% apples', 0], ['There is one apple', 'There is one apple|There are %count% apples', 1], ['There are 10 apples', 'There is one apple|There are %count% apples', 10], ['There are 0 apples', 'one: There is one apple|more: There are %count% apples', 0], ['There is one apple', 'one: There is one apple|more: There are %count% apples', 1], ['There are 10 apples', 'one: There is one apple|more: There are %count% apples', 10], ['There are no apples', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 0], ['There is one apple', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 1], ['There are 10 apples', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 10], ['', '{0}|{1} There is one apple|]1,Inf] There are %count% apples', 0], ['', '{0} There are no apples|{1}|]1,Inf] There are %count% apples', 1], ['There are 0 apples', 'There is one apple|There are %count% apples', 0], ['There is one apple', 'There is one apple|There are %count% apples', 1], ['There are 2 apples', 'There is one apple|There are %count% apples', 2], ['There is almost one apple', '{0} There are no apples|]0,1[ There is almost one apple|{1} There is one apple|[1,Inf] There is more than one apple', 0.7], ['There is one apple', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 1], ['There is more than one apple', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 1.7], ['There are no apples', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0], ['There are no apples', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0.0], ['There are no apples', '{0.0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0], ["This is a text with a\n new-line in it. Selector = 0.", '{0}This is a text with a
3
  new-line in it. Selector = 0.|{1}This is a text with a
4
  new-line in it. Selector = 1.|[1,Inf]This is a text with a
5
  new-line in it. Selector > 1.', 0], ["This is a text with a\n new-line in it. Selector = 1.", '{0}This is a text with a
@@ -16,4 +16,4 @@
16
  new-line in it. Selector > 1.', '{0}This is a text with a
17
  new-line in it. Selector = 0.|{1}This is a text with a
18
  new-line in it. Selector = 1.|[1,Inf]This is a text with a
19
- new-line in it. Selector > 1.', 5], ['This is a text with a\\nnew-line in it. Selector = 0.', '{0}This is a text with a\\nnew-line in it. Selector = 0.|{1}This is a text with a\\nnew-line in it. Selector = 1.|[1,Inf]This is a text with a\\nnew-line in it. Selector > 1.', 0], ["This is a text with a\nnew-line in it. Selector = 1.", "{0}This is a text with a\nnew-line in it. Selector = 0.|{1}This is a text with a\nnew-line in it. Selector = 1.|[1,Inf]This is a text with a\nnew-line in it. Selector > 1.", 1], ['This is a text with | in it. Selector = 0.', '{0}This is a text with || in it. Selector = 0.|{1}This is a text with || in it. Selector = 1.', 0], ['', '|', 1], ['', '||', 1], ]; } public function testFailedLangcodes($nplural, $langCodes) { $matrix = $this->generateTestData($langCodes); $this->validateMatrix($nplural, $matrix, \false); } public function testLangcodes($nplural, $langCodes) { $matrix = $this->generateTestData($langCodes); $this->validateMatrix($nplural, $matrix); } public function successLangcodes() { return [['1', ['ay', 'bo', 'cgg', 'dz', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky']], ['2', ['nl', 'fr', 'en', 'de', 'de_GE', 'hy', 'hy_AM']], ['3', ['be', 'bs', 'cs', 'hr']], ['4', ['cy', 'mt', 'sl']], ['6', ['ar']]]; } public function failingLangcodes() { return [['1', ['fa']], ['2', ['jbo']], ['3', ['cbs']], ['4', ['gd', 'kw']], ['5', ['ga']]]; } protected function validateMatrix($nplural, $matrix, $expectSuccess = \true) { foreach ($matrix as $langCode => $data) { $indexes = \array_flip($data); if ($expectSuccess) { $this->assertEquals($nplural, \count($indexes), "Langcode '{$langCode}' has '{$nplural}' plural forms."); } else { $this->assertNotEquals((int) $nplural, \count($indexes), "Langcode '{$langCode}' has '{$nplural}' plural forms."); } } } protected function generateTestData($langCodes) { $translator = new class { use TranslatorTrait { getPluralizationRule as public; } }; $matrix = []; foreach ($langCodes as $langCode) { for ($count = 0; $count < 200; ++$count) { $plural = $translator->getPluralizationRule($count, $langCode); $matrix[$langCode][$count] = $plural; } } return $matrix; } }
1
  <?php
2
+ namespace MailPoetVendor\Symfony\Contracts\Translation\Test; if (!defined('ABSPATH')) exit; use MailPoetVendor\PHPUnit\Framework\TestCase; use MailPoetVendor\Symfony\Contracts\Translation\TranslatorInterface; use MailPoetVendor\Symfony\Contracts\Translation\TranslatorTrait; class TranslatorTest extends TestCase { private $defaultLocale; protected function setUp() : void { $this->defaultLocale = \Locale::getDefault(); \Locale::setDefault('en'); } protected function tearDown() : void { \Locale::setDefault($this->defaultLocale); } public function getTranslator() { return new class implements TranslatorInterface { use TranslatorTrait; }; } public function testTrans($expected, $id, $parameters) { $translator = $this->getTranslator(); $this->assertEquals($expected, $translator->trans($id, $parameters)); } public function testTransChoiceWithExplicitLocale($expected, $id, $number) { $translator = $this->getTranslator(); $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number])); } public function testTransChoiceWithDefaultLocale($expected, $id, $number) { $translator = $this->getTranslator(); $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number])); } public function testTransChoiceWithEnUsPosix($expected, $id, $number) { $translator = $this->getTranslator(); $translator->setLocale('en_US_POSIX'); $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number])); } public function testGetSetLocale() { $translator = $this->getTranslator(); $this->assertEquals('en', $translator->getLocale()); } public function testGetLocaleReturnsDefaultLocaleIfNotSet() { $translator = $this->getTranslator(); \Locale::setDefault('pt_BR'); $this->assertEquals('pt_BR', $translator->getLocale()); \Locale::setDefault('en'); $this->assertEquals('en', $translator->getLocale()); } public function getTransTests() { return [['Symfony is great!', 'Symfony is great!', []], ['Symfony is awesome!', 'Symfony is %what%!', ['%what%' => 'awesome']]]; } public function getTransChoiceTests() { return [ ['There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0], ['There is one apple', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 1], ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10], ['There are 0 apples', 'There is 1 apple|There are %count% apples', 0], ['There is 1 apple', 'There is 1 apple|There are %count% apples', 1], ['There are 10 apples', 'There is 1 apple|There are %count% apples', 10], ['There are 2 apples', 'There are 2 apples', 2], ]; } public function testInterval($expected, $number, $interval) { $translator = $this->getTranslator(); $this->assertEquals($expected, $translator->trans($interval . ' foo|[1,Inf[ bar', ['%count%' => $number])); } public function getInternal() { return [['foo', 3, '{1,2, 3 ,4}'], ['bar', 10, '{1,2, 3 ,4}'], ['bar', 3, '[1,2]'], ['foo', 1, '[1,2]'], ['foo', 2, '[1,2]'], ['bar', 1, ']1,2['], ['bar', 2, ']1,2['], ['foo', \log(0), '[-Inf,2['], ['foo', -\log(0), '[-2,+Inf]']]; } public function testChoose($expected, $id, $number) { $translator = $this->getTranslator(); $this->assertEquals($expected, $translator->trans($id, ['%count%' => $number])); } public function testReturnMessageIfExactlyOneStandardRuleIsGiven() { $translator = $this->getTranslator(); $this->assertEquals('There are two apples', $translator->trans('There are two apples', ['%count%' => 2])); } public function testThrowExceptionIfMatchingMessageCannotBeFound($id, $number) { $this->expectException(\InvalidArgumentException::class); $translator = $this->getTranslator(); $translator->trans($id, ['%count%' => $number]); } public function getNonMatchingMessages() { return [['{0} There are no apples|{1} There is one apple', 2], ['{1} There is one apple|]1,Inf] There are %count% apples', 0], ['{1} There is one apple|]2,Inf] There are %count% apples', 2], ['{0} There are no apples|There is one apple', 2]]; } public function getChooseTests() { return [ ['There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0], ['There are no apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0], ['There are no apples', '{0}There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 0], ['There is one apple', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 1], ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10], ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf]There are %count% apples', 10], ['There are 10 apples', '{0} There are no apples|{1} There is one apple|]1,Inf] There are %count% apples', 10], ['There are 0 apples', 'There is one apple|There are %count% apples', 0], ['There is one apple', 'There is one apple|There are %count% apples', 1], ['There are 10 apples', 'There is one apple|There are %count% apples', 10], ['There are 0 apples', 'one: There is one apple|more: There are %count% apples', 0], ['There is one apple', 'one: There is one apple|more: There are %count% apples', 1], ['There are 10 apples', 'one: There is one apple|more: There are %count% apples', 10], ['There are no apples', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 0], ['There is one apple', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 1], ['There are 10 apples', '{0} There are no apples|one: There is one apple|more: There are %count% apples', 10], ['', '{0}|{1} There is one apple|]1,Inf] There are %count% apples', 0], ['', '{0} There are no apples|{1}|]1,Inf] There are %count% apples', 1], ['There are 0 apples', 'There is one apple|There are %count% apples', 0], ['There is one apple', 'There is one apple|There are %count% apples', 1], ['There are 2 apples', 'There is one apple|There are %count% apples', 2], ['There is almost one apple', '{0} There are no apples|]0,1[ There is almost one apple|{1} There is one apple|[1,Inf] There is more than one apple', 0.7], ['There is one apple', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 1], ['There is more than one apple', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 1.7], ['There are no apples', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0], ['There are no apples', '{0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0.0], ['There are no apples', '{0.0} There are no apples|]0,1[There are %count% apples|{1} There is one apple|[1,Inf] There is more than one apple', 0], ["This is a text with a\n new-line in it. Selector = 0.", '{0}This is a text with a
3
  new-line in it. Selector = 0.|{1}This is a text with a
4
  new-line in it. Selector = 1.|[1,Inf]This is a text with a
5
  new-line in it. Selector > 1.', 0], ["This is a text with a\n new-line in it. Selector = 1.", '{0}This is a text with a
16
  new-line in it. Selector > 1.', '{0}This is a text with a
17
  new-line in it. Selector = 0.|{1}This is a text with a
18
  new-line in it. Selector = 1.|[1,Inf]This is a text with a
19
+ new-line in it. Selector > 1.', 5], ['This is a text with a\\nnew-line in it. Selector = 0.', '{0}This is a text with a\\nnew-line in it. Selector = 0.|{1}This is a text with a\\nnew-line in it. Selector = 1.|[1,Inf]This is a text with a\\nnew-line in it. Selector > 1.', 0], ["This is a text with a\nnew-line in it. Selector = 1.", "{0}This is a text with a\nnew-line in it. Selector = 0.|{1}This is a text with a\nnew-line in it. Selector = 1.|[1,Inf]This is a text with a\nnew-line in it. Selector > 1.", 1], ['This is a text with | in it. Selector = 0.', '{0}This is a text with || in it. Selector = 0.|{1}This is a text with || in it. Selector = 1.', 0], ['', '|', 1], ['', '||', 1], ]; } public function testFailedLangcodes($nplural, $langCodes) { $matrix = $this->generateTestData($langCodes); $this->validateMatrix($nplural, $matrix, \false); } public function testLangcodes($nplural, $langCodes) { $matrix = $this->generateTestData($langCodes); $this->validateMatrix($nplural, $matrix); } public function successLangcodes() { return [['1', ['ay', 'bo', 'cgg', 'dz', 'id', 'ja', 'jbo', 'ka', 'kk', 'km', 'ko', 'ky']], ['2', ['nl', 'fr', 'en', 'de', 'de_GE', 'hy', 'hy_AM', 'en_US_POSIX']], ['3', ['be', 'bs', 'cs', 'hr']], ['4', ['cy', 'mt', 'sl']], ['6', ['ar']]]; } public function failingLangcodes() { return [['1', ['fa']], ['2', ['jbo']], ['3', ['cbs']], ['4', ['gd', 'kw']], ['5', ['ga']]]; } protected function validateMatrix($nplural, $matrix, $expectSuccess = \true) { foreach ($matrix as $langCode => $data) { $indexes = \array_flip($data); if ($expectSuccess) { $this->assertEquals($nplural, \count($indexes), "Langcode '{$langCode}' has '{$nplural}' plural forms."); } else { $this->assertNotEquals((int) $nplural, \count($indexes), "Langcode '{$langCode}' has '{$nplural}' plural forms."); } } } protected function generateTestData($langCodes) { $translator = new class { use TranslatorTrait { getPluralizationRule as public; } }; $matrix = []; foreach ($langCodes as $langCode) { for ($count = 0; $count < 200; ++$count) { $plural = $translator->getPluralizationRule($count, $langCode); $matrix[$langCode][$count] = $plural; } } return $matrix; } }
vendor-prefixed/symfony/translation-contracts/TranslatorTrait.php CHANGED
@@ -1,5 +1,5 @@
1
  <?php
2
- namespace MailPoetVendor\Symfony\Contracts\Translation; if (!defined('ABSPATH')) exit; use MailPoetVendor\Symfony\Component\Translation\Exception\InvalidArgumentException; trait TranslatorTrait { private $locale; public function setLocale($locale) { $this->locale = (string) $locale; } public function getLocale() { return $this->locale ?: \Locale::getDefault(); } public function trans($id, array $parameters = [], $domain = null, $locale = null) { if ('' === ($id = (string) $id)) { return ''; } if (!isset($parameters['%count%']) || !\is_numeric($parameters['%count%'])) { return \strtr($id, $parameters); } $number = (float) $parameters['%count%']; $locale = (string) $locale ?: $this->getLocale(); $parts = []; if (\preg_match('/^\\|++$/', $id)) { $parts = \explode('|', $id); } elseif (\preg_match_all('/(?:\\|\\||[^\\|])++/', $id, $matches)) { $parts = $matches[0]; } $intervalRegexp = <<<'EOF'
3
  /^(?P<interval>
4
  ({\s*
5
  (\-?\d+(\.\d+)?[\s*,\s*\-?\d+(\.\d+)?]*)
@@ -16,4 +16,4 @@
16
  (?P<right_delimiter>[\[\]])
17
  )\s*(?P<message>.*?)$/xs
18
  EOF;
19
- $standardRules = []; foreach ($parts as $part) { $part = \trim(\str_replace('||', '|', $part)); if (\preg_match($intervalRegexp, $part, $matches)) { if ($matches[2]) { foreach (\explode(',', $matches[3]) as $n) { if ($number == $n) { return \strtr($matches['message'], $parameters); } } } else { $leftNumber = '-Inf' === $matches['left'] ? -\INF : (float) $matches['left']; $rightNumber = \is_numeric($matches['right']) ? (float) $matches['right'] : \INF; if (('[' === $matches['left_delimiter'] ? $number >= $leftNumber : $number > $leftNumber) && (']' === $matches['right_delimiter'] ? $number <= $rightNumber : $number < $rightNumber)) { return \strtr($matches['message'], $parameters); } } } elseif (\preg_match('/^\\w+\\:\\s*(.*?)$/', $part, $matches)) { $standardRules[] = $matches[1]; } else { $standardRules[] = $part; } } $position = $this->getPluralizationRule($number, $locale); if (!isset($standardRules[$position])) { if (1 === \count($parts) && isset($standardRules[0])) { return \strtr($standardRules[0], $parameters); } $message = \sprintf('Unable to choose a translation for "%s" with locale "%s" for value "%d". Double check that this translation has the correct plural options (e.g. "There is one apple|There are %%count%% apples").', $id, $locale, $number); if (\class_exists(InvalidArgumentException::class)) { throw new InvalidArgumentException($message); } throw new \InvalidArgumentException($message); } return \strtr($standardRules[$position], $parameters); } private function getPluralizationRule(int $number, string $locale) : int { switch ('pt_BR' !== $locale && \strlen($locale) > 3 ? \substr($locale, 0, \strrpos($locale, '_')) : $locale) { case 'af': case 'bn': case 'bg': case 'ca': case 'da': case 'de': case 'el': case 'en': case 'eo': case 'es': case 'et': case 'eu': case 'fa': case 'fi': case 'fo': case 'fur': case 'fy': case 'gl': case 'gu': case 'ha': case 'he': case 'hu': case 'is': case 'it': case 'ku': case 'lb': case 'ml': case 'mn': case 'mr': case 'nah': case 'nb': case 'ne': case 'nl': case 'nn': case 'no': case 'oc': case 'om': case 'or': case 'pa': case 'pap': case 'ps': case 'pt': case 'so': case 'sq': case 'sv': case 'sw': case 'ta': case 'te': case 'tk': case 'ur': case 'zu': return 1 == $number ? 0 : 1; case 'am': case 'bh': case 'fil': case 'fr': case 'gun': case 'hi': case 'hy': case 'ln': case 'mg': case 'nso': case 'pt_BR': case 'ti': case 'wa': return 0 == $number || 1 == $number ? 0 : 1; case 'be': case 'bs': case 'hr': case 'ru': case 'sh': case 'sr': case 'uk': return 1 == $number % 10 && 11 != $number % 100 ? 0 : ($number % 10 >= 2 && $number % 10 <= 4 && ($number % 100 < 10 || $number % 100 >= 20) ? 1 : 2); case 'cs': case 'sk': return 1 == $number ? 0 : ($number >= 2 && $number <= 4 ? 1 : 2); case 'ga': return 1 == $number ? 0 : (2 == $number ? 1 : 2); case 'lt': return 1 == $number % 10 && 11 != $number % 100 ? 0 : ($number % 10 >= 2 && ($number % 100 < 10 || $number % 100 >= 20) ? 1 : 2); case 'sl': return 1 == $number % 100 ? 0 : (2 == $number % 100 ? 1 : (3 == $number % 100 || 4 == $number % 100 ? 2 : 3)); case 'mk': return 1 == $number % 10 ? 0 : 1; case 'mt': return 1 == $number ? 0 : (0 == $number || $number % 100 > 1 && $number % 100 < 11 ? 1 : ($number % 100 > 10 && $number % 100 < 20 ? 2 : 3)); case 'lv': return 0 == $number ? 0 : (1 == $number % 10 && 11 != $number % 100 ? 1 : 2); case 'pl': return 1 == $number ? 0 : ($number % 10 >= 2 && $number % 10 <= 4 && ($number % 100 < 12 || $number % 100 > 14) ? 1 : 2); case 'cy': return 1 == $number ? 0 : (2 == $number ? 1 : (8 == $number || 11 == $number ? 2 : 3)); case 'ro': return 1 == $number ? 0 : (0 == $number || $number % 100 > 0 && $number % 100 < 20 ? 1 : 2); case 'ar': return 0 == $number ? 0 : (1 == $number ? 1 : (2 == $number ? 2 : ($number % 100 >= 3 && $number % 100 <= 10 ? 3 : ($number % 100 >= 11 && $number % 100 <= 99 ? 4 : 5)))); default: return 0; } } }
1
  <?php
2
+ namespace MailPoetVendor\Symfony\Contracts\Translation; if (!defined('ABSPATH')) exit; use MailPoetVendor\Symfony\Component\Translation\Exception\InvalidArgumentException; trait TranslatorTrait { private $locale; public function setLocale($locale) { $this->locale = (string) $locale; } public function getLocale() { return $this->locale ?: (\class_exists(\Locale::class) ? \Locale::getDefault() : 'en'); } public function trans($id, array $parameters = [], $domain = null, $locale = null) { if ('' === ($id = (string) $id)) { return ''; } if (!isset($parameters['%count%']) || !\is_numeric($parameters['%count%'])) { return \strtr($id, $parameters); } $number = (float) $parameters['%count%']; $locale = (string) $locale ?: $this->getLocale(); $parts = []; if (\preg_match('/^\\|++$/', $id)) { $parts = \explode('|', $id); } elseif (\preg_match_all('/(?:\\|\\||[^\\|])++/', $id, $matches)) { $parts = $matches[0]; } $intervalRegexp = <<<'EOF'
3
  /^(?P<interval>
4
  ({\s*
5
  (\-?\d+(\.\d+)?[\s*,\s*\-?\d+(\.\d+)?]*)
16
  (?P<right_delimiter>[\[\]])
17
  )\s*(?P<message>.*?)$/xs
18
  EOF;
19
+ $standardRules = []; foreach ($parts as $part) { $part = \trim(\str_replace('||', '|', $part)); if (\preg_match($intervalRegexp, $part, $matches)) { if ($matches[2]) { foreach (\explode(',', $matches[3]) as $n) { if ($number == $n) { return \strtr($matches['message'], $parameters); } } } else { $leftNumber = '-Inf' === $matches['left'] ? -\INF : (float) $matches['left']; $rightNumber = \is_numeric($matches['right']) ? (float) $matches['right'] : \INF; if (('[' === $matches['left_delimiter'] ? $number >= $leftNumber : $number > $leftNumber) && (']' === $matches['right_delimiter'] ? $number <= $rightNumber : $number < $rightNumber)) { return \strtr($matches['message'], $parameters); } } } elseif (\preg_match('/^\\w+\\:\\s*(.*?)$/', $part, $matches)) { $standardRules[] = $matches[1]; } else { $standardRules[] = $part; } } $position = $this->getPluralizationRule($number, $locale); if (!isset($standardRules[$position])) { if (1 === \count($parts) && isset($standardRules[0])) { return \strtr($standardRules[0], $parameters); } $message = \sprintf('Unable to choose a translation for "%s" with locale "%s" for value "%d". Double check that this translation has the correct plural options (e.g. "There is one apple|There are %%count%% apples").', $id, $locale, $number); if (\class_exists(InvalidArgumentException::class)) { throw new InvalidArgumentException($message); } throw new \InvalidArgumentException($message); } return \strtr($standardRules[$position], $parameters); } private function getPluralizationRule(float $number, string $locale) : int { $number = \abs($number); switch ('pt_BR' !== $locale && 'en_US_POSIX' !== $locale && \strlen($locale) > 3 ? \substr($locale, 0, \strrpos($locale, '_')) : $locale) { case 'af': case 'bn': case 'bg': case 'ca': case 'da': case 'de': case 'el': case 'en': case 'en_US_POSIX': case 'eo': case 'es': case 'et': case 'eu': case 'fa': case 'fi': case 'fo': case 'fur': case 'fy': case 'gl': case 'gu': case 'ha': case 'he': case 'hu': case 'is': case 'it': case 'ku': case 'lb': case 'ml': case 'mn': case 'mr': case 'nah': case 'nb': case 'ne': case 'nl': case 'nn': case 'no': case 'oc': case 'om': case 'or': case 'pa': case 'pap': case 'ps': case 'pt': case 'so': case 'sq': case 'sv': case 'sw': case 'ta': case 'te': case 'tk': case 'ur': case 'zu': return 1 == $number ? 0 : 1; case 'am': case 'bh': case 'fil': case 'fr': case 'gun': case 'hi': case 'hy': case 'ln': case 'mg': case 'nso': case 'pt_BR': case 'ti': case 'wa': return $number < 2 ? 0 : 1; case 'be': case 'bs': case 'hr': case 'ru': case 'sh': case 'sr': case 'uk': return 1 == $number % 10 && 11 != $number % 100 ? 0 : ($number % 10 >= 2 && $number % 10 <= 4 && ($number % 100 < 10 || $number % 100 >= 20) ? 1 : 2); case 'cs': case 'sk': return 1 == $number ? 0 : ($number >= 2 && $number <= 4 ? 1 : 2); case 'ga': return 1 == $number ? 0 : (2 == $number ? 1 : 2); case 'lt': return 1 == $number % 10 && 11 != $number % 100 ? 0 : ($number % 10 >= 2 && ($number % 100 < 10 || $number % 100 >= 20) ? 1 : 2); case 'sl': return 1 == $number % 100 ? 0 : (2 == $number % 100 ? 1 : (3 == $number % 100 || 4 == $number % 100 ? 2 : 3)); case 'mk': return 1 == $number % 10 ? 0 : 1; case 'mt': return 1 == $number ? 0 : (0 == $number || $number % 100 > 1 && $number % 100 < 11 ? 1 : ($number % 100 > 10 && $number % 100 < 20 ? 2 : 3)); case 'lv': return 0 == $number ? 0 : (1 == $number % 10 && 11 != $number % 100 ? 1 : 2); case 'pl': return 1 == $number ? 0 : ($number % 10 >= 2 && $number % 10 <= 4 && ($number % 100 < 12 || $number % 100 > 14) ? 1 : 2); case 'cy': return 1 == $number ? 0 : (2 == $number ? 1 : (8 == $number || 11 == $number ? 2 : 3)); case 'ro': return 1 == $number ? 0 : (0 == $number || $number % 100 > 0 && $number % 100 < 20 ? 1 : 2); case 'ar': return 0 == $number ? 0 : (1 == $number ? 1 : (2 == $number ? 2 : ($number % 100 >= 3 && $number % 100 <= 10 ? 3 : ($number % 100 >= 11 && $number % 100 <= 99 ? 4 : 5)))); default: return 0; } } }
vendor/autoload.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- if (!defined('ABSPATH')) exit; require_once __DIR__ . '/composer/autoload_real.php'; return ComposerAutoloaderInitf6617059bfef298786545fd02c40c28e::getLoader();
1
  <?php
2
+ if (!defined('ABSPATH')) exit; require_once __DIR__ . '/composer/autoload_real.php'; return ComposerAutoloaderInit6595bb8f461ac0d65b82f65d86ce3054::getLoader();
vendor/composer/autoload_classmap.php CHANGED
@@ -1,2 +1,2 @@
1
  <?php
2
- if (!defined('ABSPATH')) exit; $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 'MailPoetVendor\\Attribute' => $baseDir . '/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/Attribute.php', 'MailPoetVendor\\CSS' => $baseDir . '/lib-3rd-party/CSS.php', 'MailPoetVendor\\Carbon\\Carbon' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Carbon.php', 'MailPoetVendor\\Carbon\\CarbonConverterInterface' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/CarbonConverterInterface.php', 'MailPoetVendor\\Carbon\\CarbonImmutable' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/CarbonImmutable.php', 'MailPoetVendor\\Carbon\\CarbonInterface' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/CarbonInterface.php', 'MailPoetVendor\\Carbon\\CarbonInterval' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/CarbonInterval.php', 'MailPoetVendor\\Carbon\\CarbonPeriod' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/CarbonPeriod.php', 'MailPoetVendor\\Carbon\\CarbonTimeZone' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/CarbonTimeZone.php', 'MailPoetVendor\\Carbon\\Exceptions\\BadComparisonUnitException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/BadComparisonUnitException.php', 'MailPoetVendor\\Carbon\\Exceptions\\BadFluentConstructorException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/BadFluentConstructorException.php', 'MailPoetVendor\\Carbon\\Exceptions\\BadFluentSetterException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/BadFluentSetterException.php', 'MailPoetVendor\\Carbon\\Exceptions\\BadMethodCallException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/BadMethodCallException.php', 'MailPoetVendor\\Carbon\\Exceptions\\Exception' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/Exception.php', 'MailPoetVendor\\Carbon\\Exceptions\\ImmutableException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/ImmutableException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidArgumentException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidCastException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidCastException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidDateException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidDateException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidFormatException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidFormatException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidIntervalException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidIntervalException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidPeriodDateException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidPeriodDateException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidPeriodParameterException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidPeriodParameterException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidTimeZoneException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidTimeZoneException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidTypeException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidTypeException.php', 'MailPoetVendor\\Carbon\\Exceptions\\NotACarbonClassException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/NotACarbonClassException.php', 'MailPoetVendor\\Carbon\\Exceptions\\NotAPeriodException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/NotAPeriodException.php', 'MailPoetVendor\\Carbon\\Exceptions\\NotLocaleAwareException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/NotLocaleAwareException.php', 'MailPoetVendor\\Carbon\\Exceptions\\OutOfRangeException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/OutOfRangeException.php', 'MailPoetVendor\\Carbon\\Exceptions\\ParseErrorException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/ParseErrorException.php', 'MailPoetVendor\\Carbon\\Exceptions\\RuntimeException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/RuntimeException.php', 'MailPoetVendor\\Carbon\\Exceptions\\UnitException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/UnitException.php', 'MailPoetVendor\\Carbon\\Exceptions\\UnitNotConfiguredException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/UnitNotConfiguredException.php', 'MailPoetVendor\\Carbon\\Exceptions\\UnknownGetterException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/UnknownGetterException.php', 'MailPoetVendor\\Carbon\\Exceptions\\UnknownMethodException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/UnknownMethodException.php', 'MailPoetVendor\\Carbon\\Exceptions\\UnknownSetterException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/UnknownSetterException.php', 'MailPoetVendor\\Carbon\\Exceptions\\UnknownUnitException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/UnknownUnitException.php', 'MailPoetVendor\\Carbon\\Exceptions\\UnreachableException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/UnreachableException.php', 'MailPoetVendor\\Carbon\\Factory' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Factory.php', 'MailPoetVendor\\Carbon\\FactoryImmutable' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/FactoryImmutable.php', 'MailPoetVendor\\Carbon\\Language' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Language.php', 'MailPoetVendor\\Carbon\\Traits\\Boundaries' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Boundaries.php', 'MailPoetVendor\\Carbon\\Traits\\Cast' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Cast.php', 'MailPoetVendor\\Carbon\\Traits\\Comparison' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Comparison.php', 'MailPoetVendor\\Carbon\\Traits\\Converter' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Converter.php', 'MailPoetVendor\\Carbon\\Traits\\Creator' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Creator.php', 'MailPoetVendor\\Carbon\\Traits\\Date' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Date.php', 'MailPoetVendor\\Carbon\\Traits\\Difference' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Difference.php', 'MailPoetVendor\\Carbon\\Traits\\IntervalRounding' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/IntervalRounding.php', 'MailPoetVendor\\Carbon\\Traits\\IntervalStep' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/IntervalStep.php', 'MailPoetVendor\\Carbon\\Traits\\Localization' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Localization.php', 'MailPoetVendor\\Carbon\\Traits\\Macro' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Macro.php', 'MailPoetVendor\\Carbon\\Traits\\Mixin' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Mixin.php', 'MailPoetVendor\\Carbon\\Traits\\Modifiers' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Modifiers.php', 'MailPoetVendor\\Carbon\\Traits\\Mutability' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Mutability.php', 'MailPoetVendor\\Carbon\\Traits\\ObjectInitialisation' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/ObjectInitialisation.php', 'MailPoetVendor\\Carbon\\Traits\\Options' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Options.php', 'MailPoetVendor\\Carbon\\Traits\\Rounding' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Rounding.php', 'MailPoetVendor\\Carbon\\Traits\\Serialization' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Serialization.php', 'MailPoetVendor\\Carbon\\Traits\\Test' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Test.php', 'MailPoetVendor\\Carbon\\Traits\\Timestamp' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Timestamp.php', 'MailPoetVendor\\Carbon\\Traits\\Units' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Units.php', 'MailPoetVendor\\Carbon\\Traits\\Week' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Week.php', 'MailPoetVendor\\Carbon\\Translator' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Translator.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\Cache' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/Cache.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\CacheProvider' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/CacheProvider.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\ClearableCache' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/ClearableCache.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\FlushableCache' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/FlushableCache.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\MultiDeleteCache' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/MultiDeleteCache.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\MultiGetCache' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/MultiGetCache.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\MultiOperationCache' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/MultiOperationCache.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\MultiPutCache' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/MultiPutCache.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\Psr6\\CacheAdapter' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/CacheAdapter.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\Psr6\\CacheItem' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/CacheItem.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\Psr6\\DoctrineProvider' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/DoctrineProvider.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\Psr6\\InvalidArgument' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/InvalidArgument.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\Psr6\\TypedCacheItem' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/TypedCacheItem.php', 'MailPoetVendor\\Doctrine\\Common\\ClassLoader' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/ClassLoader.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\AbstractLazyCollection' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/AbstractLazyCollection.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\ArrayCollection' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/ArrayCollection.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Collection' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Collection.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Criteria' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Criteria.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Expr\\ClosureExpressionVisitor' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Expr/ClosureExpressionVisitor.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Expr\\Comparison' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Comparison.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Expr\\CompositeExpression' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Expr/CompositeExpression.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Expr\\Expression' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Expression.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Expr\\ExpressionVisitor' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Expr/ExpressionVisitor.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Expr\\Value' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Value.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\ExpressionBuilder' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/ExpressionBuilder.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Selectable' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Selectable.php', 'MailPoetVendor\\Doctrine\\Common\\CommonException' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/CommonException.php', 'MailPoetVendor\\Doctrine\\Common\\Comparable' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Comparable.php', 'MailPoetVendor\\Doctrine\\Common\\EventArgs' => $baseDir . '/vendor-prefixed/doctrine/event-manager/lib/Doctrine/Common/EventArgs.php', 'MailPoetVendor\\Doctrine\\Common\\EventManager' => $baseDir . '/vendor-prefixed/doctrine/event-manager/lib/Doctrine/Common/EventManager.php', 'MailPoetVendor\\Doctrine\\Common\\EventSubscriber' => $baseDir . '/vendor-prefixed/doctrine/event-manager/lib/Doctrine/Common/EventSubscriber.php', 'MailPoetVendor\\Doctrine\\Common\\Lexer\\AbstractLexer' => $baseDir . '/vendor-prefixed/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php', 'MailPoetVendor\\Doctrine\\Common\\Persistence\\PersistentObject' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Common/Persistence/PersistentObject.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\AbstractProxyFactory' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\Autoloader' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/Autoloader.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\Exception\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/Exception/InvalidArgumentException.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\Exception\\OutOfBoundsException' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/Exception/OutOfBoundsException.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\Exception\\ProxyException' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/Exception/ProxyException.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\Exception\\UnexpectedValueException' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/Exception/UnexpectedValueException.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\Proxy' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/Proxy.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\ProxyDefinition' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/ProxyDefinition.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\ProxyGenerator' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/ProxyGenerator.php', 'MailPoetVendor\\Doctrine\\Common\\Util\\ClassUtils' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Util/ClassUtils.php', 'MailPoetVendor\\Doctrine\\Common\\Util\\Debug' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Util/Debug.php', 'MailPoetVendor\\Doctrine\\DBAL\\Abstraction\\Result' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Abstraction/Result.php', 'MailPoetVendor\\Doctrine\\DBAL\\Cache\\ArrayStatement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Cache/ArrayStatement.php', 'MailPoetVendor\\Doctrine\\DBAL\\Cache\\CacheException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Cache/CacheException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Cache\\QueryCacheProfile' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Cache/QueryCacheProfile.php', 'MailPoetVendor\\Doctrine\\DBAL\\Cache\\ResultCacheStatement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Cache/ResultCacheStatement.php', 'MailPoetVendor\\Doctrine\\DBAL\\ColumnCase' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/ColumnCase.php', 'MailPoetVendor\\Doctrine\\DBAL\\Configuration' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Configuration.php', 'MailPoetVendor\\Doctrine\\DBAL\\Connection' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Connection.php', 'MailPoetVendor\\Doctrine\\DBAL\\ConnectionException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/ConnectionException.php', 'MailPoetVendor\\Doctrine\\DBAL\\DBALException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver.php', 'MailPoetVendor\\Doctrine\\DBAL\\DriverManager' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/DriverManager.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\AbstractDriverException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractDriverException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\AbstractException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\AbstractMySQLDriver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\AbstractSQLServerDriver\\Exception\\PortWithoutHost' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLServerDriver/Exception/PortWithoutHost.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\Connection' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/Connection.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\DriverException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/DriverException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\Exception' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/Exception.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\ExceptionConverterDriver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/ExceptionConverterDriver.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\FetchUtils' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/FetchUtils.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDOConnection' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDOException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDOMySql\\Driver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDOQueryImplementation' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOQueryImplementation.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDOStatement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDOStatementImplementations' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatementImplementations.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\Connection' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/Connection.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\Exception' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/Exception.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\MySQL\\Driver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/MySQL/Driver.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\OCI\\Driver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/OCI/Driver.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\PgSQL\\Driver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/PgSQL/Driver.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\SQLSrv\\Connection' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/SQLSrv/Connection.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\SQLSrv\\Driver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/SQLSrv/Driver.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\SQLSrv\\Statement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/SQLSrv/Statement.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\SQLite\\Driver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/SQLite/Driver.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\Statement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/Statement.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PingableConnection' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PingableConnection.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\Result' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/Result.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\ResultStatement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/ResultStatement.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\ServerInfoAwareConnection' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/ServerInfoAwareConnection.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\Statement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/Statement.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\StatementIterator' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/StatementIterator.php', 'MailPoetVendor\\Doctrine\\DBAL\\Event\\Listeners\\SQLSessionInit' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Event/Listeners/SQLSessionInit.php', 'MailPoetVendor\\Doctrine\\DBAL\\Events' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Events.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\ConnectionException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/ConnectionException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\ConnectionLost' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/ConnectionLost.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\ConstraintViolationException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/ConstraintViolationException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\DatabaseObjectExistsException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/DatabaseObjectExistsException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\DatabaseObjectNotFoundException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/DatabaseObjectNotFoundException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\DeadlockException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/DeadlockException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\DriverException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/DriverException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\ForeignKeyConstraintViolationException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/ForeignKeyConstraintViolationException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/InvalidArgumentException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\InvalidFieldNameException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/InvalidFieldNameException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\LockWaitTimeoutException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/LockWaitTimeoutException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\NoKeyValue' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/NoKeyValue.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\NonUniqueFieldNameException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/NonUniqueFieldNameException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\NotNullConstraintViolationException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/NotNullConstraintViolationException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\ReadOnlyException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/ReadOnlyException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\RetryableException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/RetryableException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\ServerException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/ServerException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\SyntaxErrorException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/SyntaxErrorException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\TableExistsException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/TableExistsException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\TableNotFoundException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/TableNotFoundException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\UniqueConstraintViolationException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/UniqueConstraintViolationException.php', 'MailPoetVendor\\Doctrine\\DBAL\\FetchMode' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/FetchMode.php', 'MailPoetVendor\\Doctrine\\DBAL\\ForwardCompatibility\\DriverResultStatement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/ForwardCompatibility/DriverResultStatement.php', 'MailPoetVendor\\Doctrine\\DBAL\\ForwardCompatibility\\DriverStatement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/ForwardCompatibility/DriverStatement.php', 'MailPoetVendor\\Doctrine\\DBAL\\ForwardCompatibility\\Result' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/ForwardCompatibility/Result.php', 'MailPoetVendor\\Doctrine\\DBAL\\Id\\TableGenerator' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Id/TableGenerator.php', 'MailPoetVendor\\Doctrine\\DBAL\\Id\\TableGeneratorSchemaVisitor' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Id/TableGeneratorSchemaVisitor.php', 'MailPoetVendor\\Doctrine\\DBAL\\LockMode' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/LockMode.php', 'MailPoetVendor\\Doctrine\\DBAL\\Logging\\DebugStack' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Logging/DebugStack.php', 'MailPoetVendor\\Doctrine\\DBAL\\Logging\\EchoSQLLogger' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Logging/EchoSQLLogger.php', 'MailPoetVendor\\Doctrine\\DBAL\\Logging\\LoggerChain' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Logging/LoggerChain.php', 'MailPoetVendor\\Doctrine\\DBAL\\Logging\\SQLLogger' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Logging/SQLLogger.php', 'MailPoetVendor\\Doctrine\\DBAL\\ParameterType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/ParameterType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\AbstractPlatform' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\DateIntervalUnit' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/DateIntervalUnit.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\Keywords\\KeywordList' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/KeywordList.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\Keywords\\MariaDb102Keywords' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/MariaDb102Keywords.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\Keywords\\MsSQLKeywords' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/MsSQLKeywords.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\Keywords\\MySQL57Keywords' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/MySQL57Keywords.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\Keywords\\MySQL80Keywords' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/MySQL80Keywords.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\Keywords\\MySQLKeywords' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/MySQLKeywords.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\Keywords\\ReservedKeywordsValidator' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/ReservedKeywordsValidator.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\MariaDb1027Platform' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MariaDb1027Platform.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\MySQL57Platform' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySQL57Platform.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\MySQL80Platform' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySQL80Platform.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\MySqlPlatform' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\TrimMode' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/TrimMode.php', 'MailPoetVendor\\Doctrine\\DBAL\\Portability\\Connection' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Portability/Connection.php', 'MailPoetVendor\\Doctrine\\DBAL\\Portability\\OptimizeFlags' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Portability/OptimizeFlags.php', 'MailPoetVendor\\Doctrine\\DBAL\\Portability\\Statement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Portability/Statement.php', 'MailPoetVendor\\Doctrine\\DBAL\\Query\\Expression\\CompositeExpression' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Query/Expression/CompositeExpression.php', 'MailPoetVendor\\Doctrine\\DBAL\\Query\\Expression\\ExpressionBuilder' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Query/Expression/ExpressionBuilder.php', 'MailPoetVendor\\Doctrine\\DBAL\\Query\\QueryBuilder' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Query/QueryBuilder.php', 'MailPoetVendor\\Doctrine\\DBAL\\Query\\QueryException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Query/QueryException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Result' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Result.php', 'MailPoetVendor\\Doctrine\\DBAL\\SQLParserUtils' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtils.php', 'MailPoetVendor\\Doctrine\\DBAL\\SQLParserUtilsException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtilsException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Statement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Statement.php', 'MailPoetVendor\\Doctrine\\DBAL\\TransactionIsolationLevel' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/TransactionIsolationLevel.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\ArrayType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/ArrayType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\AsciiStringType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/AsciiStringType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\BigIntType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/BigIntType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\BinaryType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/BinaryType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\BlobType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/BlobType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\BooleanType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/BooleanType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\ConversionException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/ConversionException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\DateImmutableType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DateImmutableType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\DateIntervalType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DateIntervalType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\DateTimeImmutableType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeImmutableType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\DateTimeType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\DateTimeTzImmutableType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeTzImmutableType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\DateTimeTzType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeTzType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\DateType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DateType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\DecimalType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DecimalType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\FloatType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/FloatType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\GuidType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/GuidType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\IntegerType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/IntegerType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\JsonArrayType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/JsonArrayType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\JsonType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/JsonType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\ObjectType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/ObjectType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\PhpDateTimeMappingType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/PhpDateTimeMappingType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\PhpIntegerMappingType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/PhpIntegerMappingType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\SimpleArrayType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/SimpleArrayType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\SmallIntType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/SmallIntType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\StringType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/StringType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\TextType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/TextType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\TimeImmutableType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/TimeImmutableType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\TimeType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/TimeType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\Type' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/Type.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\TypeRegistry' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/TypeRegistry.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\Types' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/Types.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\VarDateTimeImmutableType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/VarDateTimeImmutableType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\VarDateTimeType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/VarDateTimeType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Version' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Version.php', 'MailPoetVendor\\Doctrine\\DBAL\\VersionAwarePlatformDriver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/VersionAwarePlatformDriver.php', 'MailPoetVendor\\Doctrine\\Deprecations\\Deprecation' => $baseDir . '/vendor-prefixed/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php', 'MailPoetVendor\\Doctrine\\Instantiator\\Exception\\ExceptionInterface' => $baseDir . '/vendor-prefixed/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php', 'MailPoetVendor\\Doctrine\\Instantiator\\Exception\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php', 'MailPoetVendor\\Doctrine\\Instantiator\\Exception\\UnexpectedValueException' => $baseDir . '/vendor-prefixed/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php', 'MailPoetVendor\\Doctrine\\Instantiator\\Instantiator' => $baseDir . '/vendor-prefixed/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php', 'MailPoetVendor\\Doctrine\\Instantiator\\InstantiatorInterface' => $baseDir . '/vendor-prefixed/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php', 'MailPoetVendor\\Doctrine\\ORM\\AbstractQuery' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/AbstractQuery.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\AssociationCacheEntry' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/AssociationCacheEntry.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\CacheConfiguration' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/CacheConfiguration.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\CacheEntry' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/CacheEntry.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\CacheException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/CacheException.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\CacheFactory' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/CacheFactory.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\CacheKey' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/CacheKey.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\CollectionCacheEntry' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/CollectionCacheEntry.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\CollectionCacheKey' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/CollectionCacheKey.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\CollectionHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/CollectionHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\ConcurrentRegion' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/ConcurrentRegion.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\DefaultCache' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/DefaultCache.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\DefaultCacheFactory' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\DefaultCollectionHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\DefaultEntityHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\DefaultQueryCache' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/DefaultQueryCache.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\EntityCacheEntry' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/EntityCacheEntry.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\EntityCacheKey' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/EntityCacheKey.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\EntityHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/EntityHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\CacheException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/CacheException.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\CannotUpdateReadOnlyCollection' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/CannotUpdateReadOnlyCollection.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\CannotUpdateReadOnlyEntity' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/CannotUpdateReadOnlyEntity.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\FeatureNotImplemented' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/FeatureNotImplemented.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\InvalidResultCacheDriver' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/InvalidResultCacheDriver.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\MetadataCacheNotConfigured' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/MetadataCacheNotConfigured.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\MetadataCacheUsesNonPersistentCache' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/MetadataCacheUsesNonPersistentCache.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\NonCacheableEntity' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/NonCacheableEntity.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\NonCacheableEntityAssociation' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/NonCacheableEntityAssociation.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\QueryCacheNotConfigured' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/QueryCacheNotConfigured.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\QueryCacheUsesNonPersistentCache' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/QueryCacheUsesNonPersistentCache.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Lock' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Lock.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\LockException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/LockException.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Logging\\CacheLogger' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Logging/CacheLogger.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Logging\\CacheLoggerChain' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Logging/CacheLoggerChain.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Logging\\StatisticsCacheLogger' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Logging/StatisticsCacheLogger.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\MultiGetRegion' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/MultiGetRegion.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\CachedPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/CachedPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Collection\\AbstractCollectionPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Collection\\CachedCollectionPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Collection/CachedCollectionPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Collection\\NonStrictReadWriteCachedCollectionPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Collection\\ReadOnlyCachedCollectionPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Collection\\ReadWriteCachedCollectionPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Entity\\AbstractEntityPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Entity\\CachedEntityPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Entity/CachedEntityPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Entity\\NonStrictReadWriteCachedEntityPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Entity\\ReadOnlyCachedEntityPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Entity\\ReadWriteCachedEntityPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\QueryCache' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/QueryCache.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\QueryCacheEntry' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/QueryCacheEntry.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\QueryCacheKey' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/QueryCacheKey.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\QueryCacheValidator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/QueryCacheValidator.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Region' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Region.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Region\\DefaultMultiGetRegion' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Region/DefaultMultiGetRegion.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Region\\DefaultRegion' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Region/DefaultRegion.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Region\\FileLockRegion' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Region\\UpdateTimestampCache' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Region/UpdateTimestampCache.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\RegionsConfiguration' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/RegionsConfiguration.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\TimestampCacheEntry' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/TimestampCacheEntry.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\TimestampCacheKey' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/TimestampCacheKey.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\TimestampQueryCacheValidator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/TimestampQueryCacheValidator.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\TimestampRegion' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/TimestampRegion.php', 'MailPoetVendor\\Doctrine\\ORM\\Configuration' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Configuration.php', 'MailPoetVendor\\Doctrine\\ORM\\Decorator\\EntityManagerDecorator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php', 'MailPoetVendor\\Doctrine\\ORM\\EntityManager' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/EntityManager.php', 'MailPoetVendor\\Doctrine\\ORM\\EntityManagerInterface' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/EntityManagerInterface.php', 'MailPoetVendor\\Doctrine\\ORM\\EntityNotFoundException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/EntityNotFoundException.php', 'MailPoetVendor\\Doctrine\\ORM\\EntityRepository' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\LifecycleEventArgs' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/LifecycleEventArgs.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\ListenersInvoker' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/ListenersInvoker.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\LoadClassMetadataEventArgs' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/LoadClassMetadataEventArgs.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\OnClassMetadataNotFoundEventArgs' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\OnClearEventArgs' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/OnClearEventArgs.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\OnFlushEventArgs' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/OnFlushEventArgs.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\PostFlushEventArgs' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/PostFlushEventArgs.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\PreFlushEventArgs' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/PreFlushEventArgs.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\PreUpdateEventArgs' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/PreUpdateEventArgs.php', 'MailPoetVendor\\Doctrine\\ORM\\Events' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Events.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\ConfigurationException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/ConfigurationException.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\EntityManagerClosed' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/EntityManagerClosed.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\EntityMissingAssignedId' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/EntityMissingAssignedId.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\InvalidEntityRepository' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/InvalidEntityRepository.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\InvalidHydrationMode' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/InvalidHydrationMode.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\ManagerException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/ManagerException.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\MismatchedEventManager' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/MismatchedEventManager.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\MissingIdentifierField' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/MissingIdentifierField.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\MissingMappingDriverImplementation' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/MissingMappingDriverImplementation.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\MultipleSelectorsFoundException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/MultipleSelectorsFoundException.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\NamedNativeQueryNotFound' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/NamedNativeQueryNotFound.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\NamedQueryNotFound' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/NamedQueryNotFound.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\NotSupported' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/NotSupported.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\ORMException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/ORMException.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\PersisterException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/PersisterException.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\ProxyClassesAlwaysRegenerating' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/ProxyClassesAlwaysRegenerating.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\RepositoryException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/RepositoryException.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\SchemaToolException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/SchemaToolException.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\UnexpectedAssociationValue' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/UnexpectedAssociationValue.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\UnknownEntityNamespace' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/UnknownEntityNamespace.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\UnrecognizedIdentifierFields' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/UnrecognizedIdentifierFields.php', 'MailPoetVendor\\Doctrine\\ORM\\Id\\AbstractIdGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Id/AbstractIdGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Id\\AssignedGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Id/AssignedGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Id\\BigIntegerIdentityGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Id/BigIntegerIdentityGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Id\\IdentityGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Id/IdentityGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Id\\SequenceGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Id/SequenceGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Id\\TableGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Id/TableGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Id\\UuidGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Id/UuidGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\CommitOrderCalculator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/CommitOrderCalculator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\HydrationCompleteHandler' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/HydrationCompleteHandler.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\AbstractHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\ArrayHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\HydrationException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/HydrationException.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\IterableResult' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/IterableResult.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\ObjectHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\ScalarColumnHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ScalarColumnHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\ScalarHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ScalarHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\SimpleObjectHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\SingleScalarHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\SQLResultCasing' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/SQLResultCasing.php', 'MailPoetVendor\\Doctrine\\ORM\\LazyCriteriaCollection' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/LazyCriteriaCollection.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Annotation' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Annotation.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\AnsiQuoteStrategy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\AssociationOverride' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/AssociationOverride.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\AssociationOverrides' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/AssociationOverrides.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\AttributeOverride' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/AttributeOverride.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\AttributeOverrides' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/AttributeOverrides.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Builder\\AssociationBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Builder\\ClassMetadataBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Builder\\EmbeddedBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Builder/EmbeddedBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Builder\\EntityListenerBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Builder/EntityListenerBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Builder\\FieldBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Builder\\ManyToManyAssociationBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Builder\\OneToManyAssociationBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Cache' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Cache.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\ChangeTrackingPolicy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\ClassMetadata' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadata.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\ClassMetadataFactory' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\ClassMetadataInfo' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Column' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Column.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\ColumnResult' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ColumnResult.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\CustomIdGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/CustomIdGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\DefaultEntityListenerResolver' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/DefaultEntityListenerResolver.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\DefaultNamingStrategy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\DefaultQuoteStrategy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\DiscriminatorColumn' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/DiscriminatorColumn.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\DiscriminatorMap' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/DiscriminatorMap.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Driver\\AnnotationDriver' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Driver\\AttributeDriver' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AttributeDriver.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Driver\\AttributeReader' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AttributeReader.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Driver\\DriverChain' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Driver\\PHPDriver' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Driver\\RepeatableAttributeCollection' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/RepeatableAttributeCollection.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Driver\\StaticPHPDriver' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Embeddable' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Embeddable.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Embedded' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Embedded.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Entity' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Entity.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\EntityListenerResolver' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/EntityListenerResolver.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\EntityListeners' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/EntityListeners.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\EntityResult' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/EntityResult.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Exception\\CannotGenerateIds' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Exception/CannotGenerateIds.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Exception\\InvalidCustomGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Exception/InvalidCustomGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Exception\\UnknownGeneratorType' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Exception/UnknownGeneratorType.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\FieldResult' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/FieldResult.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\GeneratedValue' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/GeneratedValue.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\HasLifecycleCallbacks' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/HasLifecycleCallbacks.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Id' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Id.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Index' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Index.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\InheritanceType' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/InheritanceType.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\InverseJoinColumn' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/InverseJoinColumn.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\JoinColumn' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/JoinColumn.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\JoinColumns' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/JoinColumns.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\JoinTable' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/JoinTable.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\ManyToMany' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ManyToMany.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\ManyToOne' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ManyToOne.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\MappedSuperclass' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/MappedSuperclass.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\MappingException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/MappingException.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\NamedNativeQueries' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/NamedNativeQueries.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\NamedNativeQuery' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/NamedNativeQuery.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\NamedQueries' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/NamedQueries.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\NamedQuery' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/NamedQuery.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\NamingStrategy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/NamingStrategy.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\OneToMany' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/OneToMany.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\OneToOne' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/OneToOne.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\OrderBy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/OrderBy.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\PostLoad' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/PostLoad.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\PostPersist' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/PostPersist.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\PostRemove' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/PostRemove.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\PostUpdate' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/PostUpdate.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\PreFlush' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/PreFlush.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\PrePersist' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/PrePersist.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\PreRemove' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/PreRemove.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\PreUpdate' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/PreUpdate.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\QuoteStrategy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/QuoteStrategy.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\ReflectionEmbeddedProperty' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ReflectionEmbeddedProperty.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Reflection\\ReflectionPropertiesGetter' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Reflection/ReflectionPropertiesGetter.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\SequenceGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/SequenceGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\SqlResultSetMapping' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/SqlResultSetMapping.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\SqlResultSetMappings' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/SqlResultSetMappings.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Table' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Table.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\UnderscoreNamingStrategy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\UniqueConstraint' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/UniqueConstraint.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Version' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Version.php', 'MailPoetVendor\\Doctrine\\ORM\\NativeQuery' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/NativeQuery.php', 'MailPoetVendor\\Doctrine\\ORM\\NoResultException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/NoResultException.php', 'MailPoetVendor\\Doctrine\\ORM\\NonUniqueResultException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/NonUniqueResultException.php', 'MailPoetVendor\\Doctrine\\ORM\\ORMException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/ORMException.php', 'MailPoetVendor\\Doctrine\\ORM\\ORMInvalidArgumentException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/ORMInvalidArgumentException.php', 'MailPoetVendor\\Doctrine\\ORM\\OptimisticLockException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/OptimisticLockException.php', 'MailPoetVendor\\Doctrine\\ORM\\PersistentCollection' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/PersistentCollection.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Collection\\AbstractCollectionPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Collection/AbstractCollectionPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Collection\\CollectionPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Collection/CollectionPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Collection\\ManyToManyPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Collection\\OneToManyPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Entity\\AbstractEntityInheritancePersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Entity\\CachedPersisterContext' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Entity\\EntityPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Entity\\JoinedSubclassPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Entity\\SingleTablePersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Exception\\CantUseInOperatorOnCompositeKeys' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Exception/CantUseInOperatorOnCompositeKeys.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Exception\\InvalidOrientation' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Exception/InvalidOrientation.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Exception\\UnrecognizedField' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Exception/UnrecognizedField.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\MatchingAssociationFieldRequiresObject' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/MatchingAssociationFieldRequiresObject.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\PersisterException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/PersisterException.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\SqlExpressionVisitor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\SqlValueVisitor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/SqlValueVisitor.php', 'MailPoetVendor\\Doctrine\\ORM\\PessimisticLockException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/PessimisticLockException.php', 'MailPoetVendor\\Doctrine\\ORM\\Proxy\\Autoloader' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Proxy/Autoloader.php', 'MailPoetVendor\\Doctrine\\ORM\\Proxy\\Proxy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Proxy/Proxy.php', 'MailPoetVendor\\Doctrine\\ORM\\Proxy\\ProxyFactory' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Proxy/ProxyFactory.php', 'MailPoetVendor\\Doctrine\\ORM\\Query' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query.php', 'MailPoetVendor\\Doctrine\\ORM\\QueryBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ASTException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ASTException.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\AggregateExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/AggregateExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ArithmeticExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ArithmeticExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ArithmeticFactor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ArithmeticFactor.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ArithmeticTerm' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ArithmeticTerm.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\BetweenExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/BetweenExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\CoalesceExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/CoalesceExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\CollectionMemberExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/CollectionMemberExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ComparisonExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ComparisonExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ConditionalExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ConditionalExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ConditionalFactor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ConditionalFactor.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ConditionalPrimary' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ConditionalPrimary.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ConditionalTerm' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ConditionalTerm.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\DeleteClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/DeleteClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\DeleteStatement' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/DeleteStatement.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\EmptyCollectionComparisonExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/EmptyCollectionComparisonExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ExistsExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ExistsExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\FromClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/FromClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\AbsFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/AbsFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\AvgFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/AvgFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\BitAndFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/BitAndFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\BitOrFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/BitOrFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\ConcatFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/ConcatFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\CountFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/CountFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\CurrentDateFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/CurrentDateFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\CurrentTimeFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimeFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\CurrentTimestampFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimestampFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\DateAddFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/DateAddFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\DateDiffFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/DateDiffFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\DateSubFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/DateSubFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\FunctionNode' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/FunctionNode.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\IdentityFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\LengthFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/LengthFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\LocateFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/LocateFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\LowerFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/LowerFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\MaxFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/MaxFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\MinFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/MinFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\ModFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/ModFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\SizeFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\SqrtFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/SqrtFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\SubstringFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/SubstringFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\SumFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/SumFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\TrimFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/TrimFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\UpperFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/UpperFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\GeneralCaseExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/GeneralCaseExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\GroupByClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/GroupByClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\HavingClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/HavingClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\IdentificationVariableDeclaration' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/IdentificationVariableDeclaration.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\InExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/InExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\IndexBy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/IndexBy.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\InputParameter' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/InputParameter.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\InstanceOfExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/InstanceOfExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Join' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Join.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\JoinAssociationDeclaration' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/JoinAssociationDeclaration.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\JoinAssociationPathExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/JoinAssociationPathExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\JoinClassPathExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/JoinClassPathExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\JoinVariableDeclaration' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/JoinVariableDeclaration.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\LikeExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/LikeExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Literal' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Literal.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\NewObjectExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/NewObjectExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Node' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Node.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\NullComparisonExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/NullComparisonExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\NullIfExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/NullIfExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\OrderByClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/OrderByClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\OrderByItem' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/OrderByItem.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ParenthesisExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ParenthesisExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\PartialObjectExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/PartialObjectExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\PathExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/PathExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\QuantifiedExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/QuantifiedExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\RangeVariableDeclaration' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/RangeVariableDeclaration.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SelectClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SelectClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SelectExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SelectExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SelectStatement' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SelectStatement.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SimpleArithmeticExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SimpleArithmeticExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SimpleCaseExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SimpleCaseExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SimpleSelectClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SimpleSelectClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SimpleSelectExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SimpleSelectExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SimpleWhenClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SimpleWhenClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Subselect' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Subselect.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SubselectFromClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SubselectFromClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SubselectIdentificationVariableDeclaration' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SubselectIdentificationVariableDeclaration.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\TypedExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/TypedExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\UpdateClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/UpdateClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\UpdateItem' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/UpdateItem.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\UpdateStatement' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/UpdateStatement.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\WhenClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/WhenClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\WhereClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/WhereClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Exec\\AbstractSqlExecutor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Exec/AbstractSqlExecutor.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Exec\\MultiTableDeleteExecutor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Exec\\MultiTableUpdateExecutor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Exec\\SingleSelectExecutor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Exec\\SingleTableDeleteUpdateExecutor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Exec/SingleTableDeleteUpdateExecutor.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Andx' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Andx.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Base' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Base.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Comparison' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Comparison.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Composite' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Composite.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\From' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/From.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Func' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Func.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\GroupBy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/GroupBy.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Join' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Join.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Literal' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Literal.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Math' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Math.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\OrderBy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/OrderBy.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Orx' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Orx.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Select' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Select.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\FilterCollection' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/FilterCollection.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Filter\\FilterException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Filter/FilterException.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Filter\\SQLFilter' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Filter/SQLFilter.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Lexer' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Lexer.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Parameter' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Parameter.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\ParameterTypeInferer' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/ParameterTypeInferer.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Parser' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\ParserResult' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/ParserResult.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Printer' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Printer.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\QueryException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\QueryExpressionVisitor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\ResultSetMapping' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/ResultSetMapping.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\ResultSetMappingBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\SqlWalker' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/SqlWalker.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\TreeWalker' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/TreeWalker.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\TreeWalkerAdapter' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/TreeWalkerAdapter.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\TreeWalkerChain' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/TreeWalkerChain.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\TreeWalkerChainIterator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/TreeWalkerChainIterator.php', 'MailPoetVendor\\Doctrine\\ORM\\Repository\\DefaultRepositoryFactory' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php', 'MailPoetVendor\\Doctrine\\ORM\\Repository\\Exception\\InvalidFindByCall' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Repository/Exception/InvalidFindByCall.php', 'MailPoetVendor\\Doctrine\\ORM\\Repository\\Exception\\InvalidMagicMethodCall' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Repository/Exception/InvalidMagicMethodCall.php', 'MailPoetVendor\\Doctrine\\ORM\\Repository\\RepositoryFactory' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Repository/RepositoryFactory.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Exception\\MissingColumnException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Exception/MissingColumnException.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Exception\\NotSupported' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Exception/NotSupported.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Pagination\\CountOutputWalker' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Pagination\\CountWalker' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Pagination\\Exception\\RowNumberOverFunctionNotEnabled' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/Exception/RowNumberOverFunctionNotEnabled.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Pagination\\LimitSubqueryOutputWalker' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Pagination\\LimitSubqueryWalker' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Pagination\\Paginator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/Paginator.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Pagination\\RowNumberOverFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/RowNumberOverFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Pagination\\WhereInWalker' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php', 'MailPoetVendor\\Doctrine\\ORM\\TransactionRequiredException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/TransactionRequiredException.php', 'MailPoetVendor\\Doctrine\\ORM\\UnexpectedResultException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/UnexpectedResultException.php', 'MailPoetVendor\\Doctrine\\ORM\\UnitOfWork' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php', 'MailPoetVendor\\Doctrine\\ORM\\Utility\\HierarchyDiscriminatorResolver' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Utility/HierarchyDiscriminatorResolver.php', 'MailPoetVendor\\Doctrine\\ORM\\Utility\\IdentifierFlattener' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Utility/IdentifierFlattener.php', 'MailPoetVendor\\Doctrine\\ORM\\Utility\\PersisterHelper' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Utility/PersisterHelper.php', 'MailPoetVendor\\Doctrine\\ORM\\Version' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Version.php', 'MailPoetVendor\\Doctrine\\Persistence\\AbstractManagerRegistry' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/AbstractManagerRegistry.php', 'MailPoetVendor\\Doctrine\\Persistence\\ConnectionRegistry' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/ConnectionRegistry.php', 'MailPoetVendor\\Doctrine\\Persistence\\Event\\LifecycleEventArgs' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Event/LifecycleEventArgs.php', 'MailPoetVendor\\Doctrine\\Persistence\\Event\\LoadClassMetadataEventArgs' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Event/LoadClassMetadataEventArgs.php', 'MailPoetVendor\\Doctrine\\Persistence\\Event\\ManagerEventArgs' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Event/ManagerEventArgs.php', 'MailPoetVendor\\Doctrine\\Persistence\\Event\\OnClearEventArgs' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Event/OnClearEventArgs.php', 'MailPoetVendor\\Doctrine\\Persistence\\Event\\PreUpdateEventArgs' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Event/PreUpdateEventArgs.php', 'MailPoetVendor\\Doctrine\\Persistence\\ManagerRegistry' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/ManagerRegistry.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\AbstractClassMetadataFactory' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/AbstractClassMetadataFactory.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\ClassMetadata' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/ClassMetadata.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\ClassMetadataFactory' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/ClassMetadataFactory.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\AnnotationDriver' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/AnnotationDriver.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\DefaultFileLocator' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/DefaultFileLocator.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\FileDriver' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/FileDriver.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\FileLocator' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/FileLocator.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\MappingDriver' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/MappingDriver.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\MappingDriverChain' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/MappingDriverChain.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\PHPDriver' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/PHPDriver.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\StaticPHPDriver' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/StaticPHPDriver.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\SymfonyFileLocator' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/SymfonyFileLocator.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\MappingException' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/MappingException.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\ProxyClassNameResolver' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/ProxyClassNameResolver.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\ReflectionService' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/ReflectionService.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\RuntimeReflectionService' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/RuntimeReflectionService.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\StaticReflectionService' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/StaticReflectionService.php', 'MailPoetVendor\\Doctrine\\Persistence\\NotifyPropertyChanged' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/NotifyPropertyChanged.php', 'MailPoetVendor\\Doctrine\\Persistence\\ObjectManager' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/ObjectManager.php', 'MailPoetVendor\\Doctrine\\Persistence\\ObjectManagerAware' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/ObjectManagerAware.php', 'MailPoetVendor\\Doctrine\\Persistence\\ObjectManagerDecorator' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/ObjectManagerDecorator.php', 'MailPoetVendor\\Doctrine\\Persistence\\ObjectRepository' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/ObjectRepository.php', 'MailPoetVendor\\Doctrine\\Persistence\\PropertyChangedListener' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/PropertyChangedListener.php', 'MailPoetVendor\\Doctrine\\Persistence\\Proxy' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Proxy.php', 'MailPoetVendor\\Doctrine\\Persistence\\Reflection\\RuntimePublicReflectionProperty' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Reflection/RuntimePublicReflectionProperty.php', 'MailPoetVendor\\Doctrine\\Persistence\\Reflection\\TypedNoDefaultReflectionProperty' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Reflection/TypedNoDefaultReflectionProperty.php', 'MailPoetVendor\\Doctrine\\Persistence\\Reflection\\TypedNoDefaultReflectionPropertyBase' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Reflection/TypedNoDefaultReflectionPropertyBase.php', 'MailPoetVendor\\Doctrine\\Persistence\\Reflection\\TypedNoDefaultRuntimePublicReflectionProperty' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Reflection/TypedNoDefaultRuntimePublicReflectionProperty.php', 'MailPoetVendor\\Egulias\\EmailValidator\\EmailLexer' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/EmailLexer.php', 'MailPoetVendor\\Egulias\\EmailValidator\\EmailParser' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/EmailParser.php', 'MailPoetVendor\\Egulias\\EmailValidator\\EmailValidator' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/EmailValidator.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\AtextAfterCFWS' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/AtextAfterCFWS.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\CRLFAtTheEnd' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/CRLFAtTheEnd.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\CRLFX2' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/CRLFX2.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\CRNoLF' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/CRNoLF.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\CharNotAllowed' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/CharNotAllowed.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\CommaInDomain' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/CommaInDomain.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\ConsecutiveAt' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/ConsecutiveAt.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\ConsecutiveDot' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/ConsecutiveDot.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\DomainAcceptsNoMail' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/DomainAcceptsNoMail.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\DomainHyphened' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/DomainHyphened.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\DotAtEnd' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/DotAtEnd.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\DotAtStart' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/DotAtStart.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\ExpectingAT' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/ExpectingAT.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\ExpectingATEXT' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/ExpectingATEXT.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\ExpectingCTEXT' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/ExpectingCTEXT.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\ExpectingDTEXT' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/ExpectingDTEXT.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\ExpectingDomainLiteralClose' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/ExpectingDomainLiteralClose.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\ExpectingQPair' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/ExpectingQPair.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\InvalidEmail' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/InvalidEmail.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\LocalOrReservedDomain' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/LocalOrReservedDomain.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\NoDNSRecord' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/NoDNSRecord.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\NoDomainPart' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/NoDomainPart.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\NoLocalPart' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/NoLocalPart.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\UnclosedComment' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/UnclosedComment.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\UnclosedQuotedString' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/UnclosedQuotedString.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\UnopenedComment' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/UnopenedComment.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Parser\\DomainPart' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Parser/DomainPart.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Parser\\LocalPart' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Parser/LocalPart.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Parser\\Parser' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Parser/Parser.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\DNSCheckValidation' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/DNSCheckValidation.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\EmailValidation' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/EmailValidation.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\Error\\RFCWarnings' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/Error/RFCWarnings.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\Error\\SpoofEmail' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/Error/SpoofEmail.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\Exception\\EmptyValidationList' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/Exception/EmptyValidationList.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\MultipleErrors' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/MultipleErrors.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\MultipleValidationWithAnd' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\NoRFCWarningsValidation' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\RFCValidation' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/RFCValidation.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\SpoofCheckValidation' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/SpoofCheckValidation.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\AddressLiteral' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/AddressLiteral.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\CFWSNearAt' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/CFWSNearAt.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\CFWSWithFWS' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/CFWSWithFWS.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\Comment' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/Comment.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\DeprecatedComment' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/DeprecatedComment.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\DomainLiteral' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/DomainLiteral.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\DomainTooLong' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/DomainTooLong.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\EmailTooLong' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/EmailTooLong.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\IPV6BadChar' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/IPV6BadChar.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\IPV6ColonEnd' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/IPV6ColonEnd.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\IPV6ColonStart' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/IPV6ColonStart.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\IPV6Deprecated' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/IPV6Deprecated.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\IPV6DoubleColon' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/IPV6DoubleColon.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\IPV6GroupCount' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/IPV6GroupCount.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\IPV6MaxGroups' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/IPV6MaxGroups.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\LabelTooLong' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/LabelTooLong.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\LocalTooLong' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/LocalTooLong.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\NoDNSMXRecord' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/NoDNSMXRecord.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\ObsoleteDTEXT' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/ObsoleteDTEXT.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\QuotedPart' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/QuotedPart.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\QuotedString' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/QuotedString.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\TLD' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/TLD.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\Warning' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/Warning.php', 'MailPoetVendor\\Gregwar\\Captcha\\CaptchaBuilder' => $baseDir . '/vendor-prefixed/gregwar/captcha/src/Gregwar/Captcha/CaptchaBuilder.php', 'MailPoetVendor\\Gregwar\\Captcha\\CaptchaBuilderInterface' => $baseDir . '/vendor-prefixed/gregwar/captcha/src/Gregwar/Captcha/CaptchaBuilderInterface.php', 'MailPoetVendor\\Gregwar\\Captcha\\ImageFileHandler' => $baseDir . '/vendor-prefixed/gregwar/captcha/src/Gregwar/Captcha/ImageFileHandler.php', 'MailPoetVendor\\Gregwar\\Captcha\\PhraseBuilder' => $baseDir . '/vendor-prefixed/gregwar/captcha/src/Gregwar/Captcha/PhraseBuilder.php', 'MailPoetVendor\\Gregwar\\Captcha\\PhraseBuilderInterface' => $baseDir . '/vendor-prefixed/gregwar/captcha/src/Gregwar/Captcha/PhraseBuilderInterface.php', 'MailPoetVendor\\Idiorm\\IdiormMethodMissingException' => $baseDir . '/lib-3rd-party/Idiorm/idiorm.php', 'MailPoetVendor\\Idiorm\\IdiormResultSet' => $baseDir . '/lib-3rd-party/Idiorm/idiorm.php', 'MailPoetVendor\\Idiorm\\IdiormString' => $baseDir . '/lib-3rd-party/Idiorm/idiorm.php', 'MailPoetVendor\\Idiorm\\IdiormStringException' => $baseDir . '/lib-3rd-party/Idiorm/idiorm.php', 'MailPoetVendor\\Idiorm\\ORM' => $baseDir . '/lib-3rd-party/Idiorm/idiorm.php', 'MailPoetVendor\\Monolog\\ErrorHandler' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/ErrorHandler.php', 'MailPoetVendor\\Monolog\\Formatter\\FormatterInterface' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php', 'MailPoetVendor\\Monolog\\Formatter\\LineFormatter' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Formatter/LineFormatter.php', 'MailPoetVendor\\Monolog\\Formatter\\NormalizerFormatter' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php', 'MailPoetVendor\\Monolog\\Handler\\AbstractHandler' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Handler/AbstractHandler.php', 'MailPoetVendor\\Monolog\\Handler\\AbstractProcessingHandler' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php', 'MailPoetVendor\\Monolog\\Handler\\HandlerInterface' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Handler/HandlerInterface.php', 'MailPoetVendor\\Monolog\\Logger' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Logger.php', 'MailPoetVendor\\Monolog\\Processor\\IntrospectionProcessor' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php', 'MailPoetVendor\\Monolog\\Processor\\MemoryProcessor' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php', 'MailPoetVendor\\Monolog\\Processor\\MemoryUsageProcessor' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php', 'MailPoetVendor\\Monolog\\Processor\\ProcessorInterface' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php', 'MailPoetVendor\\Monolog\\Processor\\WebProcessor' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Processor/WebProcessor.php', 'MailPoetVendor\\Monolog\\Registry' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Registry.php', 'MailPoetVendor\\Monolog\\ResettableInterface' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/ResettableInterface.php', 'MailPoetVendor\\Monolog\\SignalHandler' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/SignalHandler.php', 'MailPoetVendor\\Monolog\\Utils' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Utils.php', 'MailPoetVendor\\Normalizer' => $baseDir . '/vendor-prefixed/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', 'MailPoetVendor\\Paris\\Model' => $baseDir . '/lib-3rd-party/Paris/paris.php', 'MailPoetVendor\\Paris\\ORMWrapper' => $baseDir . '/lib-3rd-party/Paris/paris.php', 'MailPoetVendor\\Paris\\ParisMethodMissingException' => $baseDir . '/lib-3rd-party/Paris/paris.php', 'MailPoetVendor\\Psr\\Cache\\CacheException' => $baseDir . '/vendor-prefixed/psr/cache/src/CacheException.php', 'MailPoetVendor\\Psr\\Cache\\CacheItemInterface' => $baseDir . '/vendor-prefixed/psr/cache/src/CacheItemInterface.php', 'MailPoetVendor\\Psr\\Cache\\CacheItemPoolInterface' => $baseDir . '/vendor-prefixed/psr/cache/src/CacheItemPoolInterface.php', 'MailPoetVendor\\Psr\\Cache\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/psr/cache/src/InvalidArgumentException.php', 'MailPoetVendor\\Psr\\Container\\ContainerExceptionInterface' => $baseDir . '/vendor-prefixed/psr/container/src/ContainerExceptionInterface.php', 'MailPoetVendor\\Psr\\Container\\ContainerInterface' => $baseDir . '/vendor-prefixed/psr/container/src/ContainerInterface.php', 'MailPoetVendor\\Psr\\Container\\NotFoundExceptionInterface' => $baseDir . '/vendor-prefixed/psr/container/src/NotFoundExceptionInterface.php', 'MailPoetVendor\\Psr\\Log\\AbstractLogger' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/AbstractLogger.php', 'MailPoetVendor\\Psr\\Log\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/InvalidArgumentException.php', 'MailPoetVendor\\Psr\\Log\\LogLevel' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/LogLevel.php', 'MailPoetVendor\\Psr\\Log\\LoggerAwareInterface' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/LoggerAwareInterface.php', 'MailPoetVendor\\Psr\\Log\\LoggerAwareTrait' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/LoggerAwareTrait.php', 'MailPoetVendor\\Psr\\Log\\LoggerInterface' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/LoggerInterface.php', 'MailPoetVendor\\Psr\\Log\\LoggerTrait' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/LoggerTrait.php', 'MailPoetVendor\\Psr\\Log\\NullLogger' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/NullLogger.php', 'MailPoetVendor\\Psr\\Log\\Test\\DummyTest' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/Test/DummyTest.php', 'MailPoetVendor\\Psr\\Log\\Test\\LoggerInterfaceTest' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', 'MailPoetVendor\\Psr\\Log\\Test\\TestLogger' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/Test/TestLogger.php', 'MailPoetVendor\\Sabberworm\\CSS\\CSSList\\AtRuleBlockList' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/CSSList/AtRuleBlockList.php', 'MailPoetVendor\\Sabberworm\\CSS\\CSSList\\CSSBlockList' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/CSSList/CSSBlockList.php', 'MailPoetVendor\\Sabberworm\\CSS\\CSSList\\CSSList' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/CSSList/CSSList.php', 'MailPoetVendor\\Sabberworm\\CSS\\CSSList\\Document' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/CSSList/Document.php', 'MailPoetVendor\\Sabberworm\\CSS\\CSSList\\KeyFrame' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/CSSList/KeyFrame.php', 'MailPoetVendor\\Sabberworm\\CSS\\Comment\\Comment' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Comment/Comment.php', 'MailPoetVendor\\Sabberworm\\CSS\\Comment\\Commentable' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Comment/Commentable.php', 'MailPoetVendor\\Sabberworm\\CSS\\OutputFormat' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/OutputFormat.php', 'MailPoetVendor\\Sabberworm\\CSS\\OutputFormatter' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/OutputFormat.php', 'MailPoetVendor\\Sabberworm\\CSS\\Parser' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parser.php', 'MailPoetVendor\\Sabberworm\\CSS\\Parsing\\OutputException' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parsing/OutputException.php', 'MailPoetVendor\\Sabberworm\\CSS\\Parsing\\ParserState' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parsing/ParserState.php', 'MailPoetVendor\\Sabberworm\\CSS\\Parsing\\SourceException' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parsing/SourceException.php', 'MailPoetVendor\\Sabberworm\\CSS\\Parsing\\UnexpectedTokenException' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parsing/UnexpectedTokenException.php', 'MailPoetVendor\\Sabberworm\\CSS\\Property\\AtRule' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Property/AtRule.php', 'MailPoetVendor\\Sabberworm\\CSS\\Property\\CSSNamespace' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Property/CSSNamespace.php', 'MailPoetVendor\\Sabberworm\\CSS\\Property\\Charset' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Property/Charset.php', 'MailPoetVendor\\Sabberworm\\CSS\\Property\\Import' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Property/Import.php', 'MailPoetVendor\\Sabberworm\\CSS\\Property\\Selector' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Property/Selector.php', 'MailPoetVendor\\Sabberworm\\CSS\\Renderable' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Renderable.php', 'MailPoetVendor\\Sabberworm\\CSS\\RuleSet\\AtRuleSet' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/RuleSet/AtRuleSet.php', 'MailPoetVendor\\Sabberworm\\CSS\\RuleSet\\DeclarationBlock' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/RuleSet/DeclarationBlock.php', 'MailPoetVendor\\Sabberworm\\CSS\\RuleSet\\RuleSet' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/RuleSet/RuleSet.php', 'MailPoetVendor\\Sabberworm\\CSS\\Rule\\Rule' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Rule/Rule.php', 'MailPoetVendor\\Sabberworm\\CSS\\Settings' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Settings.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\CSSFunction' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/CSSFunction.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\CSSString' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/CSSString.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\CalcFunction' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/CalcFunction.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\CalcRuleValueList' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/CalcRuleValueList.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\Color' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/Color.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\LineName' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/LineName.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\PrimitiveValue' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/PrimitiveValue.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\RuleValueList' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/RuleValueList.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\Size' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/Size.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\URL' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/URL.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\Value' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/Value.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\ValueList' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/ValueList.php', 'MailPoetVendor\\Stringable' => $baseDir . '/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/Stringable.php', 'MailPoetVendor\\Sudzy\\Engine' => $baseDir . '/lib-3rd-party/Sudzy/Engine.php', 'MailPoetVendor\\Sudzy\\ValidModel' => $baseDir . '/lib-3rd-party/Sudzy/ValidModel.php', 'MailPoetVendor\\Sudzy\\ValidationException' => $baseDir . '/lib-3rd-party/Sudzy/ValidationException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Alias' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Alias.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\ArgumentInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/ArgumentInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\BoundArgument' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/BoundArgument.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\IteratorArgument' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/IteratorArgument.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\ReferenceSetArgumentTrait' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/ReferenceSetArgumentTrait.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\RewindableGenerator' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/RewindableGenerator.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\ServiceClosureArgument' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/ServiceClosureArgument.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\ServiceLocator' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/ServiceLocator.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\ServiceLocatorArgument' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/ServiceLocatorArgument.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\TaggedIteratorArgument' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/TaggedIteratorArgument.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ChildDefinition' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ChildDefinition.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Container' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Container.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ContainerAwareInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ContainerAwareInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ContainerAwareTrait' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ContainerAwareTrait.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ContainerBuilder' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ContainerBuilder.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ContainerInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ContainerInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Definition' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Definition.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\EnvVarLoaderInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/EnvVarLoaderInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\EnvVarProcessor' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/EnvVarProcessor.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\EnvVarProcessorInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/EnvVarProcessorInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\AutowiringFailedException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/AutowiringFailedException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\BadMethodCallException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/BadMethodCallException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\EnvNotFoundException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/EnvNotFoundException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\EnvParameterException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/EnvParameterException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\ExceptionInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/ExceptionInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/InvalidArgumentException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\InvalidParameterTypeException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/InvalidParameterTypeException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\LogicException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/LogicException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\OutOfBoundsException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/OutOfBoundsException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\ParameterCircularReferenceException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/ParameterNotFoundException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\RuntimeException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/RuntimeException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\ServiceCircularReferenceException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\ServiceNotFoundException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/ServiceNotFoundException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ExpressionLanguage' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ExpressionLanguage.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ExpressionLanguageProvider' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ExpressionLanguageProvider.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Parameter' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Parameter.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\ContainerBag' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ParameterBag/ContainerBag.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\ContainerBagInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ParameterBag/ContainerBagInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\EnvPlaceholderParameterBag' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\FrozenParameterBag' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBag' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ParameterBag/ParameterBag.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBagInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Reference' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Reference.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ResettableContainerInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ResettableContainerInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ReverseContainer' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ReverseContainer.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ServiceLocator' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ServiceLocator.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ServiceSubscriberInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ServiceSubscriberInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\TaggedContainerInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/TaggedContainerInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\TypedReference' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/TypedReference.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Variable' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Variable.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Comparator\\Comparator' => $baseDir . '/vendor-prefixed/symfony/finder/Comparator/Comparator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Comparator\\DateComparator' => $baseDir . '/vendor-prefixed/symfony/finder/Comparator/DateComparator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Comparator\\NumberComparator' => $baseDir . '/vendor-prefixed/symfony/finder/Comparator/NumberComparator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => $baseDir . '/vendor-prefixed/symfony/finder/Exception/AccessDeniedException.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Exception\\DirectoryNotFoundException' => $baseDir . '/vendor-prefixed/symfony/finder/Exception/DirectoryNotFoundException.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Finder' => $baseDir . '/vendor-prefixed/symfony/finder/Finder.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Gitignore' => $baseDir . '/vendor-prefixed/symfony/finder/Gitignore.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Glob' => $baseDir . '/vendor-prefixed/symfony/finder/Glob.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/CustomFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/DateRangeFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\DepthRangeFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/DepthRangeFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\ExcludeDirectoryFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/FileTypeFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/FilecontentFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/FilenameFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\LazyIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/LazyIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/MultiplePcreFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/PathFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/RecursiveDirectoryIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/SizeRangeFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\SortableIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/SortableIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\SplFileInfo' => $baseDir . '/vendor-prefixed/symfony/finder/SplFileInfo.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\DataCollectorTranslator' => $baseDir . '/vendor-prefixed/symfony/translation/DataCollectorTranslator.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Exception\\ExceptionInterface' => $baseDir . '/vendor-prefixed/symfony/translation/Exception/ExceptionInterface.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Exception\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/symfony/translation/Exception/InvalidArgumentException.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Exception\\InvalidResourceException' => $baseDir . '/vendor-prefixed/symfony/translation/Exception/InvalidResourceException.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Exception\\LogicException' => $baseDir . '/vendor-prefixed/symfony/translation/Exception/LogicException.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Exception\\NotFoundResourceException' => $baseDir . '/vendor-prefixed/symfony/translation/Exception/NotFoundResourceException.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Exception\\RuntimeException' => $baseDir . '/vendor-prefixed/symfony/translation/Exception/RuntimeException.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\IdentityTranslator' => $baseDir . '/vendor-prefixed/symfony/translation/IdentityTranslator.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Interval' => $baseDir . '/vendor-prefixed/symfony/translation/Interval.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\LoggingTranslator' => $baseDir . '/vendor-prefixed/symfony/translation/LoggingTranslator.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\MessageCatalogue' => $baseDir . '/vendor-prefixed/symfony/translation/MessageCatalogue.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\MessageCatalogueInterface' => $baseDir . '/vendor-prefixed/symfony/translation/MessageCatalogueInterface.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\MessageSelector' => $baseDir . '/vendor-prefixed/symfony/translation/MessageSelector.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\MetadataAwareInterface' => $baseDir . '/vendor-prefixed/symfony/translation/MetadataAwareInterface.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\PluralizationRules' => $baseDir . '/vendor-prefixed/symfony/translation/PluralizationRules.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Translator' => $baseDir . '/vendor-prefixed/symfony/translation/Translator.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\TranslatorBagInterface' => $baseDir . '/vendor-prefixed/symfony/translation/TranslatorBagInterface.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\TranslatorInterface' => $baseDir . '/vendor-prefixed/symfony/translation/TranslatorInterface.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Util\\ArrayConverter' => $baseDir . '/vendor-prefixed/symfony/translation/Util/ArrayConverter.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Util\\XliffUtils' => $baseDir . '/vendor-prefixed/symfony/translation/Util/XliffUtils.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraint' => $baseDir . '/vendor-prefixed/symfony/validator/Constraint.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ConstraintValidator' => $baseDir . '/vendor-prefixed/symfony/validator/ConstraintValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ConstraintValidatorFactory' => $baseDir . '/vendor-prefixed/symfony/validator/ConstraintValidatorFactory.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ConstraintValidatorFactoryInterface' => $baseDir . '/vendor-prefixed/symfony/validator/ConstraintValidatorFactoryInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ConstraintValidatorInterface' => $baseDir . '/vendor-prefixed/symfony/validator/ConstraintValidatorInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ConstraintViolation' => $baseDir . '/vendor-prefixed/symfony/validator/ConstraintViolation.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ConstraintViolationInterface' => $baseDir . '/vendor-prefixed/symfony/validator/ConstraintViolationInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ConstraintViolationList' => $baseDir . '/vendor-prefixed/symfony/validator/ConstraintViolationList.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ConstraintViolationListInterface' => $baseDir . '/vendor-prefixed/symfony/validator/ConstraintViolationListInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\AbstractComparison' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/AbstractComparison.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\AbstractComparisonValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/AbstractComparisonValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\All' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/All.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\AllValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/AllValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Bic' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Bic.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\BicValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/BicValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Blank' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Blank.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\BlankValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/BlankValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Callback' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Callback.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\CallbackValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/CallbackValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\CardScheme' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/CardScheme.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\CardSchemeValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/CardSchemeValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Choice' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Choice.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\ChoiceValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/ChoiceValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Collection' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Collection.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\CollectionValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/CollectionValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Composite' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Composite.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Count' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Count.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\CountValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/CountValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Country' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Country.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\CountryValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/CountryValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Currency' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Currency.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\CurrencyValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/CurrencyValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Date' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Date.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\DateTime' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/DateTime.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\DateTimeValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/DateTimeValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\DateValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/DateValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\DisableAutoMapping' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/DisableAutoMapping.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\DivisibleBy' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/DivisibleBy.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\DivisibleByValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/DivisibleByValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Email' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Email.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\EmailValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/EmailValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\EnableAutoMapping' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/EnableAutoMapping.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\EqualTo' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/EqualTo.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\EqualToValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/EqualToValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Existence' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Existence.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Expression' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Expression.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\ExpressionValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/ExpressionValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\File' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/File.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\FileValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/FileValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\GreaterThan' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/GreaterThan.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\GreaterThanOrEqual' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/GreaterThanOrEqual.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\GreaterThanOrEqualValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/GreaterThanOrEqualValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\GreaterThanValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/GreaterThanValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\GroupSequence' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/GroupSequence.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\GroupSequenceProvider' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/GroupSequenceProvider.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Iban' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Iban.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IbanValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IbanValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IdenticalTo' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IdenticalTo.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IdenticalToValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IdenticalToValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Image' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Image.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\ImageValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/ImageValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Ip' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Ip.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IpValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IpValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IsFalse' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IsFalse.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IsFalseValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IsFalseValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IsNull' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IsNull.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IsNullValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IsNullValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IsTrue' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IsTrue.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IsTrueValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IsTrueValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Isbn' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Isbn.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IsbnValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IsbnValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Issn' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Issn.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IssnValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IssnValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Json' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Json.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\JsonValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/JsonValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Language' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Language.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\LanguageValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/LanguageValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Length' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Length.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\LengthValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/LengthValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\LessThan' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/LessThan.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\LessThanOrEqual' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/LessThanOrEqual.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\LessThanOrEqualValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/LessThanOrEqualValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\LessThanValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/LessThanValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Locale' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Locale.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\LocaleValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/LocaleValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Luhn' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Luhn.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\LuhnValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/LuhnValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Negative' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Negative.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NegativeOrZero' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NegativeOrZero.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotBlank' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotBlank.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotBlankValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotBlankValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotCompromisedPassword' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotCompromisedPassword.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotCompromisedPasswordValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotCompromisedPasswordValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotEqualTo' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotEqualTo.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotEqualToValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotEqualToValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotIdenticalTo' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotIdenticalTo.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotIdenticalToValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotIdenticalToValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotNull' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotNull.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotNullValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotNullValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NumberConstraintTrait' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NumberConstraintTrait.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Optional' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Optional.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Positive' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Positive.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\PositiveOrZero' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/PositiveOrZero.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Range' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Range.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\RangeValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/RangeValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Regex' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Regex.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\RegexValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/RegexValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Required' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Required.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Time' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Time.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\TimeValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/TimeValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Timezone' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Timezone.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\TimezoneValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/TimezoneValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Traverse' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Traverse.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Type' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Type.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\TypeValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/TypeValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Unique' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Unique.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\UniqueValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/UniqueValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Url' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Url.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\UrlValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/UrlValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Uuid' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Uuid.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\UuidValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/UuidValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Valid' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Valid.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\ValidValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/ValidValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ContainerConstraintValidatorFactory' => $baseDir . '/vendor-prefixed/symfony/validator/ContainerConstraintValidatorFactory.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Context\\ExecutionContext' => $baseDir . '/vendor-prefixed/symfony/validator/Context/ExecutionContext.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Context\\ExecutionContextFactory' => $baseDir . '/vendor-prefixed/symfony/validator/Context/ExecutionContextFactory.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Context\\ExecutionContextFactoryInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Context/ExecutionContextFactoryInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Context\\ExecutionContextInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Context/ExecutionContextInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\BadMethodCallException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/BadMethodCallException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\ConstraintDefinitionException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/ConstraintDefinitionException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\ExceptionInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/ExceptionInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\GroupDefinitionException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/GroupDefinitionException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/InvalidArgumentException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\InvalidOptionsException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/InvalidOptionsException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\LogicException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/LogicException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\MappingException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/MappingException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\MissingOptionsException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/MissingOptionsException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\NoSuchMetadataException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/NoSuchMetadataException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\OutOfBoundsException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/OutOfBoundsException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\RuntimeException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/RuntimeException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\UnexpectedTypeException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/UnexpectedTypeException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\UnexpectedValueException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/UnexpectedValueException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\UnsupportedMetadataException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/UnsupportedMetadataException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\ValidatorException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/ValidatorException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\GroupSequenceProviderInterface' => $baseDir . '/vendor-prefixed/symfony/validator/GroupSequenceProviderInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\AutoMappingStrategy' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/AutoMappingStrategy.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Cache\\CacheInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Cache/CacheInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Cache\\DoctrineCache' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Cache/DoctrineCache.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Cache\\Psr6Cache' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Cache/Psr6Cache.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\CascadingStrategy' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/CascadingStrategy.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\ClassMetadata' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/ClassMetadata.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\ClassMetadataInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/ClassMetadataInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Factory\\BlackHoleMetadataFactory' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Factory/BlackHoleMetadataFactory.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Factory\\LazyLoadingMetadataFactory' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Factory/LazyLoadingMetadataFactory.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Factory\\MetadataFactoryInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Factory/MetadataFactoryInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\GenericMetadata' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/GenericMetadata.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\GetterMetadata' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/GetterMetadata.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\AbstractLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/AbstractLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\AnnotationLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/AnnotationLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\AutoMappingTrait' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/AutoMappingTrait.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\FileLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/FileLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\FilesLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/FilesLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\LoaderChain' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/LoaderChain.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\LoaderInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/LoaderInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\PropertyInfoLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/PropertyInfoLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\StaticMethodLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/StaticMethodLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\XmlFileLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/XmlFileLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\XmlFilesLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/XmlFilesLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\YamlFileLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/YamlFileLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\YamlFilesLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/YamlFilesLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\MemberMetadata' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/MemberMetadata.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\MetadataInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/MetadataInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\PropertyMetadata' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/PropertyMetadata.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\PropertyMetadataInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/PropertyMetadataInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\TraversalStrategy' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/TraversalStrategy.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ObjectInitializerInterface' => $baseDir . '/vendor-prefixed/symfony/validator/ObjectInitializerInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Util\\LegacyTranslatorProxy' => $baseDir . '/vendor-prefixed/symfony/validator/Util/LegacyTranslatorProxy.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Util\\PropertyPath' => $baseDir . '/vendor-prefixed/symfony/validator/Util/PropertyPath.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Validation' => $baseDir . '/vendor-prefixed/symfony/validator/Validation.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ValidatorBuilder' => $baseDir . '/vendor-prefixed/symfony/validator/ValidatorBuilder.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ValidatorBuilderInterface' => $baseDir . '/vendor-prefixed/symfony/validator/ValidatorBuilderInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Validator\\ContextualValidatorInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Validator/ContextualValidatorInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Validator\\LazyProperty' => $baseDir . '/vendor-prefixed/symfony/validator/Validator/LazyProperty.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Validator\\RecursiveContextualValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Validator/RecursiveContextualValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Validator\\RecursiveValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Validator/RecursiveValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Validator\\TraceableValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Validator/TraceableValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Validator\\ValidatorInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Validator/ValidatorInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Violation\\ConstraintViolationBuilder' => $baseDir . '/vendor-prefixed/symfony/validator/Violation/ConstraintViolationBuilder.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Violation\\ConstraintViolationBuilderInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Violation/ConstraintViolationBuilderInterface.php', 'MailPoetVendor\\Symfony\\Contracts\\Service\\ResetInterface' => $baseDir . '/vendor-prefixed/symfony/service-contracts/ResetInterface.php', 'MailPoetVendor\\Symfony\\Contracts\\Service\\ServiceLocatorTrait' => $baseDir . '/vendor-prefixed/symfony/service-contracts/ServiceLocatorTrait.php', 'MailPoetVendor\\Symfony\\Contracts\\Service\\ServiceProviderInterface' => $baseDir . '/vendor-prefixed/symfony/service-contracts/ServiceProviderInterface.php', 'MailPoetVendor\\Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => $baseDir . '/vendor-prefixed/symfony/service-contracts/ServiceSubscriberInterface.php', 'MailPoetVendor\\Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => $baseDir . '/vendor-prefixed/symfony/service-contracts/ServiceSubscriberTrait.php', 'MailPoetVendor\\Symfony\\Contracts\\Service\\Test\\ServiceLocatorTest' => $baseDir . '/vendor-prefixed/symfony/service-contracts/Test/ServiceLocatorTest.php', 'MailPoetVendor\\Symfony\\Contracts\\Translation\\LocaleAwareInterface' => $baseDir . '/vendor-prefixed/symfony/translation-contracts/LocaleAwareInterface.php', 'MailPoetVendor\\Symfony\\Contracts\\Translation\\Test\\TranslatorTest' => $baseDir . '/vendor-prefixed/symfony/translation-contracts/Test/TranslatorTest.php', 'MailPoetVendor\\Symfony\\Contracts\\Translation\\TranslatorInterface' => $baseDir . '/vendor-prefixed/symfony/translation-contracts/TranslatorInterface.php', 'MailPoetVendor\\Symfony\\Contracts\\Translation\\TranslatorTrait' => $baseDir . '/vendor-prefixed/symfony/translation-contracts/TranslatorTrait.php', 'MailPoetVendor\\Symfony\\Polyfill\\Ctype\\Ctype' => $baseDir . '/vendor-prefixed/symfony/polyfill-ctype/Ctype.php', 'MailPoetVendor\\Symfony\\Polyfill\\Iconv\\Iconv' => $baseDir . '/vendor-prefixed/symfony/polyfill-iconv/Iconv.php', 'MailPoetVendor\\Symfony\\Polyfill\\Intl\\Idn\\Idn' => $baseDir . '/vendor-prefixed/symfony/polyfill-intl-idn/Idn.php', 'MailPoetVendor\\Symfony\\Polyfill\\Intl\\Idn\\Info' => $baseDir . '/vendor-prefixed/symfony/polyfill-intl-idn/Info.php', 'MailPoetVendor\\Symfony\\Polyfill\\Intl\\Idn\\Resources\\unidata\\DisallowedRanges' => $baseDir . '/vendor-prefixed/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php', 'MailPoetVendor\\Symfony\\Polyfill\\Intl\\Idn\\Resources\\unidata\\Regex' => $baseDir . '/vendor-prefixed/symfony/polyfill-intl-idn/Resources/unidata/Regex.php', 'MailPoetVendor\\Symfony\\Polyfill\\Intl\\Normalizer\\Normalizer' => $baseDir . '/vendor-prefixed/symfony/polyfill-intl-normalizer/Normalizer.php', 'MailPoetVendor\\Symfony\\Polyfill\\Mbstring\\Mbstring' => $baseDir . '/vendor-prefixed/symfony/polyfill-mbstring/Mbstring.php', 'MailPoetVendor\\Symfony\\Polyfill\\Php72\\Php72' => $baseDir . '/vendor-prefixed/symfony/polyfill-php72/Php72.php', 'MailPoetVendor\\Symfony\\Polyfill\\Php80\\Php80' => $baseDir . '/vendor-prefixed/symfony/polyfill-php80/Php80.php', 'MailPoetVendor\\Text_Diff_Renderer_parallel' => $baseDir . '/vendor-prefixed/cerdic/css-tidy/testing/unit-tests/class.Text_Diff_Renderer_parallel.php', 'MailPoetVendor\\Twig\\Cache\\CacheInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Cache/CacheInterface.php', 'MailPoetVendor\\Twig\\Cache\\FilesystemCache' => $baseDir . '/vendor-prefixed/twig/twig/src/Cache/FilesystemCache.php', 'MailPoetVendor\\Twig\\Cache\\NullCache' => $baseDir . '/vendor-prefixed/twig/twig/src/Cache/NullCache.php', 'MailPoetVendor\\Twig\\Compiler' => $baseDir . '/vendor-prefixed/twig/twig/src/Compiler.php', 'MailPoetVendor\\Twig\\Environment' => $baseDir . '/vendor-prefixed/twig/twig/src/Environment.php', 'MailPoetVendor\\Twig\\Error\\Error' => $baseDir . '/vendor-prefixed/twig/twig/src/Error/Error.php', 'MailPoetVendor\\Twig\\Error\\LoaderError' => $baseDir . '/vendor-prefixed/twig/twig/src/Error/LoaderError.php', 'MailPoetVendor\\Twig\\Error\\RuntimeError' => $baseDir . '/vendor-prefixed/twig/twig/src/Error/RuntimeError.php', 'MailPoetVendor\\Twig\\Error\\SyntaxError' => $baseDir . '/vendor-prefixed/twig/twig/src/Error/SyntaxError.php', 'MailPoetVendor\\Twig\\ExpressionParser' => $baseDir . '/vendor-prefixed/twig/twig/src/ExpressionParser.php', 'MailPoetVendor\\Twig\\ExtensionSet' => $baseDir . '/vendor-prefixed/twig/twig/src/ExtensionSet.php', 'MailPoetVendor\\Twig\\Extension\\AbstractExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/AbstractExtension.php', 'MailPoetVendor\\Twig\\Extension\\CoreExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/CoreExtension.php', 'MailPoetVendor\\Twig\\Extension\\DebugExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/DebugExtension.php', 'MailPoetVendor\\Twig\\Extension\\EscaperExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/EscaperExtension.php', 'MailPoetVendor\\Twig\\Extension\\ExtensionInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/ExtensionInterface.php', 'MailPoetVendor\\Twig\\Extension\\GlobalsInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/GlobalsInterface.php', 'MailPoetVendor\\Twig\\Extension\\InitRuntimeInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/InitRuntimeInterface.php', 'MailPoetVendor\\Twig\\Extension\\OptimizerExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/OptimizerExtension.php', 'MailPoetVendor\\Twig\\Extension\\ProfilerExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/ProfilerExtension.php', 'MailPoetVendor\\Twig\\Extension\\RuntimeExtensionInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/RuntimeExtensionInterface.php', 'MailPoetVendor\\Twig\\Extension\\SandboxExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/SandboxExtension.php', 'MailPoetVendor\\Twig\\Extension\\StagingExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/StagingExtension.php', 'MailPoetVendor\\Twig\\Extension\\StringLoaderExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/StringLoaderExtension.php', 'MailPoetVendor\\Twig\\FileExtensionEscapingStrategy' => $baseDir . '/vendor-prefixed/twig/twig/src/FileExtensionEscapingStrategy.php', 'MailPoetVendor\\Twig\\Lexer' => $baseDir . '/vendor-prefixed/twig/twig/src/Lexer.php', 'MailPoetVendor\\Twig\\Loader\\ArrayLoader' => $baseDir . '/vendor-prefixed/twig/twig/src/Loader/ArrayLoader.php', 'MailPoetVendor\\Twig\\Loader\\ChainLoader' => $baseDir . '/vendor-prefixed/twig/twig/src/Loader/ChainLoader.php', 'MailPoetVendor\\Twig\\Loader\\ExistsLoaderInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Loader/ExistsLoaderInterface.php', 'MailPoetVendor\\Twig\\Loader\\FilesystemLoader' => $baseDir . '/vendor-prefixed/twig/twig/src/Loader/FilesystemLoader.php', 'MailPoetVendor\\Twig\\Loader\\LoaderInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Loader/LoaderInterface.php', 'MailPoetVendor\\Twig\\Loader\\SourceContextLoaderInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Loader/SourceContextLoaderInterface.php', 'MailPoetVendor\\Twig\\Markup' => $baseDir . '/vendor-prefixed/twig/twig/src/Markup.php', 'MailPoetVendor\\Twig\\NodeTraverser' => $baseDir . '/vendor-prefixed/twig/twig/src/NodeTraverser.php', 'MailPoetVendor\\Twig\\NodeVisitor\\AbstractNodeVisitor' => $baseDir . '/vendor-prefixed/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php', 'MailPoetVendor\\Twig\\NodeVisitor\\EscaperNodeVisitor' => $baseDir . '/vendor-prefixed/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php', 'MailPoetVendor\\Twig\\NodeVisitor\\MacroAutoImportNodeVisitor' => $baseDir . '/vendor-prefixed/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php', 'MailPoetVendor\\Twig\\NodeVisitor\\NodeVisitorInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/NodeVisitor/NodeVisitorInterface.php', 'MailPoetVendor\\Twig\\NodeVisitor\\OptimizerNodeVisitor' => $baseDir . '/vendor-prefixed/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php', 'MailPoetVendor\\Twig\\NodeVisitor\\SafeAnalysisNodeVisitor' => $baseDir . '/vendor-prefixed/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php', 'MailPoetVendor\\Twig\\NodeVisitor\\SandboxNodeVisitor' => $baseDir . '/vendor-prefixed/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php', 'MailPoetVendor\\Twig\\Node\\AutoEscapeNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/AutoEscapeNode.php', 'MailPoetVendor\\Twig\\Node\\BlockNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/BlockNode.php', 'MailPoetVendor\\Twig\\Node\\BlockReferenceNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/BlockReferenceNode.php', 'MailPoetVendor\\Twig\\Node\\BodyNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/BodyNode.php', 'MailPoetVendor\\Twig\\Node\\CheckSecurityNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/CheckSecurityNode.php', 'MailPoetVendor\\Twig\\Node\\CheckToStringNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/CheckToStringNode.php', 'MailPoetVendor\\Twig\\Node\\DeprecatedNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/DeprecatedNode.php', 'MailPoetVendor\\Twig\\Node\\DoNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/DoNode.php', 'MailPoetVendor\\Twig\\Node\\EmbedNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/EmbedNode.php', 'MailPoetVendor\\Twig\\Node\\Expression\\AbstractExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/AbstractExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\ArrayExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/ArrayExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\ArrowFunctionExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/ArrowFunctionExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\AssignNameExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/AssignNameExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\AbstractBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/AbstractBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\AddBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/AddBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\AndBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/AndBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\BitwiseAndBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\BitwiseOrBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\BitwiseXorBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\ConcatBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/ConcatBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\DivBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/DivBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\EndsWithBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\EqualBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/EqualBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\FloorDivBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\GreaterBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/GreaterBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\GreaterEqualBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\InBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/InBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\LessBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/LessBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\LessEqualBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\MatchesBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/MatchesBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\ModBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/ModBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\MulBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/MulBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\NotEqualBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\NotInBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/NotInBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\OrBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/OrBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\PowerBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/PowerBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\RangeBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/RangeBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\SpaceshipBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\StartsWithBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Binary\\SubBinary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Binary/SubBinary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\BlockReferenceExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/BlockReferenceExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\CallExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/CallExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\ConditionalExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/ConditionalExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\ConstantExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/ConstantExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\FilterExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/FilterExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Filter\\DefaultFilter' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Filter/DefaultFilter.php', 'MailPoetVendor\\Twig\\Node\\Expression\\FunctionExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/FunctionExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\GetAttrExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/GetAttrExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\InlinePrint' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/InlinePrint.php', 'MailPoetVendor\\Twig\\Node\\Expression\\MethodCallExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/MethodCallExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\NameExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/NameExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\NullCoalesceExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/NullCoalesceExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\ParentExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/ParentExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\TempNameExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/TempNameExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\TestExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/TestExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Test\\ConstantTest' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Test/ConstantTest.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Test\\DefinedTest' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Test/DefinedTest.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Test\\DivisiblebyTest' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Test\\EvenTest' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Test/EvenTest.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Test\\NullTest' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Test/NullTest.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Test\\OddTest' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Test/OddTest.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Test\\SameasTest' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Test/SameasTest.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Unary\\AbstractUnary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Unary/AbstractUnary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Unary\\NegUnary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Unary/NegUnary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Unary\\NotUnary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Unary/NotUnary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\Unary\\PosUnary' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/Unary/PosUnary.php', 'MailPoetVendor\\Twig\\Node\\Expression\\VariadicExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/VariadicExpression.php', 'MailPoetVendor\\Twig\\Node\\FlushNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/FlushNode.php', 'MailPoetVendor\\Twig\\Node\\ForLoopNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/ForLoopNode.php', 'MailPoetVendor\\Twig\\Node\\ForNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/ForNode.php', 'MailPoetVendor\\Twig\\Node\\IfNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/IfNode.php', 'MailPoetVendor\\Twig\\Node\\ImportNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/ImportNode.php', 'MailPoetVendor\\Twig\\Node\\IncludeNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/IncludeNode.php', 'MailPoetVendor\\Twig\\Node\\MacroNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/MacroNode.php', 'MailPoetVendor\\Twig\\Node\\ModuleNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/ModuleNode.php', 'MailPoetVendor\\Twig\\Node\\Node' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Node.php', 'MailPoetVendor\\Twig\\Node\\NodeCaptureInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/NodeCaptureInterface.php', 'MailPoetVendor\\Twig\\Node\\NodeOutputInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/NodeOutputInterface.php', 'MailPoetVendor\\Twig\\Node\\PrintNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/PrintNode.php', 'MailPoetVendor\\Twig\\Node\\SandboxNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/SandboxNode.php', 'MailPoetVendor\\Twig\\Node\\SandboxedPrintNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/SandboxedPrintNode.php', 'MailPoetVendor\\Twig\\Node\\SetNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/SetNode.php', 'MailPoetVendor\\Twig\\Node\\SpacelessNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/SpacelessNode.php', 'MailPoetVendor\\Twig\\Node\\TextNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/TextNode.php', 'MailPoetVendor\\Twig\\Node\\WithNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/WithNode.php', 'MailPoetVendor\\Twig\\Parser' => $baseDir . '/vendor-prefixed/twig/twig/src/Parser.php', 'MailPoetVendor\\Twig\\Profiler\\Dumper\\BaseDumper' => $baseDir . '/vendor-prefixed/twig/twig/src/Profiler/Dumper/BaseDumper.php', 'MailPoetVendor\\Twig\\Profiler\\Dumper\\BlackfireDumper' => $baseDir . '/vendor-prefixed/twig/twig/src/Profiler/Dumper/BlackfireDumper.php', 'MailPoetVendor\\Twig\\Profiler\\Dumper\\HtmlDumper' => $baseDir . '/vendor-prefixed/twig/twig/src/Profiler/Dumper/HtmlDumper.php', 'MailPoetVendor\\Twig\\Profiler\\Dumper\\TextDumper' => $baseDir . '/vendor-prefixed/twig/twig/src/Profiler/Dumper/TextDumper.php', 'MailPoetVendor\\Twig\\Profiler\\NodeVisitor\\ProfilerNodeVisitor' => $baseDir . '/vendor-prefixed/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php', 'MailPoetVendor\\Twig\\Profiler\\Node\\EnterProfileNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Profiler/Node/EnterProfileNode.php', 'MailPoetVendor\\Twig\\Profiler\\Node\\LeaveProfileNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Profiler/Node/LeaveProfileNode.php', 'MailPoetVendor\\Twig\\Profiler\\Profile' => $baseDir . '/vendor-prefixed/twig/twig/src/Profiler/Profile.php', 'MailPoetVendor\\Twig\\RuntimeLoader\\ContainerRuntimeLoader' => $baseDir . '/vendor-prefixed/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php', 'MailPoetVendor\\Twig\\RuntimeLoader\\FactoryRuntimeLoader' => $baseDir . '/vendor-prefixed/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php', 'MailPoetVendor\\Twig\\RuntimeLoader\\RuntimeLoaderInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php', 'MailPoetVendor\\Twig\\Sandbox\\SecurityError' => $baseDir . '/vendor-prefixed/twig/twig/src/Sandbox/SecurityError.php', 'MailPoetVendor\\Twig\\Sandbox\\SecurityNotAllowedFilterError' => $baseDir . '/vendor-prefixed/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php', 'MailPoetVendor\\Twig\\Sandbox\\SecurityNotAllowedFunctionError' => $baseDir . '/vendor-prefixed/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php', 'MailPoetVendor\\Twig\\Sandbox\\SecurityNotAllowedMethodError' => $baseDir . '/vendor-prefixed/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php', 'MailPoetVendor\\Twig\\Sandbox\\SecurityNotAllowedPropertyError' => $baseDir . '/vendor-prefixed/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php', 'MailPoetVendor\\Twig\\Sandbox\\SecurityNotAllowedTagError' => $baseDir . '/vendor-prefixed/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php', 'MailPoetVendor\\Twig\\Sandbox\\SecurityPolicy' => $baseDir . '/vendor-prefixed/twig/twig/src/Sandbox/SecurityPolicy.php', 'MailPoetVendor\\Twig\\Sandbox\\SecurityPolicyInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Sandbox/SecurityPolicyInterface.php', 'MailPoetVendor\\Twig\\Source' => $baseDir . '/vendor-prefixed/twig/twig/src/Source.php', 'MailPoetVendor\\Twig\\Template' => $baseDir . '/vendor-prefixed/twig/twig/src/Template.php', 'MailPoetVendor\\Twig\\TemplateWrapper' => $baseDir . '/vendor-prefixed/twig/twig/src/TemplateWrapper.php', 'MailPoetVendor\\Twig\\Token' => $baseDir . '/vendor-prefixed/twig/twig/src/Token.php', 'MailPoetVendor\\Twig\\TokenParser\\AbstractTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/AbstractTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\ApplyTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/ApplyTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\AutoEscapeTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/AutoEscapeTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\BlockTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/BlockTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\DeprecatedTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/DeprecatedTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\DoTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/DoTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\EmbedTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/EmbedTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\ExtendsTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/ExtendsTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\FilterTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/FilterTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\FlushTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/FlushTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\ForTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/ForTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\FromTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/FromTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\IfTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/IfTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\ImportTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/ImportTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\IncludeTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/IncludeTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\MacroTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/MacroTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\SandboxTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/SandboxTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\SetTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/SetTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\SpacelessTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/SpacelessTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\TokenParserInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/TokenParserInterface.php', 'MailPoetVendor\\Twig\\TokenParser\\UseTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/UseTokenParser.php', 'MailPoetVendor\\Twig\\TokenParser\\WithTokenParser' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenParser/WithTokenParser.php', 'MailPoetVendor\\Twig\\TokenStream' => $baseDir . '/vendor-prefixed/twig/twig/src/TokenStream.php', 'MailPoetVendor\\Twig\\TwigFilter' => $baseDir . '/vendor-prefixed/twig/twig/src/TwigFilter.php', 'MailPoetVendor\\Twig\\TwigFunction' => $baseDir . '/vendor-prefixed/twig/twig/src/TwigFunction.php', 'MailPoetVendor\\Twig\\TwigTest' => $baseDir . '/vendor-prefixed/twig/twig/src/TwigTest.php', 'MailPoetVendor\\Twig\\Util\\DeprecationCollector' => $baseDir . '/vendor-prefixed/twig/twig/src/Util/DeprecationCollector.php', 'MailPoetVendor\\Twig\\Util\\TemplateDirIterator' => $baseDir . '/vendor-prefixed/twig/twig/src/Util/TemplateDirIterator.php', 'MailPoetVendor\\UnhandledMatchError' => $baseDir . '/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php', 'MailPoetVendor\\ValueError' => $baseDir . '/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/ValueError.php', 'MailPoetVendor\\XLSXWriter' => $baseDir . '/lib-3rd-party/XLSXWriter.php', 'MailPoetVendor\\XLSXWriter_BuffererWriter' => $baseDir . '/lib-3rd-party/XLSXWriter.php', 'MailPoetVendor\\csstidy' => $baseDir . '/vendor-prefixed/cerdic/css-tidy/class.csstidy.php', 'MailPoetVendor\\csstidy_csst' => $baseDir . '/vendor-prefixed/cerdic/css-tidy/testing/unit-tests/class.csstidy_csst.php', 'MailPoetVendor\\csstidy_harness' => $baseDir . '/vendor-prefixed/cerdic/css-tidy/testing/unit-tests/class.csstidy_harness.php', 'MailPoetVendor\\csstidy_optimise' => $baseDir . '/vendor-prefixed/cerdic/css-tidy/class.csstidy_optimise.php', 'MailPoetVendor\\csstidy_print' => $baseDir . '/vendor-prefixed/cerdic/css-tidy/class.csstidy_print.php', 'MailPoetVendor\\csstidy_reporter' => $baseDir . '/vendor-prefixed/cerdic/css-tidy/testing/unit-tests/class.csstidy_reporter.php', 'MailPoetVendor\\csstidy_test_csst' => $baseDir . '/vendor-prefixed/cerdic/css-tidy/testing/unit-tests/test.csst.php', 'pQuery' => $vendorDir . '/tburry/pquery/pQuery.php', 'pQuery\\AspEmbeddedNode' => $vendorDir . '/tburry/pquery/gan_node_html.php', 'pQuery\\CSSQueryTokenizer' => $vendorDir . '/tburry/pquery/gan_selector_html.php', 'pQuery\\CdataNode' => $vendorDir . '/tburry/pquery/gan_node_html.php', 'pQuery\\CommentNode' => $vendorDir . '/tburry/pquery/gan_node_html.php', 'pQuery\\ConditionalTagNode' => $vendorDir . '/tburry/pquery/gan_node_html.php', 'pQuery\\DoctypeNode' => $vendorDir . '/tburry/pquery/gan_node_html.php', 'pQuery\\DomNode' => $vendorDir . '/tburry/pquery/gan_node_html.php', 'pQuery\\EmbeddedNode' => $vendorDir . '/tburry/pquery/gan_node_html.php', 'pQuery\\Html5Parser' => $vendorDir . '/tburry/pquery/gan_parser_html.php', 'pQuery\\HtmlFormatter' => $vendorDir . '/tburry/pquery/gan_formatter.php', 'pQuery\\HtmlParser' => $vendorDir . '/tburry/pquery/gan_parser_html.php', 'pQuery\\HtmlParserBase' => $vendorDir . '/tburry/pquery/gan_parser_html.php', 'pQuery\\HtmlSelector' => $vendorDir . '/tburry/pquery/gan_selector_html.php', 'pQuery\\IQuery' => $vendorDir . '/tburry/pquery/IQuery.php', 'pQuery\\TextNode' => $vendorDir . '/tburry/pquery/gan_node_html.php', 'pQuery\\TokenizerBase' => $vendorDir . '/tburry/pquery/gan_tokenizer.php', 'pQuery\\XML2ArrayParser' => $vendorDir . '/tburry/pquery/gan_xml2array.php', 'pQuery\\XmlNode' => $vendorDir . '/tburry/pquery/gan_node_html.php', );
1
  <?php
2
+ if (!defined('ABSPATH')) exit; $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', 'MailPoetVendor\\Attribute' => $baseDir . '/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/Attribute.php', 'MailPoetVendor\\CSS' => $baseDir . '/lib-3rd-party/CSS.php', 'MailPoetVendor\\Carbon\\Carbon' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Carbon.php', 'MailPoetVendor\\Carbon\\CarbonConverterInterface' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/CarbonConverterInterface.php', 'MailPoetVendor\\Carbon\\CarbonImmutable' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/CarbonImmutable.php', 'MailPoetVendor\\Carbon\\CarbonInterface' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/CarbonInterface.php', 'MailPoetVendor\\Carbon\\CarbonInterval' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/CarbonInterval.php', 'MailPoetVendor\\Carbon\\CarbonPeriod' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/CarbonPeriod.php', 'MailPoetVendor\\Carbon\\CarbonTimeZone' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/CarbonTimeZone.php', 'MailPoetVendor\\Carbon\\Exceptions\\BadComparisonUnitException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/BadComparisonUnitException.php', 'MailPoetVendor\\Carbon\\Exceptions\\BadFluentConstructorException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/BadFluentConstructorException.php', 'MailPoetVendor\\Carbon\\Exceptions\\BadFluentSetterException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/BadFluentSetterException.php', 'MailPoetVendor\\Carbon\\Exceptions\\BadMethodCallException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/BadMethodCallException.php', 'MailPoetVendor\\Carbon\\Exceptions\\Exception' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/Exception.php', 'MailPoetVendor\\Carbon\\Exceptions\\ImmutableException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/ImmutableException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidArgumentException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidCastException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidCastException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidDateException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidDateException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidFormatException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidFormatException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidIntervalException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidIntervalException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidPeriodDateException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidPeriodDateException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidPeriodParameterException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidPeriodParameterException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidTimeZoneException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidTimeZoneException.php', 'MailPoetVendor\\Carbon\\Exceptions\\InvalidTypeException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/InvalidTypeException.php', 'MailPoetVendor\\Carbon\\Exceptions\\NotACarbonClassException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/NotACarbonClassException.php', 'MailPoetVendor\\Carbon\\Exceptions\\NotAPeriodException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/NotAPeriodException.php', 'MailPoetVendor\\Carbon\\Exceptions\\NotLocaleAwareException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/NotLocaleAwareException.php', 'MailPoetVendor\\Carbon\\Exceptions\\OutOfRangeException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/OutOfRangeException.php', 'MailPoetVendor\\Carbon\\Exceptions\\ParseErrorException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/ParseErrorException.php', 'MailPoetVendor\\Carbon\\Exceptions\\RuntimeException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/RuntimeException.php', 'MailPoetVendor\\Carbon\\Exceptions\\UnitException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/UnitException.php', 'MailPoetVendor\\Carbon\\Exceptions\\UnitNotConfiguredException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/UnitNotConfiguredException.php', 'MailPoetVendor\\Carbon\\Exceptions\\UnknownGetterException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/UnknownGetterException.php', 'MailPoetVendor\\Carbon\\Exceptions\\UnknownMethodException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/UnknownMethodException.php', 'MailPoetVendor\\Carbon\\Exceptions\\UnknownSetterException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/UnknownSetterException.php', 'MailPoetVendor\\Carbon\\Exceptions\\UnknownUnitException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/UnknownUnitException.php', 'MailPoetVendor\\Carbon\\Exceptions\\UnreachableException' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Exceptions/UnreachableException.php', 'MailPoetVendor\\Carbon\\Factory' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Factory.php', 'MailPoetVendor\\Carbon\\FactoryImmutable' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/FactoryImmutable.php', 'MailPoetVendor\\Carbon\\Language' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Language.php', 'MailPoetVendor\\Carbon\\Traits\\Boundaries' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Boundaries.php', 'MailPoetVendor\\Carbon\\Traits\\Cast' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Cast.php', 'MailPoetVendor\\Carbon\\Traits\\Comparison' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Comparison.php', 'MailPoetVendor\\Carbon\\Traits\\Converter' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Converter.php', 'MailPoetVendor\\Carbon\\Traits\\Creator' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Creator.php', 'MailPoetVendor\\Carbon\\Traits\\Date' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Date.php', 'MailPoetVendor\\Carbon\\Traits\\Difference' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Difference.php', 'MailPoetVendor\\Carbon\\Traits\\IntervalRounding' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/IntervalRounding.php', 'MailPoetVendor\\Carbon\\Traits\\IntervalStep' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/IntervalStep.php', 'MailPoetVendor\\Carbon\\Traits\\Localization' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Localization.php', 'MailPoetVendor\\Carbon\\Traits\\Macro' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Macro.php', 'MailPoetVendor\\Carbon\\Traits\\Mixin' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Mixin.php', 'MailPoetVendor\\Carbon\\Traits\\Modifiers' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Modifiers.php', 'MailPoetVendor\\Carbon\\Traits\\Mutability' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Mutability.php', 'MailPoetVendor\\Carbon\\Traits\\ObjectInitialisation' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/ObjectInitialisation.php', 'MailPoetVendor\\Carbon\\Traits\\Options' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Options.php', 'MailPoetVendor\\Carbon\\Traits\\Rounding' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Rounding.php', 'MailPoetVendor\\Carbon\\Traits\\Serialization' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Serialization.php', 'MailPoetVendor\\Carbon\\Traits\\Test' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Test.php', 'MailPoetVendor\\Carbon\\Traits\\Timestamp' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Timestamp.php', 'MailPoetVendor\\Carbon\\Traits\\Units' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Units.php', 'MailPoetVendor\\Carbon\\Traits\\Week' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Traits/Week.php', 'MailPoetVendor\\Carbon\\Translator' => $baseDir . '/vendor-prefixed/nesbot/carbon/src/Carbon/Translator.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\Cache' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/Cache.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\CacheProvider' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/CacheProvider.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\ClearableCache' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/ClearableCache.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\FlushableCache' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/FlushableCache.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\MultiDeleteCache' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/MultiDeleteCache.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\MultiGetCache' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/MultiGetCache.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\MultiOperationCache' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/MultiOperationCache.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\MultiPutCache' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/MultiPutCache.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\Psr6\\CacheAdapter' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/CacheAdapter.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\Psr6\\CacheItem' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/CacheItem.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\Psr6\\DoctrineProvider' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/DoctrineProvider.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\Psr6\\InvalidArgument' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/InvalidArgument.php', 'MailPoetVendor\\Doctrine\\Common\\Cache\\Psr6\\TypedCacheItem' => $baseDir . '/vendor-prefixed/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/TypedCacheItem.php', 'MailPoetVendor\\Doctrine\\Common\\ClassLoader' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/ClassLoader.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\AbstractLazyCollection' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/AbstractLazyCollection.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\ArrayCollection' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/ArrayCollection.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Collection' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Collection.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Criteria' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Criteria.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Expr\\ClosureExpressionVisitor' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Expr/ClosureExpressionVisitor.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Expr\\Comparison' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Comparison.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Expr\\CompositeExpression' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Expr/CompositeExpression.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Expr\\Expression' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Expression.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Expr\\ExpressionVisitor' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Expr/ExpressionVisitor.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Expr\\Value' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Expr/Value.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\ExpressionBuilder' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/ExpressionBuilder.php', 'MailPoetVendor\\Doctrine\\Common\\Collections\\Selectable' => $baseDir . '/vendor-prefixed/doctrine/collections/lib/Doctrine/Common/Collections/Selectable.php', 'MailPoetVendor\\Doctrine\\Common\\CommonException' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/CommonException.php', 'MailPoetVendor\\Doctrine\\Common\\Comparable' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Comparable.php', 'MailPoetVendor\\Doctrine\\Common\\EventArgs' => $baseDir . '/vendor-prefixed/doctrine/event-manager/lib/Doctrine/Common/EventArgs.php', 'MailPoetVendor\\Doctrine\\Common\\EventManager' => $baseDir . '/vendor-prefixed/doctrine/event-manager/lib/Doctrine/Common/EventManager.php', 'MailPoetVendor\\Doctrine\\Common\\EventSubscriber' => $baseDir . '/vendor-prefixed/doctrine/event-manager/lib/Doctrine/Common/EventSubscriber.php', 'MailPoetVendor\\Doctrine\\Common\\Lexer\\AbstractLexer' => $baseDir . '/vendor-prefixed/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php', 'MailPoetVendor\\Doctrine\\Common\\Persistence\\PersistentObject' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Common/Persistence/PersistentObject.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\AbstractProxyFactory' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\Autoloader' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/Autoloader.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\Exception\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/Exception/InvalidArgumentException.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\Exception\\OutOfBoundsException' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/Exception/OutOfBoundsException.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\Exception\\ProxyException' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/Exception/ProxyException.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\Exception\\UnexpectedValueException' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/Exception/UnexpectedValueException.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\Proxy' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/Proxy.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\ProxyDefinition' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/ProxyDefinition.php', 'MailPoetVendor\\Doctrine\\Common\\Proxy\\ProxyGenerator' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Proxy/ProxyGenerator.php', 'MailPoetVendor\\Doctrine\\Common\\Util\\ClassUtils' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Util/ClassUtils.php', 'MailPoetVendor\\Doctrine\\Common\\Util\\Debug' => $baseDir . '/vendor-prefixed/doctrine/common/lib/Doctrine/Common/Util/Debug.php', 'MailPoetVendor\\Doctrine\\DBAL\\Abstraction\\Result' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Abstraction/Result.php', 'MailPoetVendor\\Doctrine\\DBAL\\Cache\\ArrayStatement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Cache/ArrayStatement.php', 'MailPoetVendor\\Doctrine\\DBAL\\Cache\\CacheException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Cache/CacheException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Cache\\QueryCacheProfile' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Cache/QueryCacheProfile.php', 'MailPoetVendor\\Doctrine\\DBAL\\Cache\\ResultCacheStatement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Cache/ResultCacheStatement.php', 'MailPoetVendor\\Doctrine\\DBAL\\ColumnCase' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/ColumnCase.php', 'MailPoetVendor\\Doctrine\\DBAL\\Configuration' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Configuration.php', 'MailPoetVendor\\Doctrine\\DBAL\\Connection' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Connection.php', 'MailPoetVendor\\Doctrine\\DBAL\\ConnectionException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/ConnectionException.php', 'MailPoetVendor\\Doctrine\\DBAL\\DBALException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/DBALException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver.php', 'MailPoetVendor\\Doctrine\\DBAL\\DriverManager' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/DriverManager.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\AbstractDriverException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractDriverException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\AbstractException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\AbstractMySQLDriver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractMySQLDriver.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\AbstractSQLServerDriver\\Exception\\PortWithoutHost' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/AbstractSQLServerDriver/Exception/PortWithoutHost.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\Connection' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/Connection.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\DriverException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/DriverException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\Exception' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/Exception.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\ExceptionConverterDriver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/ExceptionConverterDriver.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\FetchUtils' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/FetchUtils.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDOConnection' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDOException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDOMySql\\Driver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOMySql/Driver.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDOQueryImplementation' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOQueryImplementation.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDOStatement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatement.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDOStatementImplementations' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDOStatementImplementations.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\Connection' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/Connection.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\Exception' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/Exception.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\MySQL\\Driver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/MySQL/Driver.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\OCI\\Driver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/OCI/Driver.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\PgSQL\\Driver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/PgSQL/Driver.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\SQLSrv\\Connection' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/SQLSrv/Connection.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\SQLSrv\\Driver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/SQLSrv/Driver.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\SQLSrv\\Statement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/SQLSrv/Statement.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\SQLite\\Driver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/SQLite/Driver.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PDO\\Statement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PDO/Statement.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\PingableConnection' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/PingableConnection.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\Result' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/Result.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\ResultStatement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/ResultStatement.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\ServerInfoAwareConnection' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/ServerInfoAwareConnection.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\Statement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/Statement.php', 'MailPoetVendor\\Doctrine\\DBAL\\Driver\\StatementIterator' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Driver/StatementIterator.php', 'MailPoetVendor\\Doctrine\\DBAL\\Event\\Listeners\\SQLSessionInit' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Event/Listeners/SQLSessionInit.php', 'MailPoetVendor\\Doctrine\\DBAL\\Events' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Events.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\ConnectionException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/ConnectionException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\ConnectionLost' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/ConnectionLost.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\ConstraintViolationException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/ConstraintViolationException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\DatabaseObjectExistsException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/DatabaseObjectExistsException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\DatabaseObjectNotFoundException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/DatabaseObjectNotFoundException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\DeadlockException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/DeadlockException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\DriverException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/DriverException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\ForeignKeyConstraintViolationException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/ForeignKeyConstraintViolationException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/InvalidArgumentException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\InvalidFieldNameException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/InvalidFieldNameException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\LockWaitTimeoutException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/LockWaitTimeoutException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\NoKeyValue' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/NoKeyValue.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\NonUniqueFieldNameException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/NonUniqueFieldNameException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\NotNullConstraintViolationException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/NotNullConstraintViolationException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\ReadOnlyException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/ReadOnlyException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\RetryableException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/RetryableException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\ServerException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/ServerException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\SyntaxErrorException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/SyntaxErrorException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\TableExistsException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/TableExistsException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\TableNotFoundException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/TableNotFoundException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Exception\\UniqueConstraintViolationException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Exception/UniqueConstraintViolationException.php', 'MailPoetVendor\\Doctrine\\DBAL\\FetchMode' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/FetchMode.php', 'MailPoetVendor\\Doctrine\\DBAL\\ForwardCompatibility\\DriverResultStatement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/ForwardCompatibility/DriverResultStatement.php', 'MailPoetVendor\\Doctrine\\DBAL\\ForwardCompatibility\\DriverStatement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/ForwardCompatibility/DriverStatement.php', 'MailPoetVendor\\Doctrine\\DBAL\\ForwardCompatibility\\Result' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/ForwardCompatibility/Result.php', 'MailPoetVendor\\Doctrine\\DBAL\\Id\\TableGenerator' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Id/TableGenerator.php', 'MailPoetVendor\\Doctrine\\DBAL\\Id\\TableGeneratorSchemaVisitor' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Id/TableGeneratorSchemaVisitor.php', 'MailPoetVendor\\Doctrine\\DBAL\\LockMode' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/LockMode.php', 'MailPoetVendor\\Doctrine\\DBAL\\Logging\\DebugStack' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Logging/DebugStack.php', 'MailPoetVendor\\Doctrine\\DBAL\\Logging\\EchoSQLLogger' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Logging/EchoSQLLogger.php', 'MailPoetVendor\\Doctrine\\DBAL\\Logging\\LoggerChain' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Logging/LoggerChain.php', 'MailPoetVendor\\Doctrine\\DBAL\\Logging\\SQLLogger' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Logging/SQLLogger.php', 'MailPoetVendor\\Doctrine\\DBAL\\ParameterType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/ParameterType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\AbstractPlatform' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\DateIntervalUnit' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/DateIntervalUnit.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\Keywords\\KeywordList' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/KeywordList.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\Keywords\\MariaDb102Keywords' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/MariaDb102Keywords.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\Keywords\\MsSQLKeywords' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/MsSQLKeywords.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\Keywords\\MySQL57Keywords' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/MySQL57Keywords.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\Keywords\\MySQL80Keywords' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/MySQL80Keywords.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\Keywords\\MySQLKeywords' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/MySQLKeywords.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\Keywords\\ReservedKeywordsValidator' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/Keywords/ReservedKeywordsValidator.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\MariaDb1027Platform' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MariaDb1027Platform.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\MySQL57Platform' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySQL57Platform.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\MySQL80Platform' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySQL80Platform.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\MySqlPlatform' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php', 'MailPoetVendor\\Doctrine\\DBAL\\Platforms\\TrimMode' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Platforms/TrimMode.php', 'MailPoetVendor\\Doctrine\\DBAL\\Portability\\Connection' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Portability/Connection.php', 'MailPoetVendor\\Doctrine\\DBAL\\Portability\\OptimizeFlags' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Portability/OptimizeFlags.php', 'MailPoetVendor\\Doctrine\\DBAL\\Portability\\Statement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Portability/Statement.php', 'MailPoetVendor\\Doctrine\\DBAL\\Query\\Expression\\CompositeExpression' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Query/Expression/CompositeExpression.php', 'MailPoetVendor\\Doctrine\\DBAL\\Query\\Expression\\ExpressionBuilder' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Query/Expression/ExpressionBuilder.php', 'MailPoetVendor\\Doctrine\\DBAL\\Query\\QueryBuilder' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Query/QueryBuilder.php', 'MailPoetVendor\\Doctrine\\DBAL\\Query\\QueryException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Query/QueryException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Result' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Result.php', 'MailPoetVendor\\Doctrine\\DBAL\\SQLParserUtils' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtils.php', 'MailPoetVendor\\Doctrine\\DBAL\\SQLParserUtilsException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/SQLParserUtilsException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Statement' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Statement.php', 'MailPoetVendor\\Doctrine\\DBAL\\TransactionIsolationLevel' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/TransactionIsolationLevel.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\ArrayType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/ArrayType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\AsciiStringType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/AsciiStringType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\BigIntType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/BigIntType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\BinaryType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/BinaryType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\BlobType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/BlobType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\BooleanType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/BooleanType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\ConversionException' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/ConversionException.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\DateImmutableType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DateImmutableType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\DateIntervalType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DateIntervalType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\DateTimeImmutableType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeImmutableType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\DateTimeType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\DateTimeTzImmutableType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeTzImmutableType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\DateTimeTzType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DateTimeTzType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\DateType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DateType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\DecimalType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/DecimalType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\FloatType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/FloatType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\GuidType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/GuidType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\IntegerType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/IntegerType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\JsonArrayType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/JsonArrayType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\JsonType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/JsonType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\ObjectType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/ObjectType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\PhpDateTimeMappingType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/PhpDateTimeMappingType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\PhpIntegerMappingType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/PhpIntegerMappingType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\SimpleArrayType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/SimpleArrayType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\SmallIntType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/SmallIntType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\StringType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/StringType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\TextType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/TextType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\TimeImmutableType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/TimeImmutableType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\TimeType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/TimeType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\Type' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/Type.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\TypeRegistry' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/TypeRegistry.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\Types' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/Types.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\VarDateTimeImmutableType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/VarDateTimeImmutableType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Types\\VarDateTimeType' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Types/VarDateTimeType.php', 'MailPoetVendor\\Doctrine\\DBAL\\Version' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/Version.php', 'MailPoetVendor\\Doctrine\\DBAL\\VersionAwarePlatformDriver' => $baseDir . '/vendor-prefixed/doctrine/dbal/lib/Doctrine/DBAL/VersionAwarePlatformDriver.php', 'MailPoetVendor\\Doctrine\\Deprecations\\Deprecation' => $baseDir . '/vendor-prefixed/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php', 'MailPoetVendor\\Doctrine\\Instantiator\\Exception\\ExceptionInterface' => $baseDir . '/vendor-prefixed/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php', 'MailPoetVendor\\Doctrine\\Instantiator\\Exception\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php', 'MailPoetVendor\\Doctrine\\Instantiator\\Exception\\UnexpectedValueException' => $baseDir . '/vendor-prefixed/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php', 'MailPoetVendor\\Doctrine\\Instantiator\\Instantiator' => $baseDir . '/vendor-prefixed/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php', 'MailPoetVendor\\Doctrine\\Instantiator\\InstantiatorInterface' => $baseDir . '/vendor-prefixed/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php', 'MailPoetVendor\\Doctrine\\ORM\\AbstractQuery' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/AbstractQuery.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\AssociationCacheEntry' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/AssociationCacheEntry.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\CacheConfiguration' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/CacheConfiguration.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\CacheEntry' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/CacheEntry.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\CacheException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/CacheException.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\CacheFactory' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/CacheFactory.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\CacheKey' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/CacheKey.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\CollectionCacheEntry' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/CollectionCacheEntry.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\CollectionCacheKey' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/CollectionCacheKey.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\CollectionHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/CollectionHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\ConcurrentRegion' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/ConcurrentRegion.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\DefaultCache' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/DefaultCache.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\DefaultCacheFactory' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/DefaultCacheFactory.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\DefaultCollectionHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/DefaultCollectionHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\DefaultEntityHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/DefaultEntityHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\DefaultQueryCache' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/DefaultQueryCache.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\EntityCacheEntry' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/EntityCacheEntry.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\EntityCacheKey' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/EntityCacheKey.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\EntityHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/EntityHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\CacheException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/CacheException.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\CannotUpdateReadOnlyCollection' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/CannotUpdateReadOnlyCollection.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\CannotUpdateReadOnlyEntity' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/CannotUpdateReadOnlyEntity.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\FeatureNotImplemented' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/FeatureNotImplemented.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\InvalidResultCacheDriver' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/InvalidResultCacheDriver.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\MetadataCacheNotConfigured' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/MetadataCacheNotConfigured.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\MetadataCacheUsesNonPersistentCache' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/MetadataCacheUsesNonPersistentCache.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\NonCacheableEntity' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/NonCacheableEntity.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\NonCacheableEntityAssociation' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/NonCacheableEntityAssociation.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\QueryCacheNotConfigured' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/QueryCacheNotConfigured.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Exception\\QueryCacheUsesNonPersistentCache' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Exception/QueryCacheUsesNonPersistentCache.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Lock' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Lock.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\LockException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/LockException.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Logging\\CacheLogger' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Logging/CacheLogger.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Logging\\CacheLoggerChain' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Logging/CacheLoggerChain.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Logging\\StatisticsCacheLogger' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Logging/StatisticsCacheLogger.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\MultiGetRegion' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/MultiGetRegion.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\CachedPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/CachedPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Collection\\AbstractCollectionPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Collection/AbstractCollectionPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Collection\\CachedCollectionPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Collection/CachedCollectionPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Collection\\NonStrictReadWriteCachedCollectionPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Collection\\ReadOnlyCachedCollectionPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Collection\\ReadWriteCachedCollectionPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Entity\\AbstractEntityPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Entity/AbstractEntityPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Entity\\CachedEntityPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Entity/CachedEntityPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Entity\\NonStrictReadWriteCachedEntityPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Entity\\ReadOnlyCachedEntityPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Persister\\Entity\\ReadWriteCachedEntityPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\QueryCache' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/QueryCache.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\QueryCacheEntry' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/QueryCacheEntry.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\QueryCacheKey' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/QueryCacheKey.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\QueryCacheValidator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/QueryCacheValidator.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Region' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Region.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Region\\DefaultMultiGetRegion' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Region/DefaultMultiGetRegion.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Region\\DefaultRegion' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Region/DefaultRegion.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Region\\FileLockRegion' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\Region\\UpdateTimestampCache' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/Region/UpdateTimestampCache.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\RegionsConfiguration' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/RegionsConfiguration.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\TimestampCacheEntry' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/TimestampCacheEntry.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\TimestampCacheKey' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/TimestampCacheKey.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\TimestampQueryCacheValidator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/TimestampQueryCacheValidator.php', 'MailPoetVendor\\Doctrine\\ORM\\Cache\\TimestampRegion' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Cache/TimestampRegion.php', 'MailPoetVendor\\Doctrine\\ORM\\Configuration' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Configuration.php', 'MailPoetVendor\\Doctrine\\ORM\\Decorator\\EntityManagerDecorator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Decorator/EntityManagerDecorator.php', 'MailPoetVendor\\Doctrine\\ORM\\EntityManager' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/EntityManager.php', 'MailPoetVendor\\Doctrine\\ORM\\EntityManagerInterface' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/EntityManagerInterface.php', 'MailPoetVendor\\Doctrine\\ORM\\EntityNotFoundException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/EntityNotFoundException.php', 'MailPoetVendor\\Doctrine\\ORM\\EntityRepository' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/EntityRepository.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\LifecycleEventArgs' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/LifecycleEventArgs.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\ListenersInvoker' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/ListenersInvoker.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\LoadClassMetadataEventArgs' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/LoadClassMetadataEventArgs.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\OnClassMetadataNotFoundEventArgs' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/OnClassMetadataNotFoundEventArgs.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\OnClearEventArgs' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/OnClearEventArgs.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\OnFlushEventArgs' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/OnFlushEventArgs.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\PostFlushEventArgs' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/PostFlushEventArgs.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\PreFlushEventArgs' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/PreFlushEventArgs.php', 'MailPoetVendor\\Doctrine\\ORM\\Event\\PreUpdateEventArgs' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Event/PreUpdateEventArgs.php', 'MailPoetVendor\\Doctrine\\ORM\\Events' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Events.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\ConfigurationException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/ConfigurationException.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\EntityManagerClosed' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/EntityManagerClosed.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\EntityMissingAssignedId' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/EntityMissingAssignedId.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\InvalidEntityRepository' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/InvalidEntityRepository.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\InvalidHydrationMode' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/InvalidHydrationMode.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\ManagerException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/ManagerException.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\MismatchedEventManager' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/MismatchedEventManager.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\MissingIdentifierField' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/MissingIdentifierField.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\MissingMappingDriverImplementation' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/MissingMappingDriverImplementation.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\MultipleSelectorsFoundException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/MultipleSelectorsFoundException.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\NamedNativeQueryNotFound' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/NamedNativeQueryNotFound.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\NamedQueryNotFound' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/NamedQueryNotFound.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\NotSupported' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/NotSupported.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\ORMException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/ORMException.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\PersisterException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/PersisterException.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\ProxyClassesAlwaysRegenerating' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/ProxyClassesAlwaysRegenerating.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\RepositoryException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/RepositoryException.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\SchemaToolException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/SchemaToolException.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\UnexpectedAssociationValue' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/UnexpectedAssociationValue.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\UnknownEntityNamespace' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/UnknownEntityNamespace.php', 'MailPoetVendor\\Doctrine\\ORM\\Exception\\UnrecognizedIdentifierFields' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Exception/UnrecognizedIdentifierFields.php', 'MailPoetVendor\\Doctrine\\ORM\\Id\\AbstractIdGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Id/AbstractIdGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Id\\AssignedGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Id/AssignedGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Id\\BigIntegerIdentityGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Id/BigIntegerIdentityGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Id\\IdentityGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Id/IdentityGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Id\\SequenceGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Id/SequenceGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Id\\TableGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Id/TableGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Id\\UuidGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Id/UuidGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\CommitOrderCalculator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/CommitOrderCalculator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\HydrationCompleteHandler' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/HydrationCompleteHandler.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\AbstractHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/AbstractHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\ArrayHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ArrayHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\HydrationException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/HydrationException.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\IterableResult' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/IterableResult.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\ObjectHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ObjectHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\ScalarColumnHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ScalarColumnHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\ScalarHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/ScalarHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\SimpleObjectHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/SimpleObjectHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\Hydration\\SingleScalarHydrator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/Hydration/SingleScalarHydrator.php', 'MailPoetVendor\\Doctrine\\ORM\\Internal\\SQLResultCasing' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Internal/SQLResultCasing.php', 'MailPoetVendor\\Doctrine\\ORM\\LazyCriteriaCollection' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/LazyCriteriaCollection.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Annotation' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Annotation.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\AnsiQuoteStrategy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/AnsiQuoteStrategy.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\AssociationOverride' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/AssociationOverride.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\AssociationOverrides' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/AssociationOverrides.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\AttributeOverride' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/AttributeOverride.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\AttributeOverrides' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/AttributeOverrides.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Builder\\AssociationBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Builder/AssociationBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Builder\\ClassMetadataBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Builder/ClassMetadataBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Builder\\EmbeddedBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Builder/EmbeddedBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Builder\\EntityListenerBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Builder/EntityListenerBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Builder\\FieldBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Builder/FieldBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Builder\\ManyToManyAssociationBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Builder/ManyToManyAssociationBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Builder\\OneToManyAssociationBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Builder/OneToManyAssociationBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Cache' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Cache.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\ChangeTrackingPolicy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ChangeTrackingPolicy.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\ClassMetadata' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadata.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\ClassMetadataFactory' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataFactory.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\ClassMetadataInfo' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ClassMetadataInfo.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Column' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Column.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\ColumnResult' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ColumnResult.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\CustomIdGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/CustomIdGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\DefaultEntityListenerResolver' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/DefaultEntityListenerResolver.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\DefaultNamingStrategy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/DefaultNamingStrategy.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\DefaultQuoteStrategy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/DefaultQuoteStrategy.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\DiscriminatorColumn' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/DiscriminatorColumn.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\DiscriminatorMap' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/DiscriminatorMap.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Driver\\AnnotationDriver' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Driver\\AttributeDriver' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AttributeDriver.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Driver\\AttributeReader' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AttributeReader.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Driver\\DriverChain' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/DriverChain.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Driver\\PHPDriver' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/PHPDriver.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Driver\\RepeatableAttributeCollection' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/RepeatableAttributeCollection.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Driver\\StaticPHPDriver' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/StaticPHPDriver.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Embeddable' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Embeddable.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Embedded' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Embedded.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Entity' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Entity.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\EntityListenerResolver' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/EntityListenerResolver.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\EntityListeners' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/EntityListeners.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\EntityResult' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/EntityResult.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Exception\\CannotGenerateIds' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Exception/CannotGenerateIds.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Exception\\InvalidCustomGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Exception/InvalidCustomGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Exception\\UnknownGeneratorType' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Exception/UnknownGeneratorType.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\FieldResult' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/FieldResult.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\GeneratedValue' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/GeneratedValue.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\HasLifecycleCallbacks' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/HasLifecycleCallbacks.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Id' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Id.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Index' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Index.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\InheritanceType' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/InheritanceType.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\InverseJoinColumn' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/InverseJoinColumn.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\JoinColumn' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/JoinColumn.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\JoinColumns' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/JoinColumns.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\JoinTable' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/JoinTable.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\ManyToMany' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ManyToMany.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\ManyToOne' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ManyToOne.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\MappedSuperclass' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/MappedSuperclass.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\MappingException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/MappingException.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\NamedNativeQueries' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/NamedNativeQueries.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\NamedNativeQuery' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/NamedNativeQuery.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\NamedQueries' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/NamedQueries.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\NamedQuery' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/NamedQuery.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\NamingStrategy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/NamingStrategy.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\OneToMany' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/OneToMany.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\OneToOne' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/OneToOne.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\OrderBy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/OrderBy.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\PostLoad' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/PostLoad.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\PostPersist' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/PostPersist.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\PostRemove' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/PostRemove.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\PostUpdate' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/PostUpdate.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\PreFlush' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/PreFlush.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\PrePersist' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/PrePersist.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\PreRemove' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/PreRemove.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\PreUpdate' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/PreUpdate.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\QuoteStrategy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/QuoteStrategy.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\ReflectionEmbeddedProperty' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/ReflectionEmbeddedProperty.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Reflection\\ReflectionPropertiesGetter' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Reflection/ReflectionPropertiesGetter.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\SequenceGenerator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/SequenceGenerator.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\SqlResultSetMapping' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/SqlResultSetMapping.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\SqlResultSetMappings' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/SqlResultSetMappings.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Table' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Table.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\UnderscoreNamingStrategy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/UnderscoreNamingStrategy.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\UniqueConstraint' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/UniqueConstraint.php', 'MailPoetVendor\\Doctrine\\ORM\\Mapping\\Version' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Mapping/Version.php', 'MailPoetVendor\\Doctrine\\ORM\\NativeQuery' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/NativeQuery.php', 'MailPoetVendor\\Doctrine\\ORM\\NoResultException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/NoResultException.php', 'MailPoetVendor\\Doctrine\\ORM\\NonUniqueResultException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/NonUniqueResultException.php', 'MailPoetVendor\\Doctrine\\ORM\\ORMException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/ORMException.php', 'MailPoetVendor\\Doctrine\\ORM\\ORMInvalidArgumentException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/ORMInvalidArgumentException.php', 'MailPoetVendor\\Doctrine\\ORM\\OptimisticLockException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/OptimisticLockException.php', 'MailPoetVendor\\Doctrine\\ORM\\PersistentCollection' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/PersistentCollection.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Collection\\AbstractCollectionPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Collection/AbstractCollectionPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Collection\\CollectionPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Collection/CollectionPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Collection\\ManyToManyPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Collection/ManyToManyPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Collection\\OneToManyPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Collection/OneToManyPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Entity\\AbstractEntityInheritancePersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/AbstractEntityInheritancePersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/BasicEntityPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Entity\\CachedPersisterContext' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/CachedPersisterContext.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Entity\\EntityPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/EntityPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Entity\\JoinedSubclassPersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/JoinedSubclassPersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Entity\\SingleTablePersister' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Entity/SingleTablePersister.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Exception\\CantUseInOperatorOnCompositeKeys' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Exception/CantUseInOperatorOnCompositeKeys.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Exception\\InvalidOrientation' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Exception/InvalidOrientation.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\Exception\\UnrecognizedField' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/Exception/UnrecognizedField.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\MatchingAssociationFieldRequiresObject' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/MatchingAssociationFieldRequiresObject.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\PersisterException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/PersisterException.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\SqlExpressionVisitor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/SqlExpressionVisitor.php', 'MailPoetVendor\\Doctrine\\ORM\\Persisters\\SqlValueVisitor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Persisters/SqlValueVisitor.php', 'MailPoetVendor\\Doctrine\\ORM\\PessimisticLockException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/PessimisticLockException.php', 'MailPoetVendor\\Doctrine\\ORM\\Proxy\\Autoloader' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Proxy/Autoloader.php', 'MailPoetVendor\\Doctrine\\ORM\\Proxy\\Proxy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Proxy/Proxy.php', 'MailPoetVendor\\Doctrine\\ORM\\Proxy\\ProxyFactory' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Proxy/ProxyFactory.php', 'MailPoetVendor\\Doctrine\\ORM\\Query' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query.php', 'MailPoetVendor\\Doctrine\\ORM\\QueryBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/QueryBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ASTException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ASTException.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\AggregateExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/AggregateExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ArithmeticExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ArithmeticExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ArithmeticFactor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ArithmeticFactor.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ArithmeticTerm' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ArithmeticTerm.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\BetweenExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/BetweenExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\CoalesceExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/CoalesceExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\CollectionMemberExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/CollectionMemberExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ComparisonExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ComparisonExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ConditionalExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ConditionalExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ConditionalFactor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ConditionalFactor.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ConditionalPrimary' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ConditionalPrimary.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ConditionalTerm' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ConditionalTerm.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\DeleteClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/DeleteClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\DeleteStatement' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/DeleteStatement.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\EmptyCollectionComparisonExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/EmptyCollectionComparisonExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ExistsExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ExistsExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\FromClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/FromClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\AbsFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/AbsFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\AvgFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/AvgFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\BitAndFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/BitAndFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\BitOrFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/BitOrFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\ConcatFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/ConcatFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\CountFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/CountFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\CurrentDateFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/CurrentDateFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\CurrentTimeFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimeFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\CurrentTimestampFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/CurrentTimestampFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\DateAddFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/DateAddFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\DateDiffFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/DateDiffFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\DateSubFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/DateSubFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\FunctionNode' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/FunctionNode.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\IdentityFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/IdentityFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\LengthFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/LengthFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\LocateFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/LocateFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\LowerFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/LowerFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\MaxFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/MaxFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\MinFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/MinFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\ModFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/ModFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\SizeFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/SizeFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\SqrtFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/SqrtFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\SubstringFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/SubstringFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\SumFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/SumFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\TrimFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/TrimFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Functions\\UpperFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Functions/UpperFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\GeneralCaseExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/GeneralCaseExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\GroupByClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/GroupByClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\HavingClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/HavingClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\IdentificationVariableDeclaration' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/IdentificationVariableDeclaration.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\InExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/InExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\IndexBy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/IndexBy.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\InputParameter' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/InputParameter.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\InstanceOfExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/InstanceOfExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Join' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Join.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\JoinAssociationDeclaration' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/JoinAssociationDeclaration.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\JoinAssociationPathExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/JoinAssociationPathExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\JoinClassPathExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/JoinClassPathExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\JoinVariableDeclaration' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/JoinVariableDeclaration.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\LikeExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/LikeExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Literal' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Literal.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\NewObjectExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/NewObjectExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Node' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Node.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\NullComparisonExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/NullComparisonExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\NullIfExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/NullIfExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\OrderByClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/OrderByClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\OrderByItem' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/OrderByItem.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\ParenthesisExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/ParenthesisExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\PartialObjectExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/PartialObjectExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\PathExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/PathExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\QuantifiedExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/QuantifiedExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\RangeVariableDeclaration' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/RangeVariableDeclaration.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SelectClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SelectClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SelectExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SelectExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SelectStatement' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SelectStatement.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SimpleArithmeticExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SimpleArithmeticExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SimpleCaseExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SimpleCaseExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SimpleSelectClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SimpleSelectClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SimpleSelectExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SimpleSelectExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SimpleWhenClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SimpleWhenClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\Subselect' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/Subselect.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SubselectFromClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SubselectFromClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\SubselectIdentificationVariableDeclaration' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/SubselectIdentificationVariableDeclaration.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\TypedExpression' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/TypedExpression.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\UpdateClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/UpdateClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\UpdateItem' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/UpdateItem.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\UpdateStatement' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/UpdateStatement.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\WhenClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/WhenClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\AST\\WhereClause' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/AST/WhereClause.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Exec\\AbstractSqlExecutor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Exec/AbstractSqlExecutor.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Exec\\MultiTableDeleteExecutor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Exec/MultiTableDeleteExecutor.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Exec\\MultiTableUpdateExecutor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Exec/MultiTableUpdateExecutor.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Exec\\SingleSelectExecutor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Exec/SingleSelectExecutor.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Exec\\SingleTableDeleteUpdateExecutor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Exec/SingleTableDeleteUpdateExecutor.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Andx' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Andx.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Base' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Base.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Comparison' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Comparison.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Composite' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Composite.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\From' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/From.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Func' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Func.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\GroupBy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/GroupBy.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Join' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Join.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Literal' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Literal.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Math' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Math.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\OrderBy' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/OrderBy.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Orx' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Orx.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Expr\\Select' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Expr/Select.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\FilterCollection' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/FilterCollection.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Filter\\FilterException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Filter/FilterException.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Filter\\SQLFilter' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Filter/SQLFilter.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Lexer' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Lexer.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Parameter' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Parameter.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\ParameterTypeInferer' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/ParameterTypeInferer.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Parser' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Parser.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\ParserResult' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/ParserResult.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\Printer' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/Printer.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\QueryException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\QueryExpressionVisitor' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\ResultSetMapping' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/ResultSetMapping.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\ResultSetMappingBuilder' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/ResultSetMappingBuilder.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\SqlWalker' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/SqlWalker.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\TreeWalker' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/TreeWalker.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\TreeWalkerAdapter' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/TreeWalkerAdapter.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\TreeWalkerChain' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/TreeWalkerChain.php', 'MailPoetVendor\\Doctrine\\ORM\\Query\\TreeWalkerChainIterator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Query/TreeWalkerChainIterator.php', 'MailPoetVendor\\Doctrine\\ORM\\Repository\\DefaultRepositoryFactory' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Repository/DefaultRepositoryFactory.php', 'MailPoetVendor\\Doctrine\\ORM\\Repository\\Exception\\InvalidFindByCall' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Repository/Exception/InvalidFindByCall.php', 'MailPoetVendor\\Doctrine\\ORM\\Repository\\Exception\\InvalidMagicMethodCall' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Repository/Exception/InvalidMagicMethodCall.php', 'MailPoetVendor\\Doctrine\\ORM\\Repository\\RepositoryFactory' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Repository/RepositoryFactory.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Exception\\MissingColumnException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Exception/MissingColumnException.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Exception\\NotSupported' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Exception/NotSupported.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Pagination\\CountOutputWalker' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/CountOutputWalker.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Pagination\\CountWalker' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/CountWalker.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Pagination\\Exception\\RowNumberOverFunctionNotEnabled' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/Exception/RowNumberOverFunctionNotEnabled.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Pagination\\LimitSubqueryOutputWalker' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryOutputWalker.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Pagination\\LimitSubqueryWalker' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/LimitSubqueryWalker.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Pagination\\Paginator' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/Paginator.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Pagination\\RowNumberOverFunction' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/RowNumberOverFunction.php', 'MailPoetVendor\\Doctrine\\ORM\\Tools\\Pagination\\WhereInWalker' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Tools/Pagination/WhereInWalker.php', 'MailPoetVendor\\Doctrine\\ORM\\TransactionRequiredException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/TransactionRequiredException.php', 'MailPoetVendor\\Doctrine\\ORM\\UnexpectedResultException' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/UnexpectedResultException.php', 'MailPoetVendor\\Doctrine\\ORM\\UnitOfWork' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php', 'MailPoetVendor\\Doctrine\\ORM\\Utility\\HierarchyDiscriminatorResolver' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Utility/HierarchyDiscriminatorResolver.php', 'MailPoetVendor\\Doctrine\\ORM\\Utility\\IdentifierFlattener' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Utility/IdentifierFlattener.php', 'MailPoetVendor\\Doctrine\\ORM\\Utility\\PersisterHelper' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Utility/PersisterHelper.php', 'MailPoetVendor\\Doctrine\\ORM\\Version' => $baseDir . '/vendor-prefixed/doctrine/orm/lib/Doctrine/ORM/Version.php', 'MailPoetVendor\\Doctrine\\Persistence\\AbstractManagerRegistry' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/AbstractManagerRegistry.php', 'MailPoetVendor\\Doctrine\\Persistence\\ConnectionRegistry' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/ConnectionRegistry.php', 'MailPoetVendor\\Doctrine\\Persistence\\Event\\LifecycleEventArgs' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Event/LifecycleEventArgs.php', 'MailPoetVendor\\Doctrine\\Persistence\\Event\\LoadClassMetadataEventArgs' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Event/LoadClassMetadataEventArgs.php', 'MailPoetVendor\\Doctrine\\Persistence\\Event\\ManagerEventArgs' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Event/ManagerEventArgs.php', 'MailPoetVendor\\Doctrine\\Persistence\\Event\\OnClearEventArgs' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Event/OnClearEventArgs.php', 'MailPoetVendor\\Doctrine\\Persistence\\Event\\PreUpdateEventArgs' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Event/PreUpdateEventArgs.php', 'MailPoetVendor\\Doctrine\\Persistence\\ManagerRegistry' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/ManagerRegistry.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\AbstractClassMetadataFactory' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/AbstractClassMetadataFactory.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\ClassMetadata' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/ClassMetadata.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\ClassMetadataFactory' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/ClassMetadataFactory.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\AnnotationDriver' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/AnnotationDriver.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\DefaultFileLocator' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/DefaultFileLocator.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\FileDriver' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/FileDriver.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\FileLocator' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/FileLocator.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\MappingDriver' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/MappingDriver.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\MappingDriverChain' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/MappingDriverChain.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\PHPDriver' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/PHPDriver.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\StaticPHPDriver' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/StaticPHPDriver.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\Driver\\SymfonyFileLocator' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/Driver/SymfonyFileLocator.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\MappingException' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/MappingException.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\ProxyClassNameResolver' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/ProxyClassNameResolver.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\ReflectionService' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/ReflectionService.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\RuntimeReflectionService' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/RuntimeReflectionService.php', 'MailPoetVendor\\Doctrine\\Persistence\\Mapping\\StaticReflectionService' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Mapping/StaticReflectionService.php', 'MailPoetVendor\\Doctrine\\Persistence\\NotifyPropertyChanged' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/NotifyPropertyChanged.php', 'MailPoetVendor\\Doctrine\\Persistence\\ObjectManager' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/ObjectManager.php', 'MailPoetVendor\\Doctrine\\Persistence\\ObjectManagerAware' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/ObjectManagerAware.php', 'MailPoetVendor\\Doctrine\\Persistence\\ObjectManagerDecorator' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/ObjectManagerDecorator.php', 'MailPoetVendor\\Doctrine\\Persistence\\ObjectRepository' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/ObjectRepository.php', 'MailPoetVendor\\Doctrine\\Persistence\\PropertyChangedListener' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/PropertyChangedListener.php', 'MailPoetVendor\\Doctrine\\Persistence\\Proxy' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Proxy.php', 'MailPoetVendor\\Doctrine\\Persistence\\Reflection\\RuntimePublicReflectionProperty' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Reflection/RuntimePublicReflectionProperty.php', 'MailPoetVendor\\Doctrine\\Persistence\\Reflection\\TypedNoDefaultReflectionProperty' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Reflection/TypedNoDefaultReflectionProperty.php', 'MailPoetVendor\\Doctrine\\Persistence\\Reflection\\TypedNoDefaultReflectionPropertyBase' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Reflection/TypedNoDefaultReflectionPropertyBase.php', 'MailPoetVendor\\Doctrine\\Persistence\\Reflection\\TypedNoDefaultRuntimePublicReflectionProperty' => $baseDir . '/vendor-prefixed/doctrine/persistence/lib/Doctrine/Persistence/Reflection/TypedNoDefaultRuntimePublicReflectionProperty.php', 'MailPoetVendor\\Egulias\\EmailValidator\\EmailLexer' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/EmailLexer.php', 'MailPoetVendor\\Egulias\\EmailValidator\\EmailParser' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/EmailParser.php', 'MailPoetVendor\\Egulias\\EmailValidator\\EmailValidator' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/EmailValidator.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\AtextAfterCFWS' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/AtextAfterCFWS.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\CRLFAtTheEnd' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/CRLFAtTheEnd.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\CRLFX2' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/CRLFX2.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\CRNoLF' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/CRNoLF.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\CharNotAllowed' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/CharNotAllowed.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\CommaInDomain' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/CommaInDomain.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\ConsecutiveAt' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/ConsecutiveAt.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\ConsecutiveDot' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/ConsecutiveDot.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\DomainAcceptsNoMail' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/DomainAcceptsNoMail.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\DomainHyphened' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/DomainHyphened.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\DotAtEnd' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/DotAtEnd.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\DotAtStart' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/DotAtStart.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\ExpectingAT' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/ExpectingAT.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\ExpectingATEXT' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/ExpectingATEXT.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\ExpectingCTEXT' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/ExpectingCTEXT.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\ExpectingDTEXT' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/ExpectingDTEXT.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\ExpectingDomainLiteralClose' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/ExpectingDomainLiteralClose.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\ExpectingQPair' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/ExpectingQPair.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\InvalidEmail' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/InvalidEmail.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\LocalOrReservedDomain' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/LocalOrReservedDomain.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\NoDNSRecord' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/NoDNSRecord.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\NoDomainPart' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/NoDomainPart.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\NoLocalPart' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/NoLocalPart.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\UnclosedComment' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/UnclosedComment.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\UnclosedQuotedString' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/UnclosedQuotedString.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Exception\\UnopenedComment' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Exception/UnopenedComment.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Parser\\DomainPart' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Parser/DomainPart.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Parser\\LocalPart' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Parser/LocalPart.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Parser\\Parser' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Parser/Parser.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\DNSCheckValidation' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/DNSCheckValidation.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\EmailValidation' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/EmailValidation.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\Error\\RFCWarnings' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/Error/RFCWarnings.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\Error\\SpoofEmail' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/Error/SpoofEmail.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\Exception\\EmptyValidationList' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/Exception/EmptyValidationList.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\MultipleErrors' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/MultipleErrors.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\MultipleValidationWithAnd' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\NoRFCWarningsValidation' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\RFCValidation' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/RFCValidation.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Validation\\SpoofCheckValidation' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Validation/SpoofCheckValidation.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\AddressLiteral' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/AddressLiteral.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\CFWSNearAt' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/CFWSNearAt.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\CFWSWithFWS' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/CFWSWithFWS.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\Comment' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/Comment.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\DeprecatedComment' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/DeprecatedComment.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\DomainLiteral' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/DomainLiteral.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\DomainTooLong' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/DomainTooLong.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\EmailTooLong' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/EmailTooLong.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\IPV6BadChar' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/IPV6BadChar.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\IPV6ColonEnd' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/IPV6ColonEnd.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\IPV6ColonStart' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/IPV6ColonStart.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\IPV6Deprecated' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/IPV6Deprecated.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\IPV6DoubleColon' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/IPV6DoubleColon.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\IPV6GroupCount' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/IPV6GroupCount.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\IPV6MaxGroups' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/IPV6MaxGroups.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\LabelTooLong' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/LabelTooLong.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\LocalTooLong' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/LocalTooLong.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\NoDNSMXRecord' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/NoDNSMXRecord.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\ObsoleteDTEXT' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/ObsoleteDTEXT.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\QuotedPart' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/QuotedPart.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\QuotedString' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/QuotedString.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\TLD' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/TLD.php', 'MailPoetVendor\\Egulias\\EmailValidator\\Warning\\Warning' => $baseDir . '/vendor-prefixed/egulias/email-validator/src/Warning/Warning.php', 'MailPoetVendor\\Gregwar\\Captcha\\CaptchaBuilder' => $baseDir . '/vendor-prefixed/gregwar/captcha/src/Gregwar/Captcha/CaptchaBuilder.php', 'MailPoetVendor\\Gregwar\\Captcha\\CaptchaBuilderInterface' => $baseDir . '/vendor-prefixed/gregwar/captcha/src/Gregwar/Captcha/CaptchaBuilderInterface.php', 'MailPoetVendor\\Gregwar\\Captcha\\ImageFileHandler' => $baseDir . '/vendor-prefixed/gregwar/captcha/src/Gregwar/Captcha/ImageFileHandler.php', 'MailPoetVendor\\Gregwar\\Captcha\\PhraseBuilder' => $baseDir . '/vendor-prefixed/gregwar/captcha/src/Gregwar/Captcha/PhraseBuilder.php', 'MailPoetVendor\\Gregwar\\Captcha\\PhraseBuilderInterface' => $baseDir . '/vendor-prefixed/gregwar/captcha/src/Gregwar/Captcha/PhraseBuilderInterface.php', 'MailPoetVendor\\Idiorm\\IdiormMethodMissingException' => $baseDir . '/lib-3rd-party/Idiorm/idiorm.php', 'MailPoetVendor\\Idiorm\\IdiormResultSet' => $baseDir . '/lib-3rd-party/Idiorm/idiorm.php', 'MailPoetVendor\\Idiorm\\IdiormString' => $baseDir . '/lib-3rd-party/Idiorm/idiorm.php', 'MailPoetVendor\\Idiorm\\IdiormStringException' => $baseDir . '/lib-3rd-party/Idiorm/idiorm.php', 'MailPoetVendor\\Idiorm\\ORM' => $baseDir . '/lib-3rd-party/Idiorm/idiorm.php', 'MailPoetVendor\\Monolog\\ErrorHandler' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/ErrorHandler.php', 'MailPoetVendor\\Monolog\\Formatter\\FormatterInterface' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php', 'MailPoetVendor\\Monolog\\Formatter\\LineFormatter' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Formatter/LineFormatter.php', 'MailPoetVendor\\Monolog\\Formatter\\NormalizerFormatter' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php', 'MailPoetVendor\\Monolog\\Handler\\AbstractHandler' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Handler/AbstractHandler.php', 'MailPoetVendor\\Monolog\\Handler\\AbstractProcessingHandler' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php', 'MailPoetVendor\\Monolog\\Handler\\HandlerInterface' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Handler/HandlerInterface.php', 'MailPoetVendor\\Monolog\\Logger' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Logger.php', 'MailPoetVendor\\Monolog\\Processor\\IntrospectionProcessor' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php', 'MailPoetVendor\\Monolog\\Processor\\MemoryProcessor' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php', 'MailPoetVendor\\Monolog\\Processor\\MemoryUsageProcessor' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php', 'MailPoetVendor\\Monolog\\Processor\\ProcessorInterface' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php', 'MailPoetVendor\\Monolog\\Processor\\WebProcessor' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Processor/WebProcessor.php', 'MailPoetVendor\\Monolog\\Registry' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Registry.php', 'MailPoetVendor\\Monolog\\ResettableInterface' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/ResettableInterface.php', 'MailPoetVendor\\Monolog\\SignalHandler' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/SignalHandler.php', 'MailPoetVendor\\Monolog\\Utils' => $baseDir . '/vendor-prefixed/monolog/monolog/src/Monolog/Utils.php', 'MailPoetVendor\\Normalizer' => $baseDir . '/vendor-prefixed/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', 'MailPoetVendor\\Paris\\Model' => $baseDir . '/lib-3rd-party/Paris/paris.php', 'MailPoetVendor\\Paris\\ORMWrapper' => $baseDir . '/lib-3rd-party/Paris/paris.php', 'MailPoetVendor\\Paris\\ParisMethodMissingException' => $baseDir . '/lib-3rd-party/Paris/paris.php', 'MailPoetVendor\\Psr\\Cache\\CacheException' => $baseDir . '/vendor-prefixed/psr/cache/src/CacheException.php', 'MailPoetVendor\\Psr\\Cache\\CacheItemInterface' => $baseDir . '/vendor-prefixed/psr/cache/src/CacheItemInterface.php', 'MailPoetVendor\\Psr\\Cache\\CacheItemPoolInterface' => $baseDir . '/vendor-prefixed/psr/cache/src/CacheItemPoolInterface.php', 'MailPoetVendor\\Psr\\Cache\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/psr/cache/src/InvalidArgumentException.php', 'MailPoetVendor\\Psr\\Container\\ContainerExceptionInterface' => $baseDir . '/vendor-prefixed/psr/container/src/ContainerExceptionInterface.php', 'MailPoetVendor\\Psr\\Container\\ContainerInterface' => $baseDir . '/vendor-prefixed/psr/container/src/ContainerInterface.php', 'MailPoetVendor\\Psr\\Container\\NotFoundExceptionInterface' => $baseDir . '/vendor-prefixed/psr/container/src/NotFoundExceptionInterface.php', 'MailPoetVendor\\Psr\\Log\\AbstractLogger' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/AbstractLogger.php', 'MailPoetVendor\\Psr\\Log\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/InvalidArgumentException.php', 'MailPoetVendor\\Psr\\Log\\LogLevel' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/LogLevel.php', 'MailPoetVendor\\Psr\\Log\\LoggerAwareInterface' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/LoggerAwareInterface.php', 'MailPoetVendor\\Psr\\Log\\LoggerAwareTrait' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/LoggerAwareTrait.php', 'MailPoetVendor\\Psr\\Log\\LoggerInterface' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/LoggerInterface.php', 'MailPoetVendor\\Psr\\Log\\LoggerTrait' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/LoggerTrait.php', 'MailPoetVendor\\Psr\\Log\\NullLogger' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/NullLogger.php', 'MailPoetVendor\\Psr\\Log\\Test\\DummyTest' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/Test/DummyTest.php', 'MailPoetVendor\\Psr\\Log\\Test\\LoggerInterfaceTest' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/Test/LoggerInterfaceTest.php', 'MailPoetVendor\\Psr\\Log\\Test\\TestLogger' => $baseDir . '/vendor-prefixed/psr/log/Psr/Log/Test/TestLogger.php', 'MailPoetVendor\\Sabberworm\\CSS\\CSSList\\AtRuleBlockList' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/CSSList/AtRuleBlockList.php', 'MailPoetVendor\\Sabberworm\\CSS\\CSSList\\CSSBlockList' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/CSSList/CSSBlockList.php', 'MailPoetVendor\\Sabberworm\\CSS\\CSSList\\CSSList' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/CSSList/CSSList.php', 'MailPoetVendor\\Sabberworm\\CSS\\CSSList\\Document' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/CSSList/Document.php', 'MailPoetVendor\\Sabberworm\\CSS\\CSSList\\KeyFrame' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/CSSList/KeyFrame.php', 'MailPoetVendor\\Sabberworm\\CSS\\Comment\\Comment' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Comment/Comment.php', 'MailPoetVendor\\Sabberworm\\CSS\\Comment\\Commentable' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Comment/Commentable.php', 'MailPoetVendor\\Sabberworm\\CSS\\OutputFormat' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/OutputFormat.php', 'MailPoetVendor\\Sabberworm\\CSS\\OutputFormatter' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/OutputFormat.php', 'MailPoetVendor\\Sabberworm\\CSS\\Parser' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parser.php', 'MailPoetVendor\\Sabberworm\\CSS\\Parsing\\OutputException' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parsing/OutputException.php', 'MailPoetVendor\\Sabberworm\\CSS\\Parsing\\ParserState' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parsing/ParserState.php', 'MailPoetVendor\\Sabberworm\\CSS\\Parsing\\SourceException' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parsing/SourceException.php', 'MailPoetVendor\\Sabberworm\\CSS\\Parsing\\UnexpectedTokenException' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Parsing/UnexpectedTokenException.php', 'MailPoetVendor\\Sabberworm\\CSS\\Property\\AtRule' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Property/AtRule.php', 'MailPoetVendor\\Sabberworm\\CSS\\Property\\CSSNamespace' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Property/CSSNamespace.php', 'MailPoetVendor\\Sabberworm\\CSS\\Property\\Charset' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Property/Charset.php', 'MailPoetVendor\\Sabberworm\\CSS\\Property\\Import' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Property/Import.php', 'MailPoetVendor\\Sabberworm\\CSS\\Property\\Selector' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Property/Selector.php', 'MailPoetVendor\\Sabberworm\\CSS\\Renderable' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Renderable.php', 'MailPoetVendor\\Sabberworm\\CSS\\RuleSet\\AtRuleSet' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/RuleSet/AtRuleSet.php', 'MailPoetVendor\\Sabberworm\\CSS\\RuleSet\\DeclarationBlock' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/RuleSet/DeclarationBlock.php', 'MailPoetVendor\\Sabberworm\\CSS\\RuleSet\\RuleSet' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/RuleSet/RuleSet.php', 'MailPoetVendor\\Sabberworm\\CSS\\Rule\\Rule' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Rule/Rule.php', 'MailPoetVendor\\Sabberworm\\CSS\\Settings' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Settings.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\CSSFunction' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/CSSFunction.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\CSSString' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/CSSString.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\CalcFunction' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/CalcFunction.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\CalcRuleValueList' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/CalcRuleValueList.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\Color' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/Color.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\LineName' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/LineName.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\PrimitiveValue' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/PrimitiveValue.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\RuleValueList' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/RuleValueList.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\Size' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/Size.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\URL' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/URL.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\Value' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/Value.php', 'MailPoetVendor\\Sabberworm\\CSS\\Value\\ValueList' => $baseDir . '/vendor-prefixed/sabberworm/php-css-parser/lib/Sabberworm/CSS/Value/ValueList.php', 'MailPoetVendor\\Stringable' => $baseDir . '/vendor-prefixed/symfony/polyfill-php80/Resources/stubs/Stringable.php', 'MailPoetVendor\\Sudzy\\Engine' => $baseDir . '/lib-3rd-party/Sudzy/Engine.php', 'MailPoetVendor\\Sudzy\\ValidModel' => $baseDir . '/lib-3rd-party/Sudzy/ValidModel.php', 'MailPoetVendor\\Sudzy\\ValidationException' => $baseDir . '/lib-3rd-party/Sudzy/ValidationException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Alias' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Alias.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\ArgumentInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/ArgumentInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\BoundArgument' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/BoundArgument.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\IteratorArgument' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/IteratorArgument.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\ReferenceSetArgumentTrait' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/ReferenceSetArgumentTrait.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\RewindableGenerator' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/RewindableGenerator.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\ServiceClosureArgument' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/ServiceClosureArgument.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\ServiceLocator' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/ServiceLocator.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\ServiceLocatorArgument' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/ServiceLocatorArgument.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Argument\\TaggedIteratorArgument' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Argument/TaggedIteratorArgument.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ChildDefinition' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ChildDefinition.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Container' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Container.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ContainerAwareInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ContainerAwareInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ContainerAwareTrait' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ContainerAwareTrait.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ContainerBuilder' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ContainerBuilder.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ContainerInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ContainerInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Definition' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Definition.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\EnvVarLoaderInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/EnvVarLoaderInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\EnvVarProcessor' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/EnvVarProcessor.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\EnvVarProcessorInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/EnvVarProcessorInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\AutowiringFailedException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/AutowiringFailedException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\BadMethodCallException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/BadMethodCallException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\EnvNotFoundException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/EnvNotFoundException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\EnvParameterException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/EnvParameterException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\ExceptionInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/ExceptionInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/InvalidArgumentException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\InvalidParameterTypeException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/InvalidParameterTypeException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\LogicException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/LogicException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\OutOfBoundsException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/OutOfBoundsException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\ParameterCircularReferenceException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/ParameterNotFoundException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\RuntimeException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/RuntimeException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\ServiceCircularReferenceException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Exception\\ServiceNotFoundException' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Exception/ServiceNotFoundException.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ExpressionLanguage' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ExpressionLanguage.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ExpressionLanguageProvider' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ExpressionLanguageProvider.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Parameter' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Parameter.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\ContainerBag' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ParameterBag/ContainerBag.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\ContainerBagInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ParameterBag/ContainerBagInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\EnvPlaceholderParameterBag' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\FrozenParameterBag' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBag' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ParameterBag/ParameterBag.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBagInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Reference' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Reference.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ResettableContainerInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ResettableContainerInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ReverseContainer' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ReverseContainer.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ServiceLocator' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ServiceLocator.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\ServiceSubscriberInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/ServiceSubscriberInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\TaggedContainerInterface' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/TaggedContainerInterface.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\TypedReference' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/TypedReference.php', 'MailPoetVendor\\Symfony\\Component\\DependencyInjection\\Variable' => $baseDir . '/vendor-prefixed/symfony/dependency-injection/Variable.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Comparator\\Comparator' => $baseDir . '/vendor-prefixed/symfony/finder/Comparator/Comparator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Comparator\\DateComparator' => $baseDir . '/vendor-prefixed/symfony/finder/Comparator/DateComparator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Comparator\\NumberComparator' => $baseDir . '/vendor-prefixed/symfony/finder/Comparator/NumberComparator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => $baseDir . '/vendor-prefixed/symfony/finder/Exception/AccessDeniedException.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Exception\\DirectoryNotFoundException' => $baseDir . '/vendor-prefixed/symfony/finder/Exception/DirectoryNotFoundException.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Finder' => $baseDir . '/vendor-prefixed/symfony/finder/Finder.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Gitignore' => $baseDir . '/vendor-prefixed/symfony/finder/Gitignore.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Glob' => $baseDir . '/vendor-prefixed/symfony/finder/Glob.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/CustomFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/DateRangeFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\DepthRangeFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/DepthRangeFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\ExcludeDirectoryFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/FileTypeFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/FilecontentFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/FilenameFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\LazyIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/LazyIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/MultiplePcreFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/PathFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/RecursiveDirectoryIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/SizeRangeFilterIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\Iterator\\SortableIterator' => $baseDir . '/vendor-prefixed/symfony/finder/Iterator/SortableIterator.php', 'MailPoetVendor\\Symfony\\Component\\Finder\\SplFileInfo' => $baseDir . '/vendor-prefixed/symfony/finder/SplFileInfo.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\DataCollectorTranslator' => $baseDir . '/vendor-prefixed/symfony/translation/DataCollectorTranslator.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Exception\\ExceptionInterface' => $baseDir . '/vendor-prefixed/symfony/translation/Exception/ExceptionInterface.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Exception\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/symfony/translation/Exception/InvalidArgumentException.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Exception\\InvalidResourceException' => $baseDir . '/vendor-prefixed/symfony/translation/Exception/InvalidResourceException.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Exception\\LogicException' => $baseDir . '/vendor-prefixed/symfony/translation/Exception/LogicException.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Exception\\NotFoundResourceException' => $baseDir . '/vendor-prefixed/symfony/translation/Exception/NotFoundResourceException.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Exception\\RuntimeException' => $baseDir . '/vendor-prefixed/symfony/translation/Exception/RuntimeException.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\IdentityTranslator' => $baseDir . '/vendor-prefixed/symfony/translation/IdentityTranslator.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Interval' => $baseDir . '/vendor-prefixed/symfony/translation/Interval.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\LoggingTranslator' => $baseDir . '/vendor-prefixed/symfony/translation/LoggingTranslator.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\MessageCatalogue' => $baseDir . '/vendor-prefixed/symfony/translation/MessageCatalogue.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\MessageCatalogueInterface' => $baseDir . '/vendor-prefixed/symfony/translation/MessageCatalogueInterface.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\MessageSelector' => $baseDir . '/vendor-prefixed/symfony/translation/MessageSelector.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\MetadataAwareInterface' => $baseDir . '/vendor-prefixed/symfony/translation/MetadataAwareInterface.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\PluralizationRules' => $baseDir . '/vendor-prefixed/symfony/translation/PluralizationRules.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Translator' => $baseDir . '/vendor-prefixed/symfony/translation/Translator.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\TranslatorBagInterface' => $baseDir . '/vendor-prefixed/symfony/translation/TranslatorBagInterface.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\TranslatorInterface' => $baseDir . '/vendor-prefixed/symfony/translation/TranslatorInterface.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Util\\ArrayConverter' => $baseDir . '/vendor-prefixed/symfony/translation/Util/ArrayConverter.php', 'MailPoetVendor\\Symfony\\Component\\Translation\\Util\\XliffUtils' => $baseDir . '/vendor-prefixed/symfony/translation/Util/XliffUtils.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraint' => $baseDir . '/vendor-prefixed/symfony/validator/Constraint.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ConstraintValidator' => $baseDir . '/vendor-prefixed/symfony/validator/ConstraintValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ConstraintValidatorFactory' => $baseDir . '/vendor-prefixed/symfony/validator/ConstraintValidatorFactory.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ConstraintValidatorFactoryInterface' => $baseDir . '/vendor-prefixed/symfony/validator/ConstraintValidatorFactoryInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ConstraintValidatorInterface' => $baseDir . '/vendor-prefixed/symfony/validator/ConstraintValidatorInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ConstraintViolation' => $baseDir . '/vendor-prefixed/symfony/validator/ConstraintViolation.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ConstraintViolationInterface' => $baseDir . '/vendor-prefixed/symfony/validator/ConstraintViolationInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ConstraintViolationList' => $baseDir . '/vendor-prefixed/symfony/validator/ConstraintViolationList.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ConstraintViolationListInterface' => $baseDir . '/vendor-prefixed/symfony/validator/ConstraintViolationListInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\AbstractComparison' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/AbstractComparison.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\AbstractComparisonValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/AbstractComparisonValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\All' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/All.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\AllValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/AllValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Bic' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Bic.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\BicValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/BicValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Blank' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Blank.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\BlankValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/BlankValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Callback' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Callback.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\CallbackValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/CallbackValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\CardScheme' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/CardScheme.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\CardSchemeValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/CardSchemeValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Choice' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Choice.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\ChoiceValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/ChoiceValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Collection' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Collection.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\CollectionValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/CollectionValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Composite' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Composite.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Count' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Count.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\CountValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/CountValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Country' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Country.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\CountryValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/CountryValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Currency' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Currency.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\CurrencyValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/CurrencyValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Date' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Date.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\DateTime' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/DateTime.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\DateTimeValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/DateTimeValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\DateValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/DateValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\DisableAutoMapping' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/DisableAutoMapping.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\DivisibleBy' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/DivisibleBy.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\DivisibleByValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/DivisibleByValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Email' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Email.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\EmailValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/EmailValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\EnableAutoMapping' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/EnableAutoMapping.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\EqualTo' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/EqualTo.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\EqualToValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/EqualToValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Existence' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Existence.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Expression' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Expression.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\ExpressionValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/ExpressionValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\File' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/File.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\FileValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/FileValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\GreaterThan' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/GreaterThan.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\GreaterThanOrEqual' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/GreaterThanOrEqual.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\GreaterThanOrEqualValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/GreaterThanOrEqualValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\GreaterThanValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/GreaterThanValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\GroupSequence' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/GroupSequence.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\GroupSequenceProvider' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/GroupSequenceProvider.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Iban' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Iban.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IbanValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IbanValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IdenticalTo' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IdenticalTo.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IdenticalToValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IdenticalToValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Image' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Image.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\ImageValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/ImageValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Ip' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Ip.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IpValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IpValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IsFalse' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IsFalse.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IsFalseValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IsFalseValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IsNull' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IsNull.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IsNullValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IsNullValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IsTrue' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IsTrue.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IsTrueValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IsTrueValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Isbn' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Isbn.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IsbnValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IsbnValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Issn' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Issn.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\IssnValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/IssnValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Json' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Json.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\JsonValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/JsonValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Language' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Language.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\LanguageValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/LanguageValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Length' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Length.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\LengthValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/LengthValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\LessThan' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/LessThan.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\LessThanOrEqual' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/LessThanOrEqual.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\LessThanOrEqualValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/LessThanOrEqualValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\LessThanValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/LessThanValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Locale' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Locale.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\LocaleValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/LocaleValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Luhn' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Luhn.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\LuhnValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/LuhnValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Negative' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Negative.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NegativeOrZero' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NegativeOrZero.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotBlank' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotBlank.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotBlankValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotBlankValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotCompromisedPassword' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotCompromisedPassword.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotCompromisedPasswordValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotCompromisedPasswordValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotEqualTo' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotEqualTo.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotEqualToValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotEqualToValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotIdenticalTo' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotIdenticalTo.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotIdenticalToValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotIdenticalToValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotNull' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotNull.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NotNullValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NotNullValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\NumberConstraintTrait' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/NumberConstraintTrait.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Optional' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Optional.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Positive' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Positive.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\PositiveOrZero' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/PositiveOrZero.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Range' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Range.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\RangeValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/RangeValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Regex' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Regex.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\RegexValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/RegexValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Required' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Required.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Time' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Time.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\TimeValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/TimeValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Timezone' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Timezone.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\TimezoneValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/TimezoneValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Traverse' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Traverse.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Type' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Type.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\TypeValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/TypeValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Unique' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Unique.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\UniqueValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/UniqueValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Url' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Url.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\UrlValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/UrlValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Uuid' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Uuid.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\UuidValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/UuidValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\Valid' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/Valid.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Constraints\\ValidValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Constraints/ValidValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ContainerConstraintValidatorFactory' => $baseDir . '/vendor-prefixed/symfony/validator/ContainerConstraintValidatorFactory.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Context\\ExecutionContext' => $baseDir . '/vendor-prefixed/symfony/validator/Context/ExecutionContext.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Context\\ExecutionContextFactory' => $baseDir . '/vendor-prefixed/symfony/validator/Context/ExecutionContextFactory.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Context\\ExecutionContextFactoryInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Context/ExecutionContextFactoryInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Context\\ExecutionContextInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Context/ExecutionContextInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\BadMethodCallException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/BadMethodCallException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\ConstraintDefinitionException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/ConstraintDefinitionException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\ExceptionInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/ExceptionInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\GroupDefinitionException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/GroupDefinitionException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\InvalidArgumentException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/InvalidArgumentException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\InvalidOptionsException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/InvalidOptionsException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\LogicException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/LogicException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\MappingException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/MappingException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\MissingOptionsException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/MissingOptionsException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\NoSuchMetadataException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/NoSuchMetadataException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\OutOfBoundsException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/OutOfBoundsException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\RuntimeException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/RuntimeException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\UnexpectedTypeException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/UnexpectedTypeException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\UnexpectedValueException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/UnexpectedValueException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\UnsupportedMetadataException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/UnsupportedMetadataException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Exception\\ValidatorException' => $baseDir . '/vendor-prefixed/symfony/validator/Exception/ValidatorException.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\GroupSequenceProviderInterface' => $baseDir . '/vendor-prefixed/symfony/validator/GroupSequenceProviderInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\AutoMappingStrategy' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/AutoMappingStrategy.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Cache\\CacheInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Cache/CacheInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Cache\\DoctrineCache' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Cache/DoctrineCache.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Cache\\Psr6Cache' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Cache/Psr6Cache.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\CascadingStrategy' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/CascadingStrategy.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\ClassMetadata' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/ClassMetadata.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\ClassMetadataInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/ClassMetadataInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Factory\\BlackHoleMetadataFactory' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Factory/BlackHoleMetadataFactory.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Factory\\LazyLoadingMetadataFactory' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Factory/LazyLoadingMetadataFactory.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Factory\\MetadataFactoryInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Factory/MetadataFactoryInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\GenericMetadata' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/GenericMetadata.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\GetterMetadata' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/GetterMetadata.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\AbstractLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/AbstractLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\AnnotationLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/AnnotationLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\AutoMappingTrait' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/AutoMappingTrait.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\FileLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/FileLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\FilesLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/FilesLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\LoaderChain' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/LoaderChain.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\LoaderInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/LoaderInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\PropertyInfoLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/PropertyInfoLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\StaticMethodLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/StaticMethodLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\XmlFileLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/XmlFileLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\XmlFilesLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/XmlFilesLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\YamlFileLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/YamlFileLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\Loader\\YamlFilesLoader' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/Loader/YamlFilesLoader.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\MemberMetadata' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/MemberMetadata.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\MetadataInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/MetadataInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\PropertyMetadata' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/PropertyMetadata.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\PropertyMetadataInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/PropertyMetadataInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Mapping\\TraversalStrategy' => $baseDir . '/vendor-prefixed/symfony/validator/Mapping/TraversalStrategy.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ObjectInitializerInterface' => $baseDir . '/vendor-prefixed/symfony/validator/ObjectInitializerInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Util\\LegacyTranslatorProxy' => $baseDir . '/vendor-prefixed/symfony/validator/Util/LegacyTranslatorProxy.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Util\\PropertyPath' => $baseDir . '/vendor-prefixed/symfony/validator/Util/PropertyPath.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Validation' => $baseDir . '/vendor-prefixed/symfony/validator/Validation.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ValidatorBuilder' => $baseDir . '/vendor-prefixed/symfony/validator/ValidatorBuilder.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\ValidatorBuilderInterface' => $baseDir . '/vendor-prefixed/symfony/validator/ValidatorBuilderInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Validator\\ContextualValidatorInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Validator/ContextualValidatorInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Validator\\LazyProperty' => $baseDir . '/vendor-prefixed/symfony/validator/Validator/LazyProperty.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Validator\\RecursiveContextualValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Validator/RecursiveContextualValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Validator\\RecursiveValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Validator/RecursiveValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Validator\\TraceableValidator' => $baseDir . '/vendor-prefixed/symfony/validator/Validator/TraceableValidator.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Validator\\ValidatorInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Validator/ValidatorInterface.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Violation\\ConstraintViolationBuilder' => $baseDir . '/vendor-prefixed/symfony/validator/Violation/ConstraintViolationBuilder.php', 'MailPoetVendor\\Symfony\\Component\\Validator\\Violation\\ConstraintViolationBuilderInterface' => $baseDir . '/vendor-prefixed/symfony/validator/Violation/ConstraintViolationBuilderInterface.php', 'MailPoetVendor\\Symfony\\Contracts\\Service\\ResetInterface' => $baseDir . '/vendor-prefixed/symfony/service-contracts/ResetInterface.php', 'MailPoetVendor\\Symfony\\Contracts\\Service\\ServiceLocatorTrait' => $baseDir . '/vendor-prefixed/symfony/service-contracts/ServiceLocatorTrait.php', 'MailPoetVendor\\Symfony\\Contracts\\Service\\ServiceProviderInterface' => $baseDir . '/vendor-prefixed/symfony/service-contracts/ServiceProviderInterface.php', 'MailPoetVendor\\Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => $baseDir . '/vendor-prefixed/symfony/service-contracts/ServiceSubscriberInterface.php', 'MailPoetVendor\\Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => $baseDir . '/vendor-prefixed/symfony/service-contracts/ServiceSubscriberTrait.php', 'MailPoetVendor\\Symfony\\Contracts\\Service\\Test\\ServiceLocatorTest' => $baseDir . '/vendor-prefixed/symfony/service-contracts/Test/ServiceLocatorTest.php', 'MailPoetVendor\\Symfony\\Contracts\\Translation\\LocaleAwareInterface' => $baseDir . '/vendor-prefixed/symfony/translation-contracts/LocaleAwareInterface.php', 'MailPoetVendor\\Symfony\\Contracts\\Translation\\Test\\TranslatorTest' => $baseDir . '/vendor-prefixed/symfony/translation-contracts/Test/TranslatorTest.php', 'MailPoetVendor\\Symfony\\Contracts\\Translation\\TranslatorInterface' => $baseDir . '/vendor-prefixed/symfony/translation-contracts/TranslatorInterface.php', 'MailPoetVendor\\Symfony\\Contracts\\Translation\\TranslatorTrait' => $baseDir . '/vendor-prefixed/symfony/translation-contracts/TranslatorTrait.php', 'MailPoetVendor\\Symfony\\Polyfill\\Ctype\\Ctype' => $baseDir . '/vendor-prefixed/symfony/polyfill-ctype/Ctype.php', 'MailPoetVendor\\Symfony\\Polyfill\\Iconv\\Iconv' => $baseDir . '/vendor-prefixed/symfony/polyfill-iconv/Iconv.php', 'MailPoetVendor\\Symfony\\Polyfill\\Intl\\Idn\\Idn' => $baseDir . '/vendor-prefixed/symfony/polyfill-intl-idn/Idn.php', 'MailPoetVendor\\Symfony\\Polyfill\\Intl\\Idn\\Info' => $baseDir . '/vendor-prefixed/symfony/polyfill-intl-idn/Info.php', 'MailPoetVendor\\Symfony\\Polyfill\\Intl\\Idn\\Resources\\unidata\\DisallowedRanges' => $baseDir . '/vendor-prefixed/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php', 'MailPoetVendor\\Symfony\\Polyfill\\Intl\\Idn\\Resources\\unidata\\Regex' => $baseDir . '/vendor-prefixed/symfony/polyfill-intl-idn/Resources/unidata/Regex.php', 'MailPoetVendor\\Symfony\\Polyfill\\Intl\\Normalizer\\Normalizer' => $baseDir . '/vendor-prefixed/symfony/polyfill-intl-normalizer/Normalizer.php', 'MailPoetVendor\\Symfony\\Polyfill\\Mbstring\\Mbstring' => $baseDir . '/vendor-prefixed/symfony/polyfill-mbstring/Mbstring.php', 'MailPoetVendor\\Symfony\\Polyfill\\Php72\\Php72' => $baseDir . '/vendor-prefixed/symfony/polyfill-php72/Php72.php', 'MailPoetVendor\\Symfony\\Polyfill\\Php80\\Php80' => $baseDir . '/vendor-prefixed/symfony/polyfill-php80/Php80.php', 'MailPoetVendor\\Text_Diff_Renderer_parallel' => $baseDir . '/vendor-prefixed/cerdic/css-tidy/testing/unit-tests/class.Text_Diff_Renderer_parallel.php', 'MailPoetVendor\\Twig\\Cache\\CacheInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Cache/CacheInterface.php', 'MailPoetVendor\\Twig\\Cache\\FilesystemCache' => $baseDir . '/vendor-prefixed/twig/twig/src/Cache/FilesystemCache.php', 'MailPoetVendor\\Twig\\Cache\\NullCache' => $baseDir . '/vendor-prefixed/twig/twig/src/Cache/NullCache.php', 'MailPoetVendor\\Twig\\Compiler' => $baseDir . '/vendor-prefixed/twig/twig/src/Compiler.php', 'MailPoetVendor\\Twig\\Environment' => $baseDir . '/vendor-prefixed/twig/twig/src/Environment.php', 'MailPoetVendor\\Twig\\Error\\Error' => $baseDir . '/vendor-prefixed/twig/twig/src/Error/Error.php', 'MailPoetVendor\\Twig\\Error\\LoaderError' => $baseDir . '/vendor-prefixed/twig/twig/src/Error/LoaderError.php', 'MailPoetVendor\\Twig\\Error\\RuntimeError' => $baseDir . '/vendor-prefixed/twig/twig/src/Error/RuntimeError.php', 'MailPoetVendor\\Twig\\Error\\SyntaxError' => $baseDir . '/vendor-prefixed/twig/twig/src/Error/SyntaxError.php', 'MailPoetVendor\\Twig\\ExpressionParser' => $baseDir . '/vendor-prefixed/twig/twig/src/ExpressionParser.php', 'MailPoetVendor\\Twig\\ExtensionSet' => $baseDir . '/vendor-prefixed/twig/twig/src/ExtensionSet.php', 'MailPoetVendor\\Twig\\Extension\\AbstractExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/AbstractExtension.php', 'MailPoetVendor\\Twig\\Extension\\CoreExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/CoreExtension.php', 'MailPoetVendor\\Twig\\Extension\\DebugExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/DebugExtension.php', 'MailPoetVendor\\Twig\\Extension\\EscaperExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/EscaperExtension.php', 'MailPoetVendor\\Twig\\Extension\\ExtensionInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/ExtensionInterface.php', 'MailPoetVendor\\Twig\\Extension\\GlobalsInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/GlobalsInterface.php', 'MailPoetVendor\\Twig\\Extension\\InitRuntimeInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/InitRuntimeInterface.php', 'MailPoetVendor\\Twig\\Extension\\OptimizerExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/OptimizerExtension.php', 'MailPoetVendor\\Twig\\Extension\\ProfilerExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/ProfilerExtension.php', 'MailPoetVendor\\Twig\\Extension\\RuntimeExtensionInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/RuntimeExtensionInterface.php', 'MailPoetVendor\\Twig\\Extension\\SandboxExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/SandboxExtension.php', 'MailPoetVendor\\Twig\\Extension\\StagingExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/StagingExtension.php', 'MailPoetVendor\\Twig\\Extension\\StringLoaderExtension' => $baseDir . '/vendor-prefixed/twig/twig/src/Extension/StringLoaderExtension.php', 'MailPoetVendor\\Twig\\FileExtensionEscapingStrategy' => $baseDir . '/vendor-prefixed/twig/twig/src/FileExtensionEscapingStrategy.php', 'MailPoetVendor\\Twig\\Lexer' => $baseDir . '/vendor-prefixed/twig/twig/src/Lexer.php', 'MailPoetVendor\\Twig\\Loader\\ArrayLoader' => $baseDir . '/vendor-prefixed/twig/twig/src/Loader/ArrayLoader.php', 'MailPoetVendor\\Twig\\Loader\\ChainLoader' => $baseDir . '/vendor-prefixed/twig/twig/src/Loader/ChainLoader.php', 'MailPoetVendor\\Twig\\Loader\\ExistsLoaderInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Loader/ExistsLoaderInterface.php', 'MailPoetVendor\\Twig\\Loader\\FilesystemLoader' => $baseDir . '/vendor-prefixed/twig/twig/src/Loader/FilesystemLoader.php', 'MailPoetVendor\\Twig\\Loader\\LoaderInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Loader/LoaderInterface.php', 'MailPoetVendor\\Twig\\Loader\\SourceContextLoaderInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/Loader/SourceContextLoaderInterface.php', 'MailPoetVendor\\Twig\\Markup' => $baseDir . '/vendor-prefixed/twig/twig/src/Markup.php', 'MailPoetVendor\\Twig\\NodeTraverser' => $baseDir . '/vendor-prefixed/twig/twig/src/NodeTraverser.php', 'MailPoetVendor\\Twig\\NodeVisitor\\AbstractNodeVisitor' => $baseDir . '/vendor-prefixed/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php', 'MailPoetVendor\\Twig\\NodeVisitor\\EscaperNodeVisitor' => $baseDir . '/vendor-prefixed/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php', 'MailPoetVendor\\Twig\\NodeVisitor\\MacroAutoImportNodeVisitor' => $baseDir . '/vendor-prefixed/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php', 'MailPoetVendor\\Twig\\NodeVisitor\\NodeVisitorInterface' => $baseDir . '/vendor-prefixed/twig/twig/src/NodeVisitor/NodeVisitorInterface.php', 'MailPoetVendor\\Twig\\NodeVisitor\\OptimizerNodeVisitor' => $baseDir . '/vendor-prefixed/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php', 'MailPoetVendor\\Twig\\NodeVisitor\\SafeAnalysisNodeVisitor' => $baseDir . '/vendor-prefixed/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php', 'MailPoetVendor\\Twig\\NodeVisitor\\SandboxNodeVisitor' => $baseDir . '/vendor-prefixed/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php', 'MailPoetVendor\\Twig\\Node\\AutoEscapeNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/AutoEscapeNode.php', 'MailPoetVendor\\Twig\\Node\\BlockNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/BlockNode.php', 'MailPoetVendor\\Twig\\Node\\BlockReferenceNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/BlockReferenceNode.php', 'MailPoetVendor\\Twig\\Node\\BodyNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/BodyNode.php', 'MailPoetVendor\\Twig\\Node\\CheckSecurityNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/CheckSecurityNode.php', 'MailPoetVendor\\Twig\\Node\\CheckToStringNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/CheckToStringNode.php', 'MailPoetVendor\\Twig\\Node\\DeprecatedNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/DeprecatedNode.php', 'MailPoetVendor\\Twig\\Node\\DoNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/DoNode.php', 'MailPoetVendor\\Twig\\Node\\EmbedNode' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/EmbedNode.php', 'MailPoetVendor\\Twig\\Node\\Expression\\AbstractExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/AbstractExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\ArrayExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/ArrayExpression.php', 'MailPoetVendor\\Twig\\Node\\Expression\\ArrowFunctionExpression' => $baseDir . '/vendor-prefixed/twig/twig/src/Node/Expression/ArrowFunctionExpression.php', 'MailPoetVendor\\Twig\\N