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/integrations-manager.php
<?php
namespace Send_App\Core;

use Send_App\Core\Integrations\Classes\Integration_Module_Base;
use Send_App\Core\Integrations\Options\Enable_Integration_Option;
use Send_App\Core\Integrations\Rest;

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

/**
 * class Integrations_Manager
 *
 * Manage the modules that hold integrations.
 */
class Integrations_Manager {
	const INTEGRATION_STATUS_ENABLED = 'enabled';
	const INTEGRATION_STATUS_ACTIVE_AND_ENABLED = 'active_enabled';
	const INTEGRATION_STATUS_DISABLED = 'disabled';
	const INTEGRATION_STATUS_ALL = 'all';

	/**
	 * @var Integration_Module_Base[]
	 */
	private array $integration_modules = [];

	public function init() {
		$this->register_integration_modules();
	}

	public function register_integration_modules(): void {
		do_action( 'send_app/integration-modules/register', $this );
	}

	public function register( Integration_Module_Base $integration_module ): bool {
		$name = $integration_module::get_name();

		if ( isset( $this->integration_modules[ $name ] ) ) {
			return false;
		}

		$this->integration_modules[ $name ] = $integration_module;

		return true;
	}

	public function get_integration_module( $name ): ?Integration_Module_Base {
		return $this->integration_modules[ $name ] ?? null;
	}

	/**
	 * @param string $filter_by -- values: 'all' | 'enabled' | 'disabled' | 'active_enabled (default))
	 *
	 * @return Integration_Module_Base[]
	 */
	public function get_integration_modules( string $filter_by = self::INTEGRATION_STATUS_ACTIVE_AND_ENABLED ): array {
		$integration_modules = [];

		switch ( $filter_by ) {
			case self::INTEGRATION_STATUS_ALL:
				$integration_modules = $this->integration_modules;
				break;
			case self::INTEGRATION_STATUS_ENABLED:
				$integration_modules = array_filter( $this->integration_modules, function ( $module ) {
					return $module->is_enabled();
				} );
				break;
			case self::INTEGRATION_STATUS_ACTIVE_AND_ENABLED:
				$integration_modules = array_filter( $this->integration_modules, function ( $module ) {
					return $module->is_enabled( true );
				} );
				break;
			case self::INTEGRATION_STATUS_DISABLED:
				$integration_modules = array_filter( $this->integration_modules, function ( $module ) {
					return ! $module->is_enabled();
				} );
				break;
			default:
				break;
		}

		return $integration_modules;
	}

	public function get_default_level(): string {
		return self::INTEGRATION_STATUS_ENABLED;
	}

	private function register_hooks(): void {
		$enabled_integrations = Enable_Integration_Option::get_enabled_integration_modules();

		foreach ( $this->integration_modules as $integration_module ) {
			/** @var Integration_Module_Base $integration_module */
			if ( $integration_module->is_plugin_activated() && in_array( $integration_module::get_name(), $enabled_integrations, true ) ) {
				$integration_module->register_integration_hooks();
			}
		}
	}

	public static function get_instance(): Integrations_Manager {
		static $instance;

		if ( is_null( $instance ) ) {
			$instance = new self();
		}

		return $instance;
	}

	/**
	 * Singleton
	 */
	protected function __construct() {}
}