PluginProbe
WPFunnels – Funnel Builder for WooCommerce with Checkout & One Click Upsell / 3.13.3
WPFunnels – Funnel Builder for WooCommerce with Checkout & One Click Upsell v3.13.3
3.13.3 3.13.2 3.13.1 3.13.0 3.12.13 3.12.12 3.12.11 3.12.10 3.12.9 3.12.8 3.12.7 3.12.6 3.12.5 3.12.4 3.12.3 3.12.1 3.12.2 3.12.0 3.11.1 3.11.0 3.10.9 3.10.8 3.10.7 3.10.6 2.8.16 All 261 releases
wpfunnels / includes / core / widgets / divi-modules / divi-5 / modules / ModuleRegistry.php

ModuleRegistry.php in WPFunnels – Funnel Builder for WooCommerce with Checkout & One Click Upsell 3.13.3, at includes/core/widgets/divi-modules/divi-5/modules/ModuleRegistry.php

125 lines 3.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Module registry for Divi 5.
4 *
5 * Maintains the list of available modules and orchestrates their registration.
6 * Modules are only loaded on wpfunnel_steps post type pages (or in REST/admin
7 * context where post type is unavailable) to avoid unnecessary overhead.
8 *
9 * @package WPFunnels\Widgets\DiviModules\D5
10 * @since 2.9.1
11 */
12
13 namespace WPFunnels\Widgets\DiviModules\D5;
14
15 if ( ! defined( 'ABSPATH' ) ) {
16 die( 'Direct access forbidden.' );
17 }
18
19
20 class ModuleRegistry {
21
22 /**
23 * Map of module directory → module class.
24 * Key = subdirectory name inside divi-5/modules/
25 * Value = fully-qualified class name of the BaseModule subclass
26 */
27 private static array $modules = [
28 'Checkout' => 'WPFunnels\Widgets\DiviModules\D5\Checkout\Checkout',
29 'OptIn' => 'WPFunnels\Widgets\DiviModules\D5\OptIn\OptIn',
30 'NextStepButton' => 'WPFunnels\Widgets\DiviModules\D5\NextStepButton\NextStepButton',
31 'OrderDetails' => 'WPFunnels\Widgets\DiviModules\D5\OrderDetails\OrderDetails',
32 'OfferButton' => 'WPFunnels\Widgets\DiviModules\D5\OfferButton\OfferButton',
33 ];
34
35 /**
36 * Register all modules.
37 *
38 * @param mixed $dependency_tree Passed by divi_module_library_modules_dependency_tree;
39 * null when called from our init:20 fallback.
40 */
41 public static function register_modules( $dependency_tree ): void {
42 // Post-type guard: skip on non-funnel pages (but not in REST/admin context)
43 $post_type = self::get_current_post_type();
44 if ( ! empty( $post_type )
45 && $post_type !== WPFNL_STEPS_POST_TYPE
46 && ! ( defined( 'REST_REQUEST' ) && REST_REQUEST )
47 && ! is_admin()
48 ) {
49 return;
50 }
51
52 require_once __DIR__ . '/BaseModule.php';
53
54 $modules_dir = __DIR__;
55
56 foreach ( self::$modules as $dir => $class ) {
57 $module_file = $modules_dir . '/' . $dir . '/' . $dir . '.php';
58
59 // Load the base module subclass definition
60 $base_file = $modules_dir . '/' . $dir . '/' . $dir . 'Module.php';
61 // Some modules use {Dir}.php directly as their subclass
62 $entry = file_exists( $base_file ) ? $base_file : null;
63
64 if ( ! class_exists( $class ) ) {
65 // Traits are loaded inside BaseModule::load(), so just need the subclass
66 if ( $entry && file_exists( $entry ) ) {
67 require_once $entry;
68 } elseif ( file_exists( $module_file ) ) {
69 // Try loading directly
70 require_once $module_file;
71 }
72 }
73
74 if ( ! class_exists( $class ) ) {
75 continue;
76 }
77
78 /** @var BaseModule $instance */
79 $instance = new $class();
80 $instance->load();
81 }
82 }
83
84 /**
85 * Register REST API routes for all modules (called from rest_api_init).
86 */
87 public static function register_rest_routes(): void {
88 require_once __DIR__ . '/BaseModule.php';
89
90 $modules_dir = __DIR__;
91
92 foreach ( self::$modules as $dir => $class ) {
93 // Load traits + class file so REST route registration methods are available
94 $trait_dir = $modules_dir . '/' . $dir . '/' . $dir . 'Trait/';
95 $rest_trait = $trait_dir . 'RestApiTrait.php';
96 if ( file_exists( $rest_trait ) ) {
97 require_once $rest_trait;
98 }
99
100 $class_file = $modules_dir . '/' . $dir . '/' . $dir . '.php';
101 if ( file_exists( $class_file ) ) {
102 require_once $class_file;
103 }
104
105 if ( method_exists( $class, 'register_rest_routes_direct' ) ) {
106 $class::register_rest_routes_direct();
107 }
108 }
109 }
110
111 /**
112 * Determine the current post type safely (returns empty string when unknown).
113 */
114 private static function get_current_post_type(): string {
115 if ( defined( 'REST_REQUEST' ) && REST_REQUEST ) {
116 return '';
117 }
118 if ( is_admin() ) {
119 return '';
120 }
121 $type = get_post_type();
122 return $type ?: '';
123 }
124 }
125