PluginProbe
SureDonation – Donation Forms, Fundraising Campaigns & Donor Management / 1.0.0
SureDonation – Donation Forms, Fundraising Campaigns & Donor Management v1.0.0
1.5.1 1.5.0 1.4.0 1.3.0 trunk 0.0.1 1.0.0 1.1.0 1.1.1 1.1.2 1.2.0
suredonation / plugin-loader.php

plugin-loader.php in SureDonation – Donation Forms, Fundraising Campaigns & Donor Management 1.0.0, at plugin-loader.php

250 lines 6.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * Plugin Loader
4 *
5 * @package SureDonation
6 */
7
8 namespace SureDonation;
9
10 use SureDonation\Inc\Admin\Admin;
11 use SureDonation\Inc\Admin\Admin_Ajax;
12 use SureDonation\Inc\Admin\Analytics;
13 use SureDonation\Inc\Ajax\Donation_Handler;
14 use SureDonation\Inc\Assets\Register as Assets_Register;
15 use SureDonation\Inc\Blocks\Register as Blocks_Register;
16 use SureDonation\Inc\Campaigns\Campaign_Cpt;
17 use SureDonation\Inc\Campaigns\Campaign_Page;
18 use SureDonation\Inc\Database\Register as Database_Register;
19 use SureDonation\Inc\Donor_User_Link;
20 use SureDonation\Inc\FormEditor\Assets as FormEditor_Assets;
21 use SureDonation\Inc\Onboarding;
22 use SureDonation\Inc\Payments\Offline\Offline_Frontend;
23 use SureDonation\Inc\Payments\Offline\Offline_Settings;
24 use SureDonation\Inc\Payments\PayPal\PayPal_Frontend;
25 use SureDonation\Inc\Payments\PayPal\PayPal_Settings;
26 use SureDonation\Inc\Payments\PayPal\PayPal_Webhook_Listener;
27 use SureDonation\Inc\Payments\Stripe\Stripe_Frontend;
28 use SureDonation\Inc\Payments\Stripe\Stripe_Settings;
29 use SureDonation\Inc\Payments\Stripe\Stripe_Webhook;
30 use SureDonation\Inc\Pdf\Pdf_Manager;
31 use SureDonation\Inc\Post_Types\Donation_Form;
32 use SureDonation\Inc\Rest_Api;
33 use SureDonation\Inc\Shortcodes\Donation_Form as Donation_Form_Shortcode;
34
35 // Exit if accessed directly.
36 if ( ! defined( 'ABSPATH' ) ) {
37 exit;
38 }
39
40 /**
41 * Main Plugin Class
42 *
43 * @since 0.0.1
44 */
45 final class Plugin_Loader {
46 /**
47 * Instance of this class.
48 *
49 * @var Plugin_Loader
50 */
51 private static $instance = null;
52
53 /**
54 * Constructor
55 */
56 private function __construct() {
57 $this->setup_autoloader();
58 $this->init_hooks();
59 }
60
61 /**
62 * Get instance of this class.
63 *
64 * @return Plugin_Loader
65 */
66 public static function get_instance() {
67 if ( null === self::$instance ) {
68 self::$instance = new self();
69 }
70 return self::$instance;
71 }
72
73 /**
74 * Autoload classes.
75 *
76 * @param string $class_name Class name.
77 * @return void
78 */
79 public function autoload( $class_name ) {
80 // Check if class belongs to our namespace.
81 if ( strpos( $class_name, 'SureDonation\\' ) !== 0 ) {
82 return;
83 }
84
85 // Remove namespace prefix.
86 $class_name = str_replace( 'SureDonation\\', '', $class_name );
87
88 // Remove 'Inc\' prefix if exists.
89 $class_name = str_replace( 'Inc\\', '', $class_name );
90
91 // Convert namespace separators to directory separators.
92 $class_name = str_replace( '\\', DIRECTORY_SEPARATOR, $class_name );
93
94 // Convert class name parts to lowercase with hyphens.
95 $parts = explode( DIRECTORY_SEPARATOR, $class_name );
96 $parts = array_map(
97 static function ( $part ) {
98 // Convert CamelCase to kebab-case.
99 $converted = preg_replace( '/([a-z])([A-Z])/', '$1-$2', $part );
100 return strtolower( str_replace( '_', '-', is_string( $converted ) ? $converted : $part ) );
101 },
102 $parts
103 );
104
105 $class_name = implode( DIRECTORY_SEPARATOR, $parts );
106
107 // Build file path.
108 $file = SUREDONATION_DIR . 'inc/' . $class_name . '.php';
109
110 // Load file if exists.
111 if ( file_exists( $file ) ) {
112 require_once $file;
113 }
114 }
115
116 /**
117 * Load plugin components.
118 *
119 * @return void
120 */
121 public function load_plugin() {
122 // Initialize database tables.
123 Database_Register::init();
124
125 // Initialize Campaign CPT.
126 Campaign_Cpt::get_instance();
127
128 // Initialize Campaign Page (default layout seeding + display block helpers).
129 Campaign_Page::get_instance();
130
131 // Initialize Donation Form CPT.
132 Donation_Form::get_instance();
133
134 // Initialize Admin.
135 if ( is_admin() ) {
136 Admin::get_instance();
137 Admin_Ajax::get_instance();
138 Pdf_Manager::get_instance();
139 Onboarding::get_instance();
140 }
141
142 // Initialize Analytics. Loaded outside is_admin() so usage events
143 // fired during REST requests (onboarding, campaign publish) are
144 // captured; the class gates its own admin-only behavior internally.
145 Analytics::get_instance();
146
147 // Initialize REST API.
148 Rest_Api::get_instance();
149
150 // Initialize blocks (must be before init hook fires).
151 Blocks_Register::get_instance();
152
153 // Initialize frontend assets.
154 Assets_Register::get_instance();
155
156 // Initialize form editor assets (sidebar, meta, etc.).
157 FormEditor_Assets::get_instance();
158
159 // Initialize AJAX handlers.
160 Donation_Handler::get_instance();
161
162 // Initialize shortcodes.
163 Donation_Form_Shortcode::get_instance();
164
165 // Initialize Stripe payment gateway.
166 Stripe_Settings::get_instance();
167 Stripe_Webhook::get_instance();
168 Stripe_Frontend::get_instance();
169
170 // Initialize Offline payment gateway.
171 Offline_Settings::get_instance();
172 Offline_Frontend::get_instance();
173
174 // Initialize PayPal payment gateway.
175 PayPal_Settings::get_instance();
176 PayPal_Frontend::get_instance();
177 PayPal_Webhook_Listener::get_instance();
178
179 // Initialize donor-user linking.
180 Donor_User_Link::get_instance();
181 }
182
183 /**
184 * Setup autoloader for plugin classes.
185 *
186 * @return void
187 */
188 private function setup_autoloader() {
189 spl_autoload_register( [ $this, 'autoload' ] );
190 }
191
192 /**
193 * Initialize plugin hooks.
194 *
195 * @return void
196 */
197 private function init_hooks() {
198 // Activation hook.
199 register_activation_hook(
200 SUREDONATION_FILE,
201 static function () {
202 // Reset rewrite rules.
203 delete_option( 'rewrite_rules' );
204
205 // Set redirect flag for onboarding.
206 update_option( '__suredonation_do_redirect', true );
207
208 // Register the donor role.
209 if ( ! get_role( 'suredonation_donor' ) ) {
210 add_role(
211 'suredonation_donor',
212 __( 'Donor', 'suredonation' ),
213 [ 'read' => true ]
214 );
215 }
216 }
217 );
218
219 // Deactivation hook.
220 register_deactivation_hook(
221 SUREDONATION_FILE,
222 static function () {
223 update_option( '__suredonation_do_redirect', false );
224 }
225 );
226
227 // Ensure donor role exists (for upgrades without re-activation).
228 add_action(
229 'init',
230 static function () {
231 if ( ! get_role( 'suredonation_donor' ) ) {
232 add_role(
233 'suredonation_donor',
234 __( 'Donor', 'suredonation' ),
235 [ 'read' => true ]
236 );
237 }
238 // Load plugin text domain.
239 load_plugin_textdomain( 'suredonation', false, dirname( plugin_basename( SUREDONATION_FILE ) ) . '/languages' );
240 }
241 );
242
243 // Initialize plugin after WordPress loads.
244 add_action( 'plugins_loaded', [ $this, 'load_plugin' ], 99 );
245 }
246 }
247
248 // Initialize plugin.
249 Plugin_Loader::get_instance();
250