modules-manager.php (2690B)
1 <?php 2 namespace Elementor\Core; 3 4 use Elementor\Core\Base\Module; 5 use Elementor\Plugin; 6 7 if ( ! defined( 'ABSPATH' ) ) { 8 exit; // Exit if accessed directly. 9 } 10 11 /** 12 * Elementor modules manager. 13 * 14 * Elementor modules manager handler class is responsible for registering and 15 * managing Elementor modules. 16 * 17 * @since 1.6.0 18 */ 19 class Modules_Manager { 20 21 /** 22 * Registered modules. 23 * 24 * Holds the list of all the registered modules. 25 * 26 * @since 1.6.0 27 * @access public 28 * 29 * @var array 30 */ 31 private $modules = []; 32 33 /** 34 * Modules manager constructor. 35 * 36 * Initializing the Elementor modules manager. 37 * 38 * @since 1.6.0 39 * @access public 40 */ 41 public function __construct() { 42 $modules_namespace_prefix = $this->get_modules_namespace_prefix(); 43 44 foreach ( $this->get_modules_names() as $module_name ) { 45 $class_name = str_replace( '-', ' ', $module_name ); 46 47 $class_name = str_replace( ' ', '', ucwords( $class_name ) ); 48 49 $class_name = $modules_namespace_prefix . '\\Modules\\' . $class_name . '\Module'; 50 51 /** @var Module $class_name */ 52 53 $experimental_data = $class_name::get_experimental_data(); 54 55 if ( $experimental_data ) { 56 Plugin::$instance->experiments->add_feature( $experimental_data ); 57 58 if ( ! Plugin::$instance->experiments->is_feature_active( $experimental_data['name'] ) ) { 59 continue; 60 } 61 } 62 63 if ( $class_name::is_active() ) { 64 $this->modules[ $module_name ] = $class_name::instance(); 65 } 66 } 67 } 68 69 /** 70 * Get modules names. 71 * 72 * Retrieve the modules names. 73 * 74 * @since 2.0.0 75 * @access public 76 * 77 * @return string[] Modules names. 78 */ 79 public function get_modules_names() { 80 return [ 81 'admin-bar', 82 'history', 83 'library', 84 'dynamic-tags', 85 'page-templates', 86 'gutenberg', 87 'wp-cli', 88 'safe-mode', 89 'usage', 90 'dev-tools', 91 'landing-pages', 92 'compatibility-tag', 93 'elements-color-picker', 94 'shapes', 95 'admin-top-bar', 96 ]; 97 } 98 99 /** 100 * Get modules. 101 * 102 * Retrieve all the registered modules or a specific module. 103 * 104 * @since 2.0.0 105 * @access public 106 * 107 * @param string $module_name Module name. 108 * 109 * @return null|Module|Module[] All the registered modules or a specific module. 110 */ 111 public function get_modules( $module_name ) { 112 if ( $module_name ) { 113 if ( isset( $this->modules[ $module_name ] ) ) { 114 return $this->modules[ $module_name ]; 115 } 116 117 return null; 118 } 119 120 return $this->modules; 121 } 122 123 /** 124 * Get modules namespace prefix. 125 * 126 * Retrieve the modules namespace prefix. 127 * 128 * @since 2.0.0 129 * @access protected 130 * 131 * @return string Modules namespace prefix. 132 */ 133 protected function get_modules_namespace_prefix() { 134 return 'Elementor'; 135 } 136 }