PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.11.2
GiveWP – Donation Plugin and Fundraising Platform v2.11.2
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / give.php
give Last commit date
assets 5 years ago blocks 5 years ago includes 5 years ago languages 5 years ago sample-data 6 years ago src 5 years ago templates 5 years ago vendor 5 years ago .phpstorm.meta.php 5 years ago changelog.txt 5 years ago docker_tag 5 years ago give.php 5 years ago license.txt 6 years ago output.log 5 years ago readme.txt 5 years ago uninstall.php 5 years ago wpml-config.xml 6 years ago
give.php
525 lines
1 <?php
2 /**
3 * Plugin Name: Give - Donation Plugin
4 * Plugin URI: https://givewp.com
5 * Description: The most robust, flexible, and intuitive way to accept donations on WordPress.
6 * Author: GiveWP
7 * Author URI: https://givewp.com/
8 * Version: 2.11.2
9 * Text Domain: give
10 * Domain Path: /languages
11 *
12 * Give is free software: you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation, either version 3 of the License, or
15 * any later version.
16 *
17 * Give is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with Give. If not, see <https://www.gnu.org/licenses/>.
24 *
25 * A Tribute to Open Source:
26 *
27 * "Open source software is software that can be freely used, changed, and shared (in modified or unmodified form) by
28 * anyone. Open source software is made by many people, and distributed under licenses that comply with the Open Source
29 * Definition."
30 *
31 * -- The Open Source Initiative
32 *
33 * Give is a tribute to the spirit and philosophy of Open Source. We at GiveWP gladly embrace the Open Source
34 * philosophy both in how Give itself was developed, and how we hope to see others build more from our code base.
35 *
36 * Give would not have been possible without the tireless efforts of WordPress and the surrounding Open Source projects
37 * and their talented developers. Thank you all for your contribution to WordPress.
38 *
39 * - The GiveWP Team
40 */
41
42 use Give\Container\Container;
43 use Give\Framework\Exceptions\UncaughtExceptionLogger;
44 use Give\Framework\Migrations\MigrationsServiceProvider;
45 use Give\Form\Templates;
46 use Give\Revenue\RevenueServiceProvider;
47 use Give\Route\Form as FormRoute;
48 use Give\ServiceProviders\PaymentGateways;
49 use Give\ServiceProviders\Routes;
50 use Give\ServiceProviders\LegacyServiceProvider;
51 use Give\ServiceProviders\RestAPI;
52 use Give\ServiceProviders\Onboarding;
53 use Give\MultiFormGoals\ServiceProvider as MultiFormGoalsServiceProvider;
54 use Give\DonorDashboards\ServiceProvider as DonorDashboardsServiceProvider;
55 use Give\Shims\ShimsServiceProvider;
56 use Give\TestData\ServiceProvider as TestDataServiceProvider;
57 use Give\MigrationLog\MigrationLogServiceProvider;
58 use Give\Log\LogServiceProvider;
59 use Give\ServiceProviders\ServiceProvider;
60 use Give\Form\LegacyConsumer\ServiceProvider as FormLegacyConsumerServiceProvider;
61 use Give\Tracking\TrackingServiceProvider;
62
63 // Exit if accessed directly.
64 if ( ! defined( 'ABSPATH' ) ) {
65 exit;
66 }
67
68 /**
69 * Main Give Class
70 *
71 * @since 2.8.0 build in a service container
72 * @since 1.0
73 *
74 * @property-read Give_API $api
75 * @property-read Give_Async_Process $async_process
76 * @property-read Give_Comment $comment
77 * @property-read Give_DB_Donors $donors
78 * @property-read Give_DB_Donor_Meta $donor_meta
79 * @property-read Give_Emails $emails
80 * @property-read Give_Email_Template_Tags $email_tags
81 * @property-read Give_DB_Form_Meta $form_meta
82 * @property-read Give_Admin_Settings $give_settings
83 * @property-read Give_HTML_Elements $html
84 * @property-read Give_Logging $logs
85 * @property-read Give_Notices $notices
86 * @property-read Give_DB_Payment_Meta $payment_meta
87 * @property-read Give_Roles $roles
88 * @property-read FormRoute $routeForm
89 * @property-read Templates $templates
90 * @property-read Give_Scripts $scripts
91 * @property-read Give_DB_Sequential_Ordering $sequential_donation_db
92 * @property-read Give_Sequential_Donation_Number $seq_donation_number
93 * @property-read Give_Session $session
94 * @property-read Give_DB_Sessions $session_db
95 * @property-read Give_Tooltips $tooltips
96 *
97 * @mixin Container
98 */
99 final class Give {
100 /**
101 * Give Template Loader Object
102 *
103 * @since 1.0
104 * @access public
105 *
106 * @var Give_Template_Loader object
107 */
108 public $template_loader;
109
110 /**
111 * Give No Login Object
112 *
113 * @since 1.0
114 * @access public
115 *
116 * @var Give_Email_Access object
117 */
118 public $email_access;
119
120 /**
121 * Give_Stripe Object.
122 *
123 * @since 2.5.0
124 * @access public
125 *
126 * @var Give_Stripe
127 */
128 public $stripe;
129
130 /**
131 * @since 2.8.0
132 *
133 * @var Container
134 */
135 private $container;
136
137 /**
138 * @since 2.8.0
139 *
140 * @var array Array of Service Providers to load
141 */
142 private $serviceProviders = [
143 LegacyServiceProvider::class,
144 RestAPI::class,
145 Routes::class,
146 PaymentGateways::class,
147 Onboarding::class,
148 MigrationsServiceProvider::class,
149 RevenueServiceProvider::class,
150 MultiFormGoalsServiceProvider::class,
151 DonorDashboardsServiceProvider::class,
152 TrackingServiceProvider::class,
153 TestDataServiceProvider::class,
154 MigrationLogServiceProvider::class,
155 LogServiceProvider::class,
156 FormLegacyConsumerServiceProvider::class,
157 ShimsServiceProvider::class,
158 ];
159
160 /**
161 * @since 2.8.0
162 *
163 * @var bool Make sure the providers are loaded only once
164 */
165 private $providersLoaded = false;
166
167 /**
168 * Give constructor.
169 *
170 * Sets up the Container to be used for managing all other instances and data
171 *
172 * @since 2.8.0
173 */
174 public function __construct() {
175 $this->container = new Container();
176 }
177
178 /**
179 * Bootstraps the Give Plugin
180 *
181 * @since 2.8.0
182 */
183 public function boot() {
184 // PHP version
185 if ( ! defined( 'GIVE_REQUIRED_PHP_VERSION' ) ) {
186 define( 'GIVE_REQUIRED_PHP_VERSION', '5.6.0' );
187 }
188
189 // Bailout: Need minimum php version to load plugin.
190 if ( function_exists( 'phpversion' ) && version_compare( GIVE_REQUIRED_PHP_VERSION, phpversion(), '>' ) ) {
191 add_action( 'admin_notices', [ $this, 'minimum_phpversion_notice' ] );
192
193 return;
194 }
195
196 $this->setup_constants();
197
198 // Add compatibility notice for recurring and stripe support with Give 2.5.0.
199 add_action( 'admin_notices', [ $this, 'display_old_recurring_compatibility_notice' ] );
200
201 add_action( 'plugins_loaded', [ $this, 'init' ], 0 );
202
203 register_activation_hook( GIVE_PLUGIN_FILE, [ $this, 'install' ] );
204
205 do_action( 'give_loaded' );
206 }
207
208 /**
209 * Init Give when WordPress Initializes.
210 *
211 * @since 1.8.9
212 */
213 public function init() {
214 /**
215 * Fires before the Give core is initialized.
216 *
217 * @since 1.8.9
218 */
219 do_action( 'before_give_init' );
220
221 // Set up localization.
222 $this->load_textdomain();
223
224 $this->bindClasses();
225
226 $this->setupExceptionHandler();
227
228 $this->loadServiceProviders();
229
230 // Load form template
231 $this->templates->load();
232
233 // Load routes.
234 $this->routeForm->init();
235
236 /**
237 * Fire the action after Give core loads.
238 *
239 * @since 1.8.7
240 *
241 * @param Give class instance.
242 *
243 */
244 do_action( 'give_init', $this );
245 }
246
247 /**
248 * Binds the initial classes to the service provider.
249 *
250 * @since 2.8.0
251 */
252 private function bindClasses() {
253 $this->container->singleton( 'templates', Templates::class );
254 $this->container->singleton( 'routeForm', FormRoute::class );
255 }
256
257 /**
258 * Setup plugin constants
259 *
260 * @since 1.0
261 * @access private
262 *
263 * @return void
264 */
265 private function setup_constants() {
266 // Plugin version.
267 if ( ! defined( 'GIVE_VERSION' ) ) {
268 define( 'GIVE_VERSION', '2.11.2' );
269 }
270
271 // Plugin Root File.
272 if ( ! defined( 'GIVE_PLUGIN_FILE' ) ) {
273 define( 'GIVE_PLUGIN_FILE', __FILE__ );
274 }
275
276 // Plugin Folder Path.
277 if ( ! defined( 'GIVE_PLUGIN_DIR' ) ) {
278 define( 'GIVE_PLUGIN_DIR', plugin_dir_path( GIVE_PLUGIN_FILE ) );
279 }
280
281 // Plugin Folder URL.
282 if ( ! defined( 'GIVE_PLUGIN_URL' ) ) {
283 define( 'GIVE_PLUGIN_URL', plugin_dir_url( GIVE_PLUGIN_FILE ) );
284 }
285
286 // Plugin Basename aka: "give/give.php".
287 if ( ! defined( 'GIVE_PLUGIN_BASENAME' ) ) {
288 define( 'GIVE_PLUGIN_BASENAME', plugin_basename( GIVE_PLUGIN_FILE ) );
289 }
290
291 // Make sure CAL_GREGORIAN is defined.
292 if ( ! defined( 'CAL_GREGORIAN' ) ) {
293 define( 'CAL_GREGORIAN', 1 );
294 }
295 }
296
297 /**
298 * Loads the plugin language files.
299 *
300 * @since 1.0
301 * @access public
302 *
303 * @return void
304 */
305 public function load_textdomain() {
306 // Set filter for Give's languages directory
307 $give_lang_dir = dirname( plugin_basename( GIVE_PLUGIN_FILE ) ) . '/languages/';
308 $give_lang_dir = apply_filters( 'give_languages_directory', $give_lang_dir );
309
310 // Traditional WordPress plugin locale filter.
311 $locale = is_admin() && function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale();
312 $locale = apply_filters( 'plugin_locale', $locale, 'give' );
313
314 unload_textdomain( 'give' );
315 load_textdomain( 'give', WP_LANG_DIR . '/give/give-' . $locale . '.mo' );
316 load_plugin_textdomain( 'give', false, $give_lang_dir );
317 }
318
319
320 /**
321 * Show minimum PHP version notice.
322 *
323 * @since 1.8.12
324 * @access public
325 */
326 public function minimum_phpversion_notice() {
327 // Bailout.
328 if ( ! is_admin() ) {
329 return;
330 }
331
332 $notice_desc = '<p><strong>' . __(
333 'Your site could be faster and more secure with a newer PHP version.',
334 'give'
335 ) . '</strong></p>';
336 $notice_desc .= '<p>' . __(
337 'Hey, we\'ve noticed that you\'re running an outdated version of PHP. PHP is the programming language that WordPress and GiveWP are built on. The version that is currently used for your site is no longer supported. Newer versions of PHP are both faster and more secure. In fact, your version of PHP no longer receives security updates, which is why we\'re sending you this notice.',
338 'give'
339 ) . '</p>';
340 $notice_desc .= '<p>' . __(
341 'Hosts have the ability to update your PHP version, but sometimes they don\'t dare to do that because they\'re afraid they\'ll break your site.',
342 'give'
343 ) . '</p>';
344 $notice_desc .= '<p><strong>' . __( 'To which version should I update?', 'give' ) . '</strong></p>';
345 $notice_desc .= '<p>' . __(
346 'You should update your PHP version to either 5.6 or to 7.0 or 7.1. On a normal WordPress site, switching to PHP 5.6 should never cause issues. We would however actually recommend you switch to PHP7. There are some plugins that are not ready for PHP7 though, so do some testing first. PHP7 is much faster than PHP 5.6. It\'s also the only PHP version still in active development and therefore the better option for your site in the long run.',
347 'give'
348 ) . '</p>';
349 $notice_desc .= '<p><strong>' . __( 'Can\'t update? Ask your host!', 'give' ) . '</strong></p>';
350 $notice_desc .= '<p>' . sprintf(
351 __(
352 'If you cannot upgrade your PHP version yourself, you can send an email to your host. If they don\'t want to upgrade your PHP version, we would suggest you switch hosts. Have a look at one of the recommended %1$sWordPress hosting partners%2$s.',
353 'give'
354 ),
355 sprintf(
356 '<a href="%1$s" target="_blank">',
357 esc_url( 'https://wordpress.org/hosting/' )
358 ),
359 '</a>'
360 ) . '</p>';
361
362 echo sprintf(
363 '<div class="notice notice-error">%1$s</div>',
364 wp_kses_post( $notice_desc )
365 );
366 }
367
368 /**
369 * Display compatibility notice for Give 2.5.0 and Recurring 1.8.13 when Stripe premium is not active.
370 *
371 * @since 2.5.0
372 *
373 * @return void
374 */
375 public function display_old_recurring_compatibility_notice() {
376 // Show notice, if incompatibility found.
377 if (
378 defined( 'GIVE_RECURRING_VERSION' )
379 && version_compare( GIVE_RECURRING_VERSION, '1.9.0', '<' )
380 && defined( 'GIVE_STRIPE_VERSION' )
381 && version_compare( GIVE_STRIPE_VERSION, '2.2.0', '<' )
382 ) {
383 $message = sprintf(
384 __(
385 '<strong>Attention:</strong> GiveWP 2.5.0+ requires the latest version of the Recurring Donations add-on to process payments properly with Stripe. Please update to the latest version add-on to resolve compatibility issues. If your license is active, you should see the update available in WordPress. Otherwise, you can access the latest version by <a href="%1$s" target="_blank">logging into your account</a> and visiting <a href="%1$s" target="_blank">your downloads</a> page on the GiveWP website.',
386 'give'
387 ),
388 esc_url( 'https://givewp.com/wp-login.php' ),
389 esc_url( 'https://givewp.com/my-account/#tab_downloads' )
390 );
391
392 Give()->notices->register_notice(
393 [
394 'id' => 'give-compatibility-with-old-recurring',
395 'description' => $message,
396 'dismissible_type' => 'user',
397 'dismiss_interval' => 'shortly',
398 ]
399 );
400 }
401 }
402
403 public function install() {
404 $this->loadServiceProviders();
405 give_install();
406 }
407
408 /**
409 * Load all the service providers to bootstrap the various parts of the application.
410 *
411 * @since 2.8.0
412 */
413 private function loadServiceProviders() {
414 if ( $this->providersLoaded ) {
415 return;
416 }
417
418 $providers = [];
419
420 foreach ( $this->serviceProviders as $serviceProvider ) {
421 if ( ! is_subclass_of( $serviceProvider, ServiceProvider::class ) ) {
422 throw new InvalidArgumentException( "$serviceProvider class must implement the ServiceProvider interface" );
423 }
424
425 /** @var ServiceProvider $serviceProvider */
426 $serviceProvider = new $serviceProvider();
427
428 $serviceProvider->register();
429
430 $providers[] = $serviceProvider;
431 }
432
433 foreach ( $providers as $serviceProvider ) {
434 $serviceProvider->boot();
435 }
436
437 $this->providersLoaded = true;
438 }
439
440 /**
441 * Register a Service Provider for bootstrapping
442 *
443 * @since 2.8.0
444 *
445 * @param string $serviceProvider
446 */
447 public function registerServiceProvider( $serviceProvider ) {
448 $this->serviceProviders[] = $serviceProvider;
449 }
450
451 /**
452 * Magic properties are passed to the service container to retrieve the data.
453 *
454 * @since 2.8.0 retrieve from the service container
455 * @since 2.7.0
456 *
457 * @param string $propertyName
458 *
459 * @return mixed
460 * @throws Exception
461 */
462 public function __get( $propertyName ) {
463 return $this->container->get( $propertyName );
464 }
465
466 /**
467 * Magic methods are passed to the service container.
468 *
469 * @since 2.8.0
470 *
471 * @param $name
472 * @param $arguments
473 *
474 * @return mixed
475 */
476 public function __call( $name, $arguments ) {
477 return call_user_func_array( [ $this->container, $name ], $arguments );
478 }
479
480 /**
481 * Sets up the Exception Handler to catch and handle uncaught exceptions
482 *
483 * @unreleased
484 */
485 private function setupExceptionHandler() {
486 $handler = new UncaughtExceptionLogger();
487 $handler->setupExceptionHandler();
488 }
489 }
490
491 /**
492 * Start Give
493 *
494 * The main function responsible for returning the one true Give instance to functions everywhere.
495 *
496 * Use this function like you would a global variable, except without needing
497 * to declare the global.
498 *
499 * Example: <?php $give = Give(); ?>
500 *
501 * @since 2.8.0 add parameter for quick retrieval from container
502 * @since 1.0
503 *
504 * @param null $abstract Selector for data to retrieve from the service container
505 *
506 * @return object|Give
507 */
508 function give( $abstract = null ) {
509 static $instance = null;
510
511 if ( $instance === null ) {
512 $instance = new Give();
513 }
514
515 if ( $abstract !== null ) {
516 return $instance->make( $abstract );
517 }
518
519 return $instance;
520 }
521
522 require __DIR__ . '/vendor/autoload.php';
523
524 give()->boot();
525