ElementorPro/core/modules-manager.php
2024-07-07 01:00:30 +02:00

115 lines
2.2 KiB
PHP

<?php
namespace ElementorPro\Core;
use ElementorPro\Plugin;
use ElementorPro\Base\Module_Base;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}
final class Modules_Manager {
/**
* @var Module_Base[]
*/
private $modules = [];
public function __construct() {
$modules = [
'query-control',
'custom-attributes',
'custom-css',
'page-transitions',
// role-manager Must be before Global Widget
'role-manager',
'global-widget',
'assets-manager',
'popup',
'motion-fx',
'usage',
'screenshots',
'compatibility-tag',
'admin-top-bar',
'notes',
'announcements',
'display-conditions',
'element-manager',
// Modules with Widgets.
'theme-builder',
'loop-builder',
'posts',
'gallery',
'forms',
'slides',
'nav-menu',
'animated-headline',
'hotspot',
'pricing',
'flip-box',
'call-to-action',
'carousel',
'table-of-contents',
'countdown',
'share-buttons',
'theme-elements',
'blockquote',
'custom-code',
'woocommerce',
'social',
'library',
'dynamic-tags',
'scroll-snap',
'sticky',
'wp-cli',
'lottie',
'code-highlight',
'video-playlist',
'payments',
'progress-tracker',
'mega-menu',
'nested-carousel',
'loop-filter',
'tiers',
];
foreach ( $modules as $module_name ) {
$class_name = str_replace( '-', ' ', $module_name );
$class_name = str_replace( ' ', '', ucwords( $class_name ) );
$class_name = '\ElementorPro\Modules\\' . $class_name . '\Module';
/** @var Module_Base $class_name */
$experimental_data = $class_name::get_experimental_data();
if ( $experimental_data ) {
Plugin::elementor()->experiments->add_feature( $experimental_data );
if ( ! Plugin::elementor()->experiments->is_feature_active( $experimental_data['name'] ) ) {
continue;
}
}
if ( $class_name::is_active() ) {
$this->modules[ $module_name ] = $class_name::instance();
}
}
}
/**
* @param string $module_name
*
* @return Module_Base|Module_Base[]
*/
public function get_modules( $module_name ) {
if ( $module_name ) {
if ( isset( $this->modules[ $module_name ] ) ) {
return $this->modules[ $module_name ];
}
return null;
}
return $this->modules;
}
}