HEX
Server: LiteSpeed
System: Linux s1049.use1.mysecurecloudhost.com 4.18.0-477.27.2.lve.el8.x86_64 #1 SMP Wed Oct 11 12:32:56 UTC 2023 x86_64
User: xedaptot (3356)
PHP: 8.3.31
Disabled: NONE
Upload Files
File: /home/xedaptot/gift.naniguide.com/wp-content/plugins/send-app/core/modules-manager.php
<?php
namespace Send_App\Core;

use Send_App\Core\Base\Module_Base;

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

/**
 * class Modules_Manager
 *
 * holds all system nodules and initializes any required external libraries.
 */
final class Modules_Manager {

	private static ?Modules_Manager $instance = null;

	/**
	 * @var Module_Base[]
	 */
	private array $modules = [];

	public function register_modules(): void {
		foreach ( $this->get_module_list() as $module_name ) {
			// turn dash-separated into camel case namespace
			$class_name = str_replace( '-', ' ', $module_name );
			$class_name = str_replace( ' ', '', ucwords( $class_name ) );
			$class_name = '\\Send_App\\Modules\\' . $class_name . '\Module';

			/**
			 * @var Module_Base $class_name
			 */
			if ( $class_name::is_active() ) {
				$this->modules[ $module_name ] = $class_name::get_instance();
			}
		}
	}


	/**
	 * Modules namespaces list
	 *
	 * @return string[]
	 */
	private function get_module_list(): array {
		return [
			'Elementor',
			'Wp_Forms',
			'Ninja_Forms',
			'Woocommerce',
			'Admin',
			'CF7',
			'Gravityforms',
			'Sitedata',
		];
	}

	public function get_modules( string $module_name = '' ) {
		if ( $module_name ) {
			return $this->modules[ $module_name ] ?? null;
		}

		return $this->modules;
	}

	public function include_external_libraries() {
		require_once SEND_PATH . 'vendor/woocommerce/action-scheduler/action-scheduler.php';
	}

	public function init() {
		foreach ( $this->modules as $module ) {
			$module->init();
		}
	}

	public static function get_instance(): Modules_Manager {
		if ( is_null( self::$instance ) ) {
			self::$instance = new self();
		}

		return self::$instance;
	}

	/**
	 * Singleton
	 */
	private function __construct() {
		$this->include_external_libraries();
		$this->register_modules();
	}
}