PluginProbe ʕ •ᴥ•ʔ
MailPoet – Newsletters, Email Marketing, and Automation / 5.35.1
MailPoet – Newsletters, Email Marketing, and Automation v5.35.1
5.36.0 5.35.1 5.35.0 5.34.3 5.34.2 5.34.1 5.34.0 5.33.1 5.33.0 5.32.0 5.31.0 5.30.0 5.29.0 5.28.1 5.28.0 5.27.0 5.26.0 5.26.1 5.25.0 5.24.0 4.43.0 4.43.1 4.44.0 4.44.1 4.45.0 4.46.0 4.47.0 4.48.0 4.48.1 4.48.2 4.49.0 4.49.1 4.5.0 4.5.1 4.5.2 4.50.0 4.50.1 4.51.0 4.51.1 4.51.2 4.52.0 4.53.0 4.54.0 4.55.0 4.56.0 4.57.0 4.58.0 4.58.1 4.58.2 4.6.0 4.6.1 4.6.2 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 5.0.0 5.0.1 5.0.2 5.1.0 5.1.1 5.10.0 5.10.1 5.11.0 5.12.0 5.12.1 5.12.10 5.12.11 5.12.12 5.12.13 5.12.2 5.12.3 5.12.4 5.12.5 5.12.6 5.12.7 5.12.8 5.12.9 5.13.0 5.13.1 5.13.2 5.14.0 5.14.1 5.14.2 5.14.3 5.15.0 5.15.1 5.16.0 5.16.1 5.16.2 5.16.3 5.16.4 5.17.0 5.17.1 5.17.2 5.17.3 5.17.4 5.17.5 5.17.6 5.18.0 5.19.0 5.2.0 5.2.1 5.2.2 5.2.3 5.20.0 5.21.0 5.21.1 5.21.2 5.21.3 5.22.0 5.22.1 5.22.2 5.22.3 5.22.4 5.23.0 5.23.1 5.23.2 5.3.0 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6 5.3.7 5.4.0 5.4.1 5.4.2 5.5.0 5.5.1 5.5.2 5.6.0 5.6.1 5.6.2 5.6.3 5.6.4 5.7.0 5.7.1 5.8.0 5.8.1 5.9.0 3.0.0-beta.15 3.7.1 3.0.0-beta.16 3.7.2 3.0.0-beta.17 3.7.3 3.0.0-beta.18 3.7.4 3.0.0-beta.19 3.7.5 3.0.0-beta.2 3.7.6 3.0.0-beta.20 3.7.8 3.0.0-beta.21 3.70.0 3.0.0-beta.22 3.71.0 3.0.0-beta.23 3.71.1 3.0.0-beta.23.1 3.71.2 3.0.0-beta.23.2 3.71.3 3.0.0-beta.24 3.72.0 3.0.0-beta.25 3.73.0 3.0.0-beta.26 3.73.1 3.0.0-beta.27 3.73.2 3.0.0-beta.28 3.74.0 3.0.0-beta.29 3.74.1 3.0.0-beta.3 3.74.2 3.0.0-beta.30 3.74.3 3.0.0-beta.31 3.75.0 3.0.0-beta.32 3.75.1 3.0.0-beta.33 3.76.0 3.0.0-beta.33.1 3.77.0 3.0.0-beta.34.0.0 3.77.1 3.0.0-beta.36.0.0 3.78.0 3.0.0-beta.36.0.1 3.79.0 3.0.0-beta.36.2.0 3.8 3.0.0-beta.36.3.0 3.8.1 3.0.0-beta.36.3.1 3.8.2 3.0.0-beta.37.0.0 3.8.3 3.0.0-beta.4 3.8.4 3.0.0-beta.5 3.8.5 3.0.0-beta.6 3.8.6 3.0.0-beta.7 3.80.0 3.0.0-beta.7.1 3.81.0 3.0.0-beta.8 3.82.0 3.0.0-beta.9 3.83.0 3.0.0-rc.1.0.0 3.84.0 3.0.0-rc.1.0.1 3.84.1 3.0.0-rc.1.0.2 3.85.0 3.0.0-rc.1.0.3 3.85.1 3.0.0-rc.1.0.4 3.86.0 3.0.0-rc.2.0.0 3.87.0 3.0.0-rc.2.0.1 3.87.1 3.0.0-rc.2.0.2 3.87.2 3.0.0-rc.2.0.3 3.88.0 3.0.1 3.88.1 3.0.2 3.88.2 3.0.3 3.89.0 3.0.4 3.89.1 3.0.5 3.89.2 3.0.6 3.89.3 3.0.7 3.89.4 3.0.8 3.9.0 3.0.9 3.9.1 3.1.0 3.90.0 3.10 3.90.1 3.10.1 3.90.2 3.100.0 3.91.0 3.100.1 3.91.1 3.100.2 3.92.0 3.101.0 3.92.1 3.101.1 3.93.0 3.102.0 3.93.1 3.102.1 3.94.0 3.103.0 3.95.0 3.103.1 3.95.1 3.11.0 3.96.0 3.11.1 3.96.1 3.11.2 3.97.0 3.11.3 3.98.0 3.11.4 3.98.1 3.11.5 3.99.0 3.12.0 3.99.1 3.12.1 4.0.0 3.13.0 4.0.1 3.14.0 4.1.0 3.14.1 4.1.1 3.15.0 4.10.0 3.16.0 4.11.0 3.16.1 4.11.1 3.16.2 4.12.0 3.16.3 4.12.1 3.17.0 4.12.2 3.17.1 4.13.0 3.17.2 4.14.0 3.18.0 4.15.0 3.18.1 4.16.0 3.18.2 4.17.0 3.19.0 4.17.1 3.19.1 4.18.0 3.19.2 4.18.1 3.19.3 4.19.0 3.2.0 4.2.0 3.2.1 4.20.0 3.2.2 4.20.1 3.2.3 4.20.2 3.2.4 4.21.0 3.2.5 4.22.0 3.20.0 4.22.1 3.21.0 4.22.2 3.21.1 4.23.0 3.22.0 4.24.0 3.23.0 4.25.0 3.23.1 4.26.0 3.23.2 4.26.1 3.24.0 4.27.0 3.25.0 4.28.0 3.25.1 4.29.0 3.26.0 4.3.0 3.26.1 4.3.1 3.27.0 4.30.0 3.28.0 4.31.0 3.29.0 4.31.1 3.3.0 4.32.0 3.3.1 4.33.0 3.3.2 4.34.0 3.3.3 4.35.0 3.3.4 4.35.1 3.3.5 4.36.0 3.3.6 4.37.0 3.30.0 4.38.0 3.31.0 4.39.0 3.31.1 4.4.0 3.32.0 4.40.0 3.32.1 4.41.0 3.32.2 4.41.1 3.33.0 4.41.2 3.34.0 4.41.3 3.34.1 4.42.0 3.34.2 4.42.1 3.34.3 3.34.4 3.35.0 3.35.1 3.35.3 3.35.4 3.36.0 3.37.0 3.37.1 3.37.2 3.37.3 3.38.0 3.38.1 3.39.0 3.39.1 3.39.2 3.4.0 3.4.1 3.4.2 3.4.3 3.4.4 3.40.0 3.40.1 3.41.0 3.41.1 3.41.2 3.42.0 3.42.1 3.42.2 3.42.3 3.43.0 3.43.1 3.44.0 3.45.0 3.45.1 3.46.0 3.46.1 3.46.10 3.46.11 3.46.12 3.46.13 3.46.14 3.46.2 3.46.3 3.46.4 3.46.5 3.46.6 3.46.7 3.46.8 3.46.9 3.47.0 3.47.1 3.47.10 3.47.11 3.47.2 3.47.3 3.47.5 3.47.6 3.47.7 3.47.9 3.48.0 3.48.1 3.49.0 3.49.1 3.5.0 3.5.1 3.50.0 3.51.0 3.51.1 3.51.2 3.52.0 3.53.0 3.54.0 3.54.1 3.54.2 3.54.3 3.55.0 3.55.1 3.56.0 3.56.1 3.56.2 3.57.0 3.57.1 3.58.0 3.59.0 3.59.1 3.59.2 3.6.0 3.6.1 3.6.2 3.6.3 3.6.4 3.6.5 3.6.6 3.6.7 3.60.0 3.60.1 3.60.10 3.60.11 3.60.12 3.60.2 3.60.3 3.60.4 3.60.6 3.60.7 3.60.8 3.60.9 3.61.0 3.62.0 3.62.1 3.63.0 3.64.0 3.64.1 3.64.2 3.64.3 3.65.0 trunk 3.65.1 3.0.0 3.66.0 3.0.0-beta.1 3.67.0 3.0.0-beta.10 3.67.1 3.0.0-beta.11 3.68.0 3.0.0-beta.12 3.69.0 3.0.0-beta.13 3.69.1 3.0.0-beta.14 3.7.0
mailpoet / vendor-prefixed / doctrine / deprecations / src / Deprecation.php
mailpoet / vendor-prefixed / doctrine / deprecations / src Last commit date
Deprecation.php 9 months ago index.php 9 months ago
Deprecation.php
177 lines
1 <?php
2 declare (strict_types=1);
3 namespace MailPoetVendor\Doctrine\Deprecations;
4 if (!defined('ABSPATH')) exit;
5 use MailPoetVendor\Psr\Log\LoggerInterface;
6 use function array_key_exists;
7 use function array_reduce;
8 use function assert;
9 use function debug_backtrace;
10 use function sprintf;
11 use function str_replace;
12 use function strpos;
13 use function strrpos;
14 use function substr;
15 use function trigger_error;
16 use const DEBUG_BACKTRACE_IGNORE_ARGS;
17 use const DIRECTORY_SEPARATOR;
18 use const E_USER_DEPRECATED;
19 class Deprecation
20 {
21 private const TYPE_NONE = 0;
22 private const TYPE_TRACK_DEPRECATIONS = 1;
23 private const TYPE_TRIGGER_ERROR = 2;
24 private const TYPE_PSR_LOGGER = 4;
25 private static $type;
26 private static $logger;
27 private static $ignoredPackages = [];
28 private static $triggeredDeprecations = [];
29 private static $ignoredLinks = [];
30 private static $deduplication = \true;
31 public static function trigger(string $package, string $link, string $message, ...$args) : void
32 {
33 $type = self::$type ?? self::getTypeFromEnv();
34 if ($type === self::TYPE_NONE) {
35 return;
36 }
37 if (isset(self::$ignoredLinks[$link])) {
38 return;
39 }
40 if (array_key_exists($link, self::$triggeredDeprecations)) {
41 self::$triggeredDeprecations[$link]++;
42 } else {
43 self::$triggeredDeprecations[$link] = 1;
44 }
45 if (self::$deduplication === \true && self::$triggeredDeprecations[$link] > 1) {
46 return;
47 }
48 if (isset(self::$ignoredPackages[$package])) {
49 return;
50 }
51 $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
52 $message = sprintf($message, ...$args);
53 self::delegateTriggerToBackend($message, $backtrace, $link, $package);
54 }
55 public static function triggerIfCalledFromOutside(string $package, string $link, string $message, ...$args) : void
56 {
57 $type = self::$type ?? self::getTypeFromEnv();
58 if ($type === self::TYPE_NONE) {
59 return;
60 }
61 $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
62 // first check that the caller is not from a tests folder, in which case we always let deprecations pass
63 if (isset($backtrace[1]['file'], $backtrace[0]['file']) && strpos($backtrace[1]['file'], DIRECTORY_SEPARATOR . 'tests' . DIRECTORY_SEPARATOR) === \false) {
64 $path = DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . str_replace('/', DIRECTORY_SEPARATOR, $package) . DIRECTORY_SEPARATOR;
65 if (strpos($backtrace[0]['file'], $path) === \false) {
66 return;
67 }
68 if (strpos($backtrace[1]['file'], $path) !== \false) {
69 return;
70 }
71 }
72 if (isset(self::$ignoredLinks[$link])) {
73 return;
74 }
75 if (array_key_exists($link, self::$triggeredDeprecations)) {
76 self::$triggeredDeprecations[$link]++;
77 } else {
78 self::$triggeredDeprecations[$link] = 1;
79 }
80 if (self::$deduplication === \true && self::$triggeredDeprecations[$link] > 1) {
81 return;
82 }
83 if (isset(self::$ignoredPackages[$package])) {
84 return;
85 }
86 $message = sprintf($message, ...$args);
87 self::delegateTriggerToBackend($message, $backtrace, $link, $package);
88 }
89 private static function delegateTriggerToBackend(string $message, array $backtrace, string $link, string $package) : void
90 {
91 $type = self::$type ?? self::getTypeFromEnv();
92 if (($type & self::TYPE_PSR_LOGGER) > 0) {
93 $context = ['file' => $backtrace[0]['file'] ?? null, 'line' => $backtrace[0]['line'] ?? null, 'package' => $package, 'link' => $link];
94 assert(self::$logger !== null);
95 self::$logger->notice($message, $context);
96 }
97 if (!(($type & self::TYPE_TRIGGER_ERROR) > 0)) {
98 return;
99 }
100 $message .= sprintf(' (%s:%d called by %s:%d, %s, package %s)', self::basename($backtrace[0]['file'] ?? 'native code'), $backtrace[0]['line'] ?? 0, self::basename($backtrace[1]['file'] ?? 'native code'), $backtrace[1]['line'] ?? 0, $link, $package);
101 @trigger_error($message, E_USER_DEPRECATED);
102 }
103 private static function basename(string $filename) : string
104 {
105 $pos = strrpos($filename, DIRECTORY_SEPARATOR);
106 if ($pos === \false) {
107 return $filename;
108 }
109 return substr($filename, $pos + 1);
110 }
111 public static function enableTrackingDeprecations() : void
112 {
113 self::$type = self::$type ?? self::getTypeFromEnv();
114 self::$type |= self::TYPE_TRACK_DEPRECATIONS;
115 }
116 public static function enableWithTriggerError() : void
117 {
118 self::$type = self::$type ?? self::getTypeFromEnv();
119 self::$type |= self::TYPE_TRIGGER_ERROR;
120 }
121 public static function enableWithPsrLogger(LoggerInterface $logger) : void
122 {
123 self::$type = self::$type ?? self::getTypeFromEnv();
124 self::$type |= self::TYPE_PSR_LOGGER;
125 self::$logger = $logger;
126 }
127 public static function withoutDeduplication() : void
128 {
129 self::$deduplication = \false;
130 }
131 public static function disable() : void
132 {
133 self::$type = self::TYPE_NONE;
134 self::$logger = null;
135 self::$deduplication = \true;
136 self::$ignoredLinks = [];
137 foreach (self::$triggeredDeprecations as $link => $count) {
138 self::$triggeredDeprecations[$link] = 0;
139 }
140 }
141 public static function ignorePackage(string $packageName) : void
142 {
143 self::$ignoredPackages[$packageName] = \true;
144 }
145 public static function ignoreDeprecations(string ...$links) : void
146 {
147 foreach ($links as $link) {
148 self::$ignoredLinks[$link] = \true;
149 }
150 }
151 public static function getUniqueTriggeredDeprecationsCount() : int
152 {
153 return array_reduce(self::$triggeredDeprecations, static function (int $carry, int $count) {
154 return $carry + $count;
155 }, 0);
156 }
157 public static function getTriggeredDeprecations() : array
158 {
159 return self::$triggeredDeprecations;
160 }
161 private static function getTypeFromEnv() : int
162 {
163 switch ($_SERVER['DOCTRINE_DEPRECATIONS'] ?? $_ENV['DOCTRINE_DEPRECATIONS'] ?? null) {
164 case 'trigger':
165 self::$type = self::TYPE_TRIGGER_ERROR;
166 break;
167 case 'track':
168 self::$type = self::TYPE_TRACK_DEPRECATIONS;
169 break;
170 default:
171 self::$type = self::TYPE_NONE;
172 break;
173 }
174 return self::$type;
175 }
176 }
177