PageRenderTime 163ms CodeModel.GetById 55ms RepoModel.GetById 0ms app.codeStats 0ms

/wp-content/plugins/elementor/includes/autoloader.php

https://gitlab.com/campus-academy/krowkaramel
PHP | 311 lines | 184 code | 32 blank | 95 comment | 11 complexity | 530191d4cf31c19d1f74723a1e3c3890 MD5 | raw file
  1. <?php
  2. namespace Elementor;
  3. if ( ! defined( 'ABSPATH' ) ) {
  4. exit; // Exit if accessed directly.
  5. }
  6. /**
  7. * Elementor autoloader.
  8. *
  9. * Elementor autoloader handler class is responsible for loading the different
  10. * classes needed to run the plugin.
  11. *
  12. * @since 1.6.0
  13. */
  14. class Autoloader {
  15. /**
  16. * Classes map.
  17. *
  18. * Maps Elementor classes to file names.
  19. *
  20. * @since 1.6.0
  21. * @access private
  22. * @static
  23. *
  24. * @var array Classes used by elementor.
  25. */
  26. private static $classes_map;
  27. /**
  28. * Classes aliases.
  29. *
  30. * Maps Elementor classes to aliases.
  31. *
  32. * @since 1.6.0
  33. * @access private
  34. * @static
  35. *
  36. * @var array Classes aliases.
  37. */
  38. private static $classes_aliases;
  39. /**
  40. * Default path for autoloader.
  41. *
  42. * @var string
  43. */
  44. private static $default_path;
  45. /**
  46. * Default namespace for autoloader.
  47. *
  48. * @var string
  49. */
  50. private static $default_namespace;
  51. /**
  52. * Run autoloader.
  53. *
  54. * Register a function as `__autoload()` implementation.
  55. *
  56. * @param string $default_path
  57. * @param string $default_namespace
  58. *
  59. * @since 1.6.0
  60. * @access public
  61. * @static
  62. */
  63. public static function run( $default_path = '', $default_namespace = '' ) {
  64. if ( '' === $default_path ) {
  65. $default_path = ELEMENTOR_PATH;
  66. }
  67. if ( '' === $default_namespace ) {
  68. $default_namespace = __NAMESPACE__;
  69. }
  70. self::$default_path = $default_path;
  71. self::$default_namespace = $default_namespace;
  72. spl_autoload_register( [ __CLASS__, 'autoload' ] );
  73. }
  74. /**
  75. * Get classes aliases.
  76. *
  77. * Retrieve the classes aliases names.
  78. *
  79. * @since 1.6.0
  80. * @access public
  81. * @static
  82. *
  83. * @return array Classes aliases.
  84. */
  85. public static function get_classes_aliases() {
  86. if ( ! self::$classes_aliases ) {
  87. self::init_classes_aliases();
  88. }
  89. return self::$classes_aliases;
  90. }
  91. public static function get_classes_map() {
  92. if ( ! self::$classes_map ) {
  93. self::init_classes_map();
  94. }
  95. return self::$classes_map;
  96. }
  97. private static function init_classes_map() {
  98. self::$classes_map = [
  99. 'Api' => 'includes/api.php',
  100. 'Base_Control' => 'includes/controls/base.php',
  101. 'Base_Data_Control' => 'includes/controls/base-data.php',
  102. 'Base_UI_Control' => 'includes/controls/base-ui.php',
  103. 'Beta_Testers' => 'includes/beta-testers.php',
  104. 'Compatibility' => 'includes/compatibility.php',
  105. 'Conditions' => 'includes/conditions.php',
  106. 'Controls_Manager' => 'includes/managers/controls.php',
  107. 'Controls_Stack' => 'includes/base/controls-stack.php',
  108. 'Sub_Controls_Stack' => 'includes/base/sub-controls-stack.php',
  109. 'DB' => 'includes/db.php',
  110. 'Elements_Manager' => 'includes/managers/elements.php',
  111. 'Embed' => 'includes/embed.php',
  112. 'Fonts' => 'includes/fonts.php',
  113. 'Frontend' => 'includes/frontend.php',
  114. 'Group_Control_Base' => 'includes/controls/groups/base.php',
  115. 'Group_Control_Interface' => 'includes/interfaces/group-control.php',
  116. 'Heartbeat' => 'includes/heartbeat.php',
  117. 'Images_Manager' => 'includes/managers/image.php',
  118. 'Maintenance' => 'includes/maintenance.php',
  119. 'Maintenance_Mode' => 'includes/maintenance-mode.php',
  120. 'Preview' => 'includes/preview.php',
  121. 'Rollback' => 'includes/rollback.php',
  122. 'Settings' => 'includes/settings/settings.php',
  123. 'Settings_Controls' => 'includes/settings/controls.php',
  124. 'Settings_Validations' => 'includes/settings/validations.php',
  125. 'Settings_Page' => 'includes/settings/settings-page.php',
  126. 'Shapes' => 'includes/shapes.php',
  127. 'Skins_Manager' => 'includes/managers/skins.php',
  128. 'Icons_Manager' => 'includes/managers/icons.php',
  129. 'Stylesheet' => 'includes/stylesheet.php',
  130. 'System_Info\Main' => 'includes/settings/system-info/main.php',
  131. 'TemplateLibrary\Classes\Import_Images' => 'includes/template-library/classes/class-import-images.php',
  132. 'TemplateLibrary\Manager' => 'includes/template-library/manager.php',
  133. 'TemplateLibrary\Source_Base' => 'includes/template-library/sources/base.php',
  134. 'TemplateLibrary\Source_Local' => 'includes/template-library/sources/local.php',
  135. 'TemplateLibrary\Source_Remote' => 'includes/template-library/sources/remote.php',
  136. 'Tools' => 'includes/settings/tools.php',
  137. 'Tracker' => 'includes/tracker.php',
  138. 'User' => 'includes/user.php',
  139. 'Utils' => 'includes/utils.php',
  140. 'Widget_WordPress' => 'includes/widgets/wordpress.php',
  141. 'Widgets_Manager' => 'includes/managers/widgets.php',
  142. 'WordPress_Widgets_Manager' => 'includes/managers/wordpress-widgets.php',
  143. ];
  144. $controls_names = Controls_Manager::get_controls_names();
  145. $controls_names = array_merge( $controls_names, [
  146. 'base_multiple',
  147. 'base_units',
  148. ] );
  149. foreach ( $controls_names as $control_name ) {
  150. $class_name = 'Control_' . self::normalize_class_name( $control_name, '_' );
  151. self::$classes_map[ $class_name ] = 'includes/controls/' . str_replace( '_', '-', $control_name ) . '.php';
  152. }
  153. $controls_groups_names = Controls_Manager::get_groups_names();
  154. foreach ( $controls_groups_names as $group_name ) {
  155. $class_name = 'Group_Control_' . self::normalize_class_name( $group_name, '_' );
  156. self::$classes_map[ $class_name ] = 'includes/controls/groups/' . $group_name . '.php';
  157. }
  158. }
  159. /**
  160. * Normalize Class Name
  161. *
  162. * Used to convert control names to class names.
  163. *
  164. * @param $string
  165. * @param string $delimiter
  166. *
  167. * @return mixed
  168. */
  169. private static function normalize_class_name( $string, $delimiter = ' ' ) {
  170. return ucwords( str_replace( '-', '_', $string ), $delimiter );
  171. }
  172. private static function init_classes_aliases() {
  173. self::$classes_aliases = [
  174. 'System_Info\Main' => [
  175. 'replacement' => 'Modules\System_Info\Module',
  176. 'version' => '2.9.0',
  177. ],
  178. 'System_Info\Classes\Abstracts\Base_Reporter' => [
  179. 'replacement' => 'Modules\System_Info\Reporters\Base',
  180. 'version' => '2.9.0',
  181. ],
  182. 'System_Info\Classes\Server_Reporter' => [
  183. 'replacement' => 'Modules\System_Info\Reporters\Server',
  184. 'version' => '2.9.0',
  185. ],
  186. 'System_Info\Classes\MU_Plugins_Reporter' => [
  187. 'replacement' => 'Modules\System_Info\Reporters\MU_Plugins',
  188. 'version' => '2.9.0',
  189. ],
  190. 'System_Info\Classes\Network_Plugins_Reporter' => [
  191. 'replacement' => 'Modules\System_Info\Reporters\Network_Plugins',
  192. 'version' => '2.9.0',
  193. ],
  194. 'System_Info\Classes\Plugins_Reporter' => [
  195. 'replacement' => 'Modules\System_Info\Reporters\Plugins',
  196. 'version' => '2.9.0',
  197. ],
  198. 'System_Info\Classes\Theme_Reporter' => [
  199. 'replacement' => 'Modules\System_Info\Reporters\Theme',
  200. 'version' => '2.9.0',
  201. ],
  202. 'System_Info\Classes\User_Reporter' => [
  203. 'replacement' => 'Modules\System_Info\Reporters\User',
  204. 'version' => '2.9.0',
  205. ],
  206. 'System_Info\Helpers\Model_Helper' => [
  207. 'replacement' => 'Modules\System_Info\Helpers\Model_Helper',
  208. 'version' => '2.9.0',
  209. ],
  210. ];
  211. }
  212. /**
  213. * Load class.
  214. *
  215. * For a given class name, require the class file.
  216. *
  217. * @since 1.6.0
  218. * @access private
  219. * @static
  220. *
  221. * @param string $relative_class_name Class name.
  222. */
  223. private static function load_class( $relative_class_name ) {
  224. $classes_map = self::get_classes_map();
  225. if ( isset( $classes_map[ $relative_class_name ] ) ) {
  226. $filename = self::$default_path . '/' . $classes_map[ $relative_class_name ];
  227. } else {
  228. $filename = strtolower(
  229. preg_replace(
  230. [ '/([a-z])([A-Z])/', '/_/', '/\\\/' ],
  231. [ '$1-$2', '-', DIRECTORY_SEPARATOR ],
  232. $relative_class_name
  233. )
  234. );
  235. $filename = self::$default_path . $filename . '.php';
  236. }
  237. if ( is_readable( $filename ) ) {
  238. require $filename;
  239. }
  240. }
  241. /**
  242. * Autoload.
  243. *
  244. * For a given class, check if it exist and load it.
  245. *
  246. * @since 1.6.0
  247. * @access private
  248. * @static
  249. *
  250. * @param string $class Class name.
  251. */
  252. private static function autoload( $class ) {
  253. if ( 0 !== strpos( $class, self::$default_namespace . '\\' ) ) {
  254. return;
  255. }
  256. $relative_class_name = preg_replace( '/^' . self::$default_namespace . '\\\/', '', $class );
  257. $classes_aliases = self::get_classes_aliases();
  258. $has_class_alias = isset( $classes_aliases[ $relative_class_name ] );
  259. // Backward Compatibility: Save old class name for set an alias after the new class is loaded
  260. if ( $has_class_alias ) {
  261. $alias_data = $classes_aliases[ $relative_class_name ];
  262. $relative_class_name = $alias_data['replacement'];
  263. }
  264. $final_class_name = self::$default_namespace . '\\' . $relative_class_name;
  265. if ( ! class_exists( $final_class_name ) ) {
  266. self::load_class( $relative_class_name );
  267. }
  268. if ( $has_class_alias ) {
  269. class_alias( $final_class_name, $class );
  270. Utils::handle_deprecation( $class, $alias_data['version'], $final_class_name );
  271. }
  272. }
  273. }