PluginProbe
SureDonation – Donation Forms, Fundraising Campaigns & Donor Management / trunk
SureDonation – Donation Forms, Fundraising Campaigns & Donor Management vtrunk
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
← All changes | plugin-loader.php +95 -0 0.0.1trunk View file →
@@ -7,17 +7,35 @@
7 7
8 8 namespace SureDonation;
9 9
10 10 use SureDonation\Inc\Admin\Admin;
11 +use SureDonation\Inc\Admin\Admin_Ajax;
12 +use SureDonation\Inc\Admin\Admin_Bar;
13 +use SureDonation\Inc\Admin\Analytics;
14 +use SureDonation\Inc\Admin\Notice_Manager;
15 +use SureDonation\Inc\Admin\Notices;
11 16 use SureDonation\Inc\Ajax\Donation_Handler;
17 +use SureDonation\Inc\Emails\Email_Handler;
12 18 use SureDonation\Inc\Assets\Register as Assets_Register;
13 19 use SureDonation\Inc\Blocks\Register as Blocks_Register;
14 20 use SureDonation\Inc\Campaigns\Campaign_Cpt;
21 +use SureDonation\Inc\Campaigns\Campaign_Meta_Tags;
22 +use SureDonation\Inc\Campaigns\Campaign_Page;
15 23 use SureDonation\Inc\Database\Register as Database_Register;
24 +use SureDonation\Inc\Donor_User_Link;
16 25 use SureDonation\Inc\FormEditor\Assets as FormEditor_Assets;
26 +use SureDonation\Inc\Onboarding;
27 +use SureDonation\Inc\Privacy\Privacy_Data;
28 +use SureDonation\Inc\Payments\Offline\Offline_Frontend;
29 +use SureDonation\Inc\Payments\Offline\Offline_Settings;
30 +use SureDonation\Inc\Payments\PayPal\PayPal_Frontend;
31 +use SureDonation\Inc\Payments\PayPal\PayPal_Settings;
32 +use SureDonation\Inc\Payments\PayPal\PayPal_Webhook_Listener;
17 33 use SureDonation\Inc\Payments\Stripe\Stripe_Frontend;
18 34 use SureDonation\Inc\Payments\Stripe\Stripe_Settings;
19 35 use SureDonation\Inc\Payments\Stripe\Stripe_Webhook;
36 +use SureDonation\Inc\Page_Builders\Page_Builders;
37 +use SureDonation\Inc\Pdf\Pdf_Manager;
20 38 use SureDonation\Inc\Post_Types\Donation_Form;
21 39 use SureDonation\Inc\Rest_Api;
22 40 use SureDonation\Inc\Shortcodes\Donation_Form as Donation_Form_Shortcode;
23 41
@@ -110,11 +128,25 @@
110 128 public function load_plugin() {
111 129 // Initialize database tables.
112 130 Database_Register::init();
113 131
132 + // Back-fill notification identities once, in admin context only — it
133 + // writes, and the path it repairs runs during donor payment requests.
134 + add_action( 'admin_init', [ Email_Handler::class, 'backfill_notification_keys' ] );
135 +
114 136 // Initialize Campaign CPT.
115 137 Campaign_Cpt::get_instance();
116 138
139 + // Initialize Campaign Page (default layout seeding + display block helpers).
140 + Campaign_Page::get_instance();
141 +
142 + // Output Open Graph / Twitter Card tags on singular campaign pages.
143 + Campaign_Meta_Tags::get_instance();
144 +
145 + // Page-builder integrations (Bricks now; each self-gates on the builder).
146 + // Page-builder integrations (Elementor now; each self-gates on the builder).
147 + Page_Builders::get_instance();
148 +
117 149 // Initialize Donation Form CPT.
118 150 Donation_Form::get_instance();
119 151
120 152 // Initialize Admin.
@@ -119,10 +151,24 @@
119 151
120 152 // Initialize Admin.
121 153 if ( is_admin() ) {
122 154 Admin::get_instance();
155 + Admin_Ajax::get_instance();
156 + Pdf_Manager::get_instance();
157 + Onboarding::get_instance();
158 + Notices::get_instance();
159 + Notice_Manager::get_instance();
123 160 }
124 161
162 + // Payment-mode toolbar indicator. Loaded outside is_admin() so it also
163 + // appears in the front-end admin bar; it self-gates on capability.
164 + Admin_Bar::get_instance();
165 +
166 + // Initialize Analytics. Loaded outside is_admin() so usage events
167 + // fired during REST requests (onboarding, campaign publish) are
168 + // captured; the class gates its own admin-only behavior internally.
169 + Analytics::get_instance();
170 +
125 171 // Initialize REST API.
126 172 Rest_Api::get_instance();
127 173
128 174 // Initialize blocks (must be before init hook fires).
@@ -139,12 +185,27 @@
139 185
140 186 // Initialize shortcodes.
141 187 Donation_Form_Shortcode::get_instance();
142 188
189 + // Register WordPress personal-data export/erase integration.
190 + Privacy_Data::get_instance();
191 +
143 192 // Initialize Stripe payment gateway.
144 193 Stripe_Settings::get_instance();
145 194 Stripe_Webhook::get_instance();
146 195 Stripe_Frontend::get_instance();
196 +
197 + // Initialize Offline payment gateway.
198 + Offline_Settings::get_instance();
199 + Offline_Frontend::get_instance();
200 +
201 + // Initialize PayPal payment gateway.
202 + PayPal_Settings::get_instance();
203 + PayPal_Frontend::get_instance();
204 + PayPal_Webhook_Listener::get_instance();
205 +
206 + // Initialize donor-user linking.
207 + Donor_User_Link::get_instance();
147 208 }
148 209
149 210 /**
150 211 * Setup autoloader for plugin classes.
@@ -169,8 +230,22 @@
169 230 delete_option( 'rewrite_rules' );
170 231
171 232 // Set redirect flag for onboarding.
172 233 update_option( '__suredonation_do_redirect', true );
234 +
235 + // Record install time for the review-notice grace period.
236 + // add_option is a no-op if the value already exists, so it
237 + // never clobbers a real install time on re-activation.
238 + add_option( 'suredonation_install_time', time() );
239 +
240 + // Register the donor role.
241 + if ( ! get_role( 'suredonation_donor' ) ) {
242 + add_role(
243 + 'suredonation_donor',
244 + __( 'Donor', 'suredonation' ),
245 + [ 'read' => true ]
246 + );
247 + }
173 248 }
174 249 );
175 250
176 251 // Deactivation hook.
@@ -177,8 +252,28 @@
177 252 register_deactivation_hook(
178 253 SUREDONATION_FILE,
179 254 static function () {
180 255 update_option( '__suredonation_do_redirect', false );
256 +
257 + // Otherwise the webhook reconciliation stays in cron after the
258 + // plugin is gone, firing at a callback that no longer exists.
259 + wp_clear_scheduled_hook( Stripe_Settings::WEBHOOK_SYNC_HOOK );
260 + }
261 + );
262 +
263 + // Ensure donor role exists (for upgrades without re-activation).
264 + add_action(
265 + 'init',
266 + static function () {
267 + if ( ! get_role( 'suredonation_donor' ) ) {
268 + add_role(
269 + 'suredonation_donor',
270 + __( 'Donor', 'suredonation' ),
271 + [ 'read' => true ]
272 + );
273 + }
274 + // Load plugin text domain.
275 + load_plugin_textdomain( 'suredonation', false, dirname( plugin_basename( SUREDONATION_FILE ) ) . '/languages' );
181 276 }
182 277 );
183 278
184 279 // Initialize plugin after WordPress loads.