PluginProbe
Elementor Website Builder – more than just a page builder / 4.3.0
Elementor Website Builder – more than just a page builder v4.3.0
4.3.2 4.3.1 4.3.0 4.3.0-beta3 4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 All 455 releases
elementor / vendor / jetpack-autoloader / class-latest-autoloader-guard.php

class-latest-autoloader-guard.php in Elementor Website Builder – more than just a page builder 4.3.0, at vendor/jetpack-autoloader/class-latest-autoloader-guard.php

166 lines 5.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * This file was automatically generated by automattic/jetpack-autoloader.
4 *
5 * @package automattic/jetpack-autoloader
6 */
7
8 namespace Automattic\Jetpack\Autoloader\jp24d5308311251c19324b20547482392a\al5_0_23;
9
10 // phpcs:ignore
11
12 /**
13 * This class ensures that we're only executing the latest autoloader.
14 */
15 class Latest_Autoloader_Guard {
16
17 /**
18 * The Plugins_Handler instance.
19 *
20 * @var Plugins_Handler
21 */
22 private $plugins_handler;
23
24 /**
25 * The Autoloader_Handler instance.
26 *
27 * @var Autoloader_Handler
28 */
29 private $autoloader_handler;
30
31 /**
32 * The Autoloader_locator instance.
33 *
34 * @var Autoloader_Locator
35 */
36 private $autoloader_locator;
37
38 /**
39 * The constructor.
40 *
41 * @param Plugins_Handler $plugins_handler The Plugins_Handler instance.
42 * @param Autoloader_Handler $autoloader_handler The Autoloader_Handler instance.
43 * @param Autoloader_Locator $autoloader_locator The Autoloader_Locator instance.
44 */
45 public function __construct( $plugins_handler, $autoloader_handler, $autoloader_locator ) {
46 $this->plugins_handler = $plugins_handler;
47 $this->autoloader_handler = $autoloader_handler;
48 $this->autoloader_locator = $autoloader_locator;
49 }
50
51 /**
52 * Indicates whether or not the autoloader should be initialized. Note that this function
53 * has the side-effect of actually loading the latest autoloader in the event that this
54 * is not it.
55 *
56 * @param string $current_plugin The current plugin we're checking.
57 * @param string[] $plugins The active plugins to check for autoloaders in.
58 * @param bool $was_included_by_autoloader Indicates whether or not this autoloader was included by another.
59 *
60 * @return bool True if we should stop initialization, otherwise false.
61 */
62 public function should_stop_init( $current_plugin, $plugins, $was_included_by_autoloader ) {
63 global $jetpack_autoloader_latest_version;
64
65 // We need to reset the autoloader when the plugins change because
66 // that means the autoloader was generated with a different list.
67 if ( $this->plugins_handler->have_plugins_changed( $plugins ) ) {
68 $this->autoloader_handler->reset_autoloader();
69 }
70
71 // When the latest autoloader has already been found we don't need to search for it again.
72 // We should take care however because this will also trigger if the autoloader has been
73 // included by an older one.
74 if ( isset( $jetpack_autoloader_latest_version ) && ! $was_included_by_autoloader ) {
75 return true;
76 }
77
78 $latest_plugin = $this->autoloader_locator->find_latest_autoloader( $plugins, $jetpack_autoloader_latest_version );
79 if ( isset( $latest_plugin ) && $latest_plugin !== $current_plugin ) {
80 require $this->autoloader_locator->get_autoloader_path( $latest_plugin );
81 return true;
82 }
83
84 return false;
85 }
86
87 /**
88 * Check for conflicting autoloaders.
89 *
90 * A common source of strange and confusing problems is when another plugin
91 * registers a Composer autoloader at a higher priority that us. If enabled,
92 * check for this problem and warn about it.
93 *
94 * Called from the plugins_loaded hook.
95 *
96 * @since 3.1.0
97 * @return void
98 */
99 public function check_for_conflicting_autoloaders() {
100 if ( ! defined( 'JETPACK_AUTOLOAD_DEBUG_CONFLICTING_LOADERS' ) || ! JETPACK_AUTOLOAD_DEBUG_CONFLICTING_LOADERS ) {
101 return;
102 }
103
104 global $jetpack_autoloader_loader;
105 if ( ! isset( $jetpack_autoloader_loader ) ) {
106 return;
107 }
108 $prefixes = array();
109 foreach ( ( $jetpack_autoloader_loader->get_class_map() ?? array() ) as $classname => $data ) {
110 $parts = explode( '\\', trim( $classname, '\\' ) );
111 array_pop( $parts );
112 while ( $parts ) {
113 $prefixes[ implode( '\\', $parts ) . '\\' ] = true;
114 array_pop( $parts );
115 }
116 }
117 foreach ( ( $jetpack_autoloader_loader->get_psr4_map() ?? array() ) as $prefix => $data ) {
118 $parts = explode( '\\', trim( $prefix, '\\' ) );
119 while ( $parts ) {
120 $prefixes[ implode( '\\', $parts ) . '\\' ] = true;
121 array_pop( $parts );
122 }
123 }
124
125 $autoload_chain = spl_autoload_functions();
126 if ( ! $autoload_chain ) {
127 return;
128 }
129
130 foreach ( $autoload_chain as $autoloader ) {
131 // No need to check anything after us.
132 if ( is_array( $autoloader ) && is_string( $autoloader[0] ) && substr( $autoloader[0], 0, strlen( __NAMESPACE__ ) + 1 ) === __NAMESPACE__ . '\\' ) {
133 break;
134 }
135
136 // We can check Composer autoloaders easily enough.
137 if ( is_array( $autoloader ) && $autoloader[0] instanceof \Composer\Autoload\ClassLoader && is_callable( array( $autoloader[0], 'getPrefixesPsr4' ) ) ) {
138 $composer_autoloader = $autoloader[0];
139 foreach ( $composer_autoloader->getClassMap() as $classname => $path ) {
140 if ( $jetpack_autoloader_loader->find_class_file( $classname ) ) {
141 $msg = "A Composer autoloader is registered with a higher priority than the Jetpack Autoloader and would also handle some of the classes we handle (e.g. $classname => $path). This may cause strange and confusing problems.";
142 wp_trigger_error( '', $msg );
143 continue 2;
144 }
145 }
146 foreach ( $composer_autoloader->getPrefixesPsr4() as $prefix => $paths ) {
147 if ( isset( $prefixes[ $prefix ] ) ) {
148 $path = array_pop( $paths );
149 $msg = "A Composer autoloader is registered with a higher priority than the Jetpack Autoloader and would also handle some of the namespaces we handle (e.g. $prefix => $path). This may cause strange and confusing problems.";
150 wp_trigger_error( '', $msg );
151 continue 2;
152 }
153 }
154 foreach ( $composer_autoloader->getPrefixes() as $prefix => $paths ) {
155 if ( isset( $prefixes[ $prefix ] ) ) {
156 $path = array_pop( $paths );
157 $msg = "A Composer autoloader is registered with a higher priority than the Jetpack Autoloader and would also handle some of the namespaces we handle (e.g. $prefix => $path). This may cause strange and confusing problems.";
158 wp_trigger_error( '', $msg );
159 continue 2;
160 }
161 }
162 }
163 }
164 }
165 }
166