| 1 |
<?php |
| 2 |
|
| 3 |
namespace Give\ServiceProviders; |
| 4 |
|
| 5 |
use Closure; |
| 6 |
use Give\Framework\Migrations\MigrationsRegister; |
| 7 |
use Give\Framework\Permissions\Migrations\AddViewCapabilitiesToAdminRoles; |
| 8 |
use Give\Framework\Permissions\Migrations\FixGiveAccountantCapabilities; |
| 9 |
use Give\Framework\Permissions\Migrations\FixGiveWorkerCapabilities; |
| 10 |
use Give\PaymentGateways\Gateways\Stripe\LegacyStripeAdapter; |
| 11 |
use Give\Route\Form; |
| 12 |
use Give\ServiceProviders\Exceptions\UnknownRequestTypeException; |
| 13 |
|
| 14 |
/** |
| 15 |
* Class LegacyServiceProvider |
| 16 |
* |
| 17 |
* This handles the loading of all of the legacy codebase included in the /includes directory. |
| 18 |
* DO NOT EXTEND THIS WITH NEW CODE as it is intended to shrink over time as we migrate over |
| 19 |
* to the new ways of doing things. |
| 20 |
*/ |
| 21 |
class LegacyServiceProvider implements ServiceProvider |
| 22 |
{ |
| 23 |
/** |
| 24 |
* @inheritDoc |
| 25 |
*/ |
| 26 |
public function register() |
| 27 |
{ |
| 28 |
// TODO: move this |
| 29 |
// this needs to load before the LegacyServiceProvider loads in GiveWP. |
| 30 |
give(LegacyStripeAdapter::class)->addToStripeSupportedPaymentMethodsList(); |
| 31 |
|
| 32 |
$this->includeLegacyFiles(); |
| 33 |
$this->bindClasses(); |
| 34 |
} |
| 35 |
|
| 36 |
/** |
| 37 |
* @inheritDoc |
| 38 |
*/ |
| 39 |
public function boot() |
| 40 |
{ |
| 41 |
$this->registerMigrations(); |
| 42 |
} |
| 43 |
|
| 44 |
/** |
| 45 |
* Register migrations for legacy components. |
| 46 |
* |
| 47 |
* @since 4.14.0 added migrations FixGiveWorkerCapabilities, FixGiveAccountantCapabilities, AddViewCapabilitiesToAdminRoles |
| 48 |
*/ |
| 49 |
private function registerMigrations(): void |
| 50 |
{ |
| 51 |
give(MigrationsRegister::class)->addMigrations([ |
| 52 |
FixGiveWorkerCapabilities::class, |
| 53 |
FixGiveAccountantCapabilities::class, |
| 54 |
AddViewCapabilitiesToAdminRoles::class, |
| 55 |
]); |
| 56 |
} |
| 57 |
|
| 58 |
/** |
| 59 |
* Load all the legacy class files since they don't have auto-loading |
| 60 |
* |
| 61 |
* @since 3.1.2 remove WP_Background_Process & WP_Async_Request in favor of namespaced versions. |
| 62 |
* @since 3.0.0 remove the manual (Test Donations) gateway from loading in favor of the new Test Donations gateway |
| 63 |
* @since 2.8.0 |
| 64 |
*/ |
| 65 |
private function includeLegacyFiles() |
| 66 |
{ |
| 67 |
global $give_options; |
| 68 |
|
| 69 |
require_once GIVE_PLUGIN_DIR . 'includes/class-give-cache-setting.php'; |
| 70 |
|
| 71 |
require_once GIVE_PLUGIN_DIR . 'includes/setting-functions.php'; |
| 72 |
require_once GIVE_PLUGIN_DIR . 'includes/country-functions.php'; |
| 73 |
require_once GIVE_PLUGIN_DIR . 'includes/template-functions.php'; |
| 74 |
require_once GIVE_PLUGIN_DIR . 'includes/misc-functions.php'; |
| 75 |
require_once GIVE_PLUGIN_DIR . 'includes/forms/functions.php'; |
| 76 |
require_once GIVE_PLUGIN_DIR . 'includes/ajax-functions.php'; |
| 77 |
require_once GIVE_PLUGIN_DIR . 'includes/currency-functions.php'; |
| 78 |
require_once GIVE_PLUGIN_DIR . 'includes/price-functions.php'; |
| 79 |
require_once GIVE_PLUGIN_DIR . 'includes/user-functions.php'; |
| 80 |
require_once GIVE_PLUGIN_DIR . 'includes/donors/frontend-donor-functions.php'; |
| 81 |
require_once GIVE_PLUGIN_DIR . 'includes/payments/functions.php'; |
| 82 |
require_once GIVE_PLUGIN_DIR . 'includes/gateways/functions.php'; |
| 83 |
|
| 84 |
/** |
| 85 |
* Load plugin files |
| 86 |
*/ |
| 87 |
require_once GIVE_PLUGIN_DIR . 'includes/admin/class-admin-settings.php'; |
| 88 |
$give_options = give_get_settings(); |
| 89 |
|
| 90 |
require_once GIVE_PLUGIN_DIR . 'includes/class-give-cron.php'; |
| 91 |
require_once GIVE_PLUGIN_DIR . 'includes/class-give-async-process.php'; |
| 92 |
require_once GIVE_PLUGIN_DIR . 'includes/class-give-cache.php'; |
| 93 |
require_once GIVE_PLUGIN_DIR . 'includes/post-types.php'; |
| 94 |
require_once GIVE_PLUGIN_DIR . 'includes/filters.php'; |
| 95 |
require_once GIVE_PLUGIN_DIR . 'includes/api/class-give-api-v2.php'; |
| 96 |
require_once GIVE_PLUGIN_DIR . 'includes/class-give-tooltips.php'; |
| 97 |
require_once GIVE_PLUGIN_DIR . 'includes/class-notices.php'; |
| 98 |
require_once GIVE_PLUGIN_DIR . 'includes/class-give-translation.php'; |
| 99 |
require_once GIVE_PLUGIN_DIR . 'includes/class-give-license-handler.php'; |
| 100 |
require_once GIVE_PLUGIN_DIR . 'includes/admin/class-give-html-elements.php'; |
| 101 |
|
| 102 |
require_once GIVE_PLUGIN_DIR . 'includes/class-give-scripts.php'; |
| 103 |
require_once GIVE_PLUGIN_DIR . 'includes/class-give-roles.php'; |
| 104 |
require_once GIVE_PLUGIN_DIR . 'includes/class-give-donate-form.php'; |
| 105 |
|
| 106 |
require_once GIVE_PLUGIN_DIR . 'includes/database/class-give-db.php'; |
| 107 |
require_once GIVE_PLUGIN_DIR . 'includes/database/class-give-db-meta.php'; |
| 108 |
require_once GIVE_PLUGIN_DIR . 'includes/database/class-give-db-comments.php'; |
| 109 |
require_once GIVE_PLUGIN_DIR . 'includes/database/class-give-db-comments-meta.php'; |
| 110 |
require_once GIVE_PLUGIN_DIR . 'includes/database/class-give-db-donors.php'; |
| 111 |
require_once GIVE_PLUGIN_DIR . 'includes/database/class-give-db-donor-meta.php'; |
| 112 |
require_once GIVE_PLUGIN_DIR . 'includes/database/class-give-db-form-meta.php'; |
| 113 |
require_once GIVE_PLUGIN_DIR . 'includes/database/class-give-db-sequential-ordering.php'; |
| 114 |
require_once GIVE_PLUGIN_DIR . 'includes/database/class-give-db-sessions.php'; |
| 115 |
require_once GIVE_PLUGIN_DIR . 'includes/database/class-give-db-payment-meta.php'; |
| 116 |
|
| 117 |
require_once GIVE_PLUGIN_DIR . 'includes/class-give-donor.php'; |
| 118 |
require_once GIVE_PLUGIN_DIR . 'includes/class-give-stats.php'; |
| 119 |
require_once GIVE_PLUGIN_DIR . 'includes/class-give-session.php'; |
| 120 |
require_once GIVE_PLUGIN_DIR . 'includes/class-give-logging.php'; |
| 121 |
require_once GIVE_PLUGIN_DIR . 'includes/class-give-comment.php'; |
| 122 |
|
| 123 |
require_once GIVE_PLUGIN_DIR . 'includes/forms/widget.php'; |
| 124 |
require_once GIVE_PLUGIN_DIR . 'includes/forms/class-give-forms-query.php'; |
| 125 |
require_once GIVE_PLUGIN_DIR . 'includes/forms/template.php'; |
| 126 |
require_once GIVE_PLUGIN_DIR . 'includes/shortcodes.php'; |
| 127 |
require_once GIVE_PLUGIN_DIR . 'includes/formatting.php'; |
| 128 |
require_once GIVE_PLUGIN_DIR . 'includes/error-tracking.php'; |
| 129 |
require_once GIVE_PLUGIN_DIR . 'includes/login-register.php'; |
| 130 |
require_once GIVE_PLUGIN_DIR . 'includes/plugin-compatibility.php'; |
| 131 |
require_once GIVE_PLUGIN_DIR . 'includes/deprecated/deprecated-classes.php'; |
| 132 |
require_once GIVE_PLUGIN_DIR . 'includes/deprecated/deprecated-functions.php'; |
| 133 |
require_once GIVE_PLUGIN_DIR . 'includes/deprecated/deprecated-actions.php'; |
| 134 |
require_once GIVE_PLUGIN_DIR . 'includes/deprecated/deprecated-filters.php'; |
| 135 |
|
| 136 |
require_once GIVE_PLUGIN_DIR . 'includes/process-donation.php'; |
| 137 |
require_once GIVE_PLUGIN_DIR . 'includes/payments/backward-compatibility.php'; |
| 138 |
require_once GIVE_PLUGIN_DIR . 'includes/payments/actions.php'; |
| 139 |
require_once GIVE_PLUGIN_DIR . 'includes/payments/class-payment-stats.php'; |
| 140 |
require_once GIVE_PLUGIN_DIR . 'includes/payments/class-payments-query.php'; |
| 141 |
require_once GIVE_PLUGIN_DIR . 'includes/payments/class-give-payment.php'; |
| 142 |
require_once GIVE_PLUGIN_DIR . 'includes/payments/class-give-sequential-donation-number.php'; |
| 143 |
|
| 144 |
require_once GIVE_PLUGIN_DIR . 'includes/gateways/actions.php'; |
| 145 |
require_once GIVE_PLUGIN_DIR . 'includes/gateways/paypal/paypal-standard.php'; |
| 146 |
require_once GIVE_PLUGIN_DIR . 'includes/gateways/offline-donations.php'; |
| 147 |
require_once GIVE_PLUGIN_DIR . 'includes/emails/class-give-emails.php'; |
| 148 |
require_once GIVE_PLUGIN_DIR . 'includes/emails/class-give-email-tags.php'; |
| 149 |
require_once GIVE_PLUGIN_DIR . 'includes/admin/emails/class-email-notifications.php'; |
| 150 |
require_once GIVE_PLUGIN_DIR . 'includes/emails/functions.php'; |
| 151 |
require_once GIVE_PLUGIN_DIR . 'includes/emails/template.php'; |
| 152 |
require_once GIVE_PLUGIN_DIR . 'includes/emails/actions.php'; |
| 153 |
|
| 154 |
require_once GIVE_PLUGIN_DIR . 'includes/donors/class-give-donors-query.php'; |
| 155 |
require_once GIVE_PLUGIN_DIR . 'includes/donors/class-give-donor-wall.php'; |
| 156 |
require_once GIVE_PLUGIN_DIR . 'includes/donors/class-give-donor-stats.php'; |
| 157 |
require_once GIVE_PLUGIN_DIR . 'includes/donors/backward-compatibility.php'; |
| 158 |
require_once GIVE_PLUGIN_DIR . 'includes/donors/actions.php'; |
| 159 |
|
| 160 |
require_once GIVE_PLUGIN_DIR . 'includes/admin/upgrades/class-give-updates.php'; |
| 161 |
|
| 162 |
require_once GIVE_PLUGIN_DIR . 'blocks/load.php'; |
| 163 |
|
| 164 |
// Include Views |
| 165 |
require_once GIVE_PLUGIN_DIR . 'src/Views/Views.php'; |
| 166 |
|
| 167 |
if (defined('WP_CLI') && WP_CLI) { |
| 168 |
require_once GIVE_PLUGIN_DIR . 'includes/class-give-cli-commands.php'; |
| 169 |
} |
| 170 |
|
| 171 |
// Load file for frontend |
| 172 |
if ($this->is_request('frontend')) { |
| 173 |
require_once GIVE_PLUGIN_DIR . 'includes/frontend/class-give-frontend.php'; |
| 174 |
} |
| 175 |
|
| 176 |
if ($this->is_request('admin') || $this->is_request('wpcli')) { |
| 177 |
require_once GIVE_PLUGIN_DIR . 'includes/admin/class-give-admin.php'; |
| 178 |
}// End if(). |
| 179 |
|
| 180 |
require_once GIVE_PLUGIN_DIR . 'includes/actions.php'; |
| 181 |
require_once GIVE_PLUGIN_DIR . 'includes/install.php'; |
| 182 |
|
| 183 |
// This conditional check will add backward compatibility to older Stripe versions (i.e. < 2.2.0) when used with Give 2.5.0. |
| 184 |
if ( |
| 185 |
!defined('GIVE_STRIPE_VERSION') || |
| 186 |
( |
| 187 |
defined('GIVE_STRIPE_VERSION') && |
| 188 |
version_compare(GIVE_STRIPE_VERSION, '2.2.0', '>=') |
| 189 |
) |
| 190 |
) { |
| 191 |
require_once GIVE_PLUGIN_DIR . 'includes/gateways/stripe/class-give-stripe.php'; |
| 192 |
} |
| 193 |
} |
| 194 |
|
| 195 |
/** |
| 196 |
* Binds the legacy classes to the service provider |
| 197 |
* |
| 198 |
* @since 2.19.6 - remove donors in favor of DonorRepositoryProxy |
| 199 |
* |
| 200 |
* @since 2.8.0 |
| 201 |
*/ |
| 202 |
private function bindClasses() |
| 203 |
{ |
| 204 |
give()->singleton('routeForm', Form::class); |
| 205 |
|
| 206 |
$this->bindInstance('roles', 'Give_Roles', 'class-give-roles.php'); |
| 207 |
$this->bindInstance('give_settings', 'Give_Admin_Settings', 'admin/class-admin-settings.php'); |
| 208 |
$this->bindInstance('api', 'Give_API', 'api/class-give-api.php'); |
| 209 |
$this->bindInstance('emails', 'Give_Emails', 'emails/class-give-emails.php'); |
| 210 |
$this->bindInstance('email_tags', 'Give_Email_Template_Tags', 'emails/class-give-email-tags.php'); |
| 211 |
$this->bindInstance('html', 'Give_HTML_Elements', 'admin/class-give-html-elements.php', true); |
| 212 |
$this->bindInstance('donor_meta', 'Give_DB_Donor_Meta', 'database/class-give-db-donor-meta.php'); |
| 213 |
$this->bindInstance('tooltips', 'Give_Tooltips', 'class-give-tooltips.php'); |
| 214 |
$this->bindInstance('notices', 'Give_Notices', 'class-notices.php'); |
| 215 |
$this->bindInstance('payment_meta', 'Give_DB_Payment_Meta', 'database/class-give-db-payment-meta.php'); |
| 216 |
$this->bindInstance('logs', 'Give_Logging', 'class-give-logging.php'); |
| 217 |
$this->bindInstance('form_meta', 'Give_DB_Form_Meta', 'database/class-give-db-form-meta.php'); |
| 218 |
$this->bindInstance( |
| 219 |
'sequential_donation_db', |
| 220 |
'Give_DB_Sequential_Ordering', |
| 221 |
'database/class-give-db-sequential-ordering.php' |
| 222 |
); |
| 223 |
$this->bindInstance('async_process', 'Give_Async_Process', 'class-give-async-process.php'); |
| 224 |
$this->bindInstance('scripts', 'Give_Scripts', 'class-give-scripts.php'); |
| 225 |
$this->bindInstance( |
| 226 |
'seq_donation_number', |
| 227 |
'Give_Sequential_Donation_Number', |
| 228 |
'payments/class-give-sequential-donation-number.php', |
| 229 |
true |
| 230 |
); |
| 231 |
$this->bindInstance('comment', 'Give_Comment', 'class-give-comment.php', true); |
| 232 |
$this->bindInstance('session_db', 'Give_DB_Sessions', 'database/class-give-db-sessions.php'); |
| 233 |
$this->bindInstance('session', 'Give_Session', 'class-give-session.php', true); |
| 234 |
} |
| 235 |
|
| 236 |
/** |
| 237 |
* A helper for loading legacy classes that do not use autoloading, then binding their instance |
| 238 |
* to the container. |
| 239 |
* |
| 240 |
* @since 2.8.0 |
| 241 |
* |
| 242 |
* @param string $alias |
| 243 |
* @param string|Closure $class |
| 244 |
* @param string $includesPath |
| 245 |
* @param bool $singleton |
| 246 |
*/ |
| 247 |
private function bindInstance($alias, $class, $includesPath, $singleton = false) |
| 248 |
{ |
| 249 |
require_once GIVE_PLUGIN_DIR . "includes/$includesPath"; |
| 250 |
|
| 251 |
if ($class instanceof Closure) { |
| 252 |
give()->instance($alias, $class()); |
| 253 |
} elseif ($singleton) { |
| 254 |
give()->instance($alias, $class::get_instance()); |
| 255 |
} else { |
| 256 |
give()->instance($alias, new $class()); |
| 257 |
} |
| 258 |
} |
| 259 |
|
| 260 |
/** |
| 261 |
* What type of request is this? |
| 262 |
* |
| 263 |
* @since 2.8.0 |
| 264 |
* |
| 265 |
* @param string $type admin, ajax, cron or frontend. |
| 266 |
* |
| 267 |
* @return bool |
| 268 |
* @throws UnknownRequestTypeException |
| 269 |
*/ |
| 270 |
private function is_request($type) |
| 271 |
{ |
| 272 |
switch ($type) { |
| 273 |
case RequestType::ADMIN: |
| 274 |
return is_admin(); |
| 275 |
case RequestType::AJAX: |
| 276 |
return defined('DOING_AJAX'); |
| 277 |
case RequestType::CRON: |
| 278 |
return defined('DOING_CRON'); |
| 279 |
case RequestType::FRONTEND: |
| 280 |
return (!is_admin() || defined('DOING_AJAX')) && !defined('DOING_CRON') && !defined('REST_REQUEST'); |
| 281 |
case RequestType::WPCLI: |
| 282 |
return defined('WP_CLI') && WP_CLI; |
| 283 |
default: |
| 284 |
throw new UnknownRequestTypeException($type); |
| 285 |
} |
| 286 |
} |
| 287 |
} |
| 288 |
|