PluginProbe
Media Cloud Sync / 1.4.2
Media Cloud Sync v1.4.2
1.4.2 1.4.1 1.4.0 1.3.12 1.3.11 1.3.10 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.1.0 1.1.1 1.2.0 1.2.10 1.2.11 1.2.12 1.2.13 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 All 36 releases
media-cloud-sync / includes / autoloader.php

autoloader.php in Media Cloud Sync 1.4.2, at includes/autoloader.php

243 lines 5.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 namespace Dudlewebs\WPMCS;
3
4 defined('ABSPATH') || exit;
5
6 /**
7 * Plugin autoloader.
8 *
9 * Plugin autoloader handler class is responsible for loading the different
10 * classes needed to run the plugin.
11 *
12 * @since 1.0.0
13 */
14 class Autoloader {
15
16 /**
17 * Classes map.
18 *
19 * Maps Plugin classes to file names.
20 *
21 * @since 1.0.0
22 * @access private
23 * @static
24 *
25 * @var array Classes used by *.
26 */
27 private static $classes_map;
28
29 /**
30 * Classes aliases.
31 *
32 * Maps * classes to aliases.
33 *
34 * @since 1.0.0
35 * @access private
36 * @static
37 *
38 * @var array Classes aliases.
39 */
40 private static $classes_aliases;
41
42 /**
43 * Default path for autoloader.
44 *
45 * @var string
46 */
47 private static $default_path;
48
49 /**
50 * Default namespace for autoloader.
51 *
52 * @var string
53 */
54 private static $default_namespace;
55
56 /**
57 * Run autoloader.
58 *
59 * Register a function as `__autoload()` implementation.
60 *
61 * @param string $default_path
62 * @param string $default_namespace
63 *
64 * @since 1.0.0
65 * @access public
66 * @static
67 */
68 public static function run( $default_path = '', $default_namespace = '' ) {
69 if ( '' === $default_path ) {
70 $default_path = WPMCS_PATH;
71 }
72
73 if ( '' === $default_namespace ) {
74 $default_namespace = __NAMESPACE__;
75 }
76
77 self::$default_path = $default_path;
78 self::$default_namespace = $default_namespace;
79
80 spl_autoload_register( [ __CLASS__, 'autoload' ] );
81 }
82
83 /**
84 * Get classes aliases.
85 *
86 * Retrieve the classes aliases names.
87 *
88 * @since 1.0.0
89 * @access public
90 * @static
91 *
92 * @return array Classes aliases.
93 */
94 public static function get_classes_aliases() {
95 if ( ! self::$classes_aliases ) {
96 self::init_classes_aliases();
97 }
98
99 return self::$classes_aliases;
100 }
101
102 public static function get_classes_map() {
103 if ( ! self::$classes_map ) {
104 self::init_classes_map();
105 }
106
107 return self::$classes_map;
108 }
109
110 private static function init_classes_map() {
111 self::$classes_map = [
112 // Config Files
113 'Utils' => 'includes/config/utils.php',
114 'Schema' => 'includes/config/schema.php',
115
116 'Api' => 'includes/api.php',
117 'Main' => 'includes/main.php',
118 'Notices' => 'includes/notices.php',
119 'Front' => 'includes/front.php',
120 'Admin' => 'includes/admin.php',
121
122 // Upgrade
123 'Upgrade' => 'includes/upgrade/upgrade.php',
124
125 // Base Files
126 'Service' => 'includes/base/services/service.php',
127 'Item' => 'includes/base/item.php',
128 'Db' => 'includes/base/db.php',
129 'Cdn' => 'includes/base/cdn.php',
130 'Cache' => 'includes/base/cache.php',
131 'Counter' => 'includes/base/counter.php',
132 'BGRunner' => 'includes/base/bg-runner.php',
133 'Logger' => 'includes/base/logger.php',
134
135 // Integrations
136 'Integration' => 'includes/integrations/integrations.php',
137 'MediaLibrary' => 'includes/integrations/media-library.php',
138 'Acf' => 'includes/integrations/acf.php',
139 'Imagify' => 'includes/integrations/imagify/imagify.php',
140 'ImagifyPushCDN' => 'includes/integrations/imagify/push-cdn.php',
141 'WooCommerce' => 'includes/integrations/woocommerce.php',
142
143 // Compatibility
144 'Compatibility' => 'includes/compatbility/compatibility.php',
145
146 // Filters
147 'Filter' => 'includes/filters/filters.php',
148 'FilterContent' => 'includes/filters/content.php',
149
150 // Services
151 'S3' => 'includes/base/services/s3.php',
152 'GCloud' => 'includes/base/services/gcloud.php',
153 'DOcean' => 'includes/base/services/docean.php',
154 'CloudflareR2' => 'includes/base/services/cloudflare-r2.php',
155 'S3Compatible' => 'includes/base/services/s3compatible.php',
156
157 // Stream wrappers
158 'StreamWrapper' => 'includes/base/stream-wrappers/stream-wrapper.php',
159 'ReadOnlyStreamWrapperTrait' => 'includes/base/stream-wrappers/readonly-trait.php',
160 'ReadOnlyS3StreamWrapper' => 'includes/base/stream-wrappers/s3.php',
161 'ReadOnlyGcsStreamWrapper' => 'includes/base/stream-wrappers/gcloud.php',
162
163 // Sync
164 'SyncToCloud' => 'includes/bulk/sync-to-cloud.php',
165 'Sync' => 'includes/bulk/sync.php',
166 ];
167 }
168
169
170
171 private static function init_classes_aliases() {
172 self::$classes_aliases = [];
173 }
174
175 /**
176 * Load class.
177 *
178 * For a given class name, require the class file.
179 *
180 * @since 1.0.0
181 * @access private
182 * @static
183 *
184 * @param string $relative_class_name Class name.
185 */
186 private static function load_class( $relative_class_name ) {
187 $classes_map = self::get_classes_map();
188
189 if ( isset( $classes_map[ $relative_class_name ] ) ) {
190 $filename = self::$default_path . '/' . $classes_map[ $relative_class_name ];
191 } else {
192 $filename = strtolower(
193 preg_replace(
194 [ '/([a-z])([A-Z])/', '/_/', '/\\\/' ],
195 [ '$1-$2', '-', DIRECTORY_SEPARATOR ],
196 $relative_class_name
197 )
198 );
199
200 $filename = self::$default_path . $filename . '.php';
201 }
202
203 if ( is_readable( $filename ) ) {
204 require $filename;
205 }
206 }
207
208 /**
209 * Autoload.
210 *
211 * For a given class, check if it exist and load it.
212 *
213 * @since 1.0.0
214 * @access private
215 * @static
216 *
217 * @param string $class Class name.
218 */
219 private static function autoload( $class ) {
220 if ( 0 !== strpos( $class, self::$default_namespace . '\\' ) ) {
221 return;
222 }
223
224 $relative_class_name = str_replace( self::$default_namespace.'\\', '', $class );
225
226 $classes_aliases = self::get_classes_aliases();
227
228 $has_class_alias = isset( $classes_aliases[ $relative_class_name ] );
229
230 $final_class_name = self::$default_namespace . '\\' . $relative_class_name;
231
232 if ( ! class_exists( $final_class_name ) ) {
233 self::load_class( $relative_class_name );
234 }
235
236 if ( $has_class_alias ) {
237 class_alias( $final_class_name, $class );
238
239 }
240 }
241 }
242
243