PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 2.16.1
GiveWP – Donation Plugin and Fundraising Platform v2.16.1
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 4 years ago blocks 4 years ago includes 4 years ago languages 4 years ago sample-data 6 years ago src 4 years ago templates 5 years ago vendor 4 years ago .phpstorm.meta.php 5 years ago changelog.txt 5 years ago docker_tag 5 years ago give.php 4 years ago license.txt 6 years ago output.log 4 years ago readme.txt 4 years ago uninstall.php 5 years ago wpml-config.xml 6 years ago
give.php
529 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.16.1
9 * Requires at least: 4.9
10 * Requires PHP: 5.6
11 * Text Domain: give
12 * Domain Path: /languages
13 *
14 * Give is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation, either version 3 of the License, or
17 * any later version.
18 *
19 * Give is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 * You should have received a copy of the GNU General Public License
25 * along with Give. If not, see <https://www.gnu.org/licenses/>.
26 *
27 * A Tribute to Open Source:
28 *
29 * "Open source software is software that can be freely used, changed, and shared (in modified or unmodified form) by
30 * anyone. Open source software is made by many people, and distributed under licenses that comply with the Open Source
31 * Definition."
32 *
33 * -- The Open Source Initiative
34 *
35 * Give is a tribute to the spirit and philosophy of Open Source. We at GiveWP gladly embrace the Open Source
36 * philosophy both in how Give itself was developed, and how we hope to see others build more from our code base.
37 *
38 * Give would not have been possible without the tireless efforts of WordPress and the surrounding Open Source projects
39 * and their talented developers. Thank you all for your contribution to WordPress.
40 *
41 * - The GiveWP Team
42 */
43
44 use Give\Container\Container;
45 use Give\DonorDashboards\ServiceProvider as DonorDashboardsServiceProvider;
46 use Give\Form\LegacyConsumer\ServiceProvider as FormLegacyConsumerServiceProvider;
47 use Give\Form\Templates;
48 use Give\Framework\Exceptions\UncaughtExceptionLogger;
49 use Give\Framework\Migrations\MigrationsServiceProvider;
50 use Give\License\LicenseServiceProvider;
51 use Give\Log\LogServiceProvider;
52 use Give\MigrationLog\MigrationLogServiceProvider;
53 use Give\MultiFormGoals\ServiceProvider as MultiFormGoalsServiceProvider;
54 use Give\Revenue\RevenueServiceProvider;
55 use Give\Route\Form as FormRoute;
56 use Give\ServiceProviders\LegacyServiceProvider;
57 use Give\ServiceProviders\Onboarding;
58 use Give\ServiceProviders\PaymentGateways;
59 use Give\ServiceProviders\RestAPI;
60 use Give\ServiceProviders\Routes;
61 use Give\ServiceProviders\ServiceProvider;
62 use Give\Shims\ShimsServiceProvider;
63 use Give\TestData\ServiceProvider as TestDataServiceProvider;
64 use Give\Tracking\TrackingServiceProvider;
65
66 // Exit if accessed directly.
67 if ( ! defined( 'ABSPATH' ) ) {
68 exit;
69 }
70
71 /**
72 * Main Give Class
73 *
74 * @since 2.8.0 build in a service container
75 * @since 1.0
76 *
77 * @property-read Give_API $api
78 * @property-read Give_Async_Process $async_process
79 * @property-read Give_Comment $comment
80 * @property-read Give_DB_Donors $donors
81 * @property-read Give_DB_Donor_Meta $donor_meta
82 * @property-read Give_Emails $emails
83 * @property-read Give_Email_Template_Tags $email_tags
84 * @property-read Give_DB_Form_Meta $form_meta
85 * @property-read Give_Admin_Settings $give_settings
86 * @property-read Give_HTML_Elements $html
87 * @property-read Give_Logging $logs
88 * @property-read Give_Notices $notices
89 * @property-read Give_DB_Payment_Meta $payment_meta
90 * @property-read Give_Roles $roles
91 * @property-read FormRoute $routeForm
92 * @property-read Templates $templates
93 * @property-read Give_Scripts $scripts
94 * @property-read Give_DB_Sequential_Ordering $sequential_donation_db
95 * @property-read Give_Sequential_Donation_Number $seq_donation_number
96 * @property-read Give_Session $session
97 * @property-read Give_DB_Sessions $session_db
98 * @property-read Give_Tooltips $tooltips
99 *
100 * @mixin Container
101 */
102 final class Give {
103 /**
104 * Give Template Loader Object
105 *
106 * @since 1.0
107 * @access public
108 *
109 * @var Give_Template_Loader object
110 */
111 public $template_loader;
112
113 /**
114 * Give No Login Object
115 *
116 * @since 1.0
117 * @access public
118 *
119 * @var Give_Email_Access object
120 */
121 public $email_access;
122
123 /**
124 * Give_Stripe Object.
125 *
126 * @since 2.5.0
127 * @access public
128 *
129 * @var Give_Stripe
130 */
131 public $stripe;
132
133 /**
134 * @since 2.8.0
135 *
136 * @var Container
137 */
138 private $container;
139
140 /**
141 * @since 2.8.0
142 *
143 * @var array Array of Service Providers to load
144 */
145 private $serviceProviders = [
146 LegacyServiceProvider::class,
147 RestAPI::class,
148 Routes::class,
149 PaymentGateways::class,
150 Onboarding::class,
151 MigrationsServiceProvider::class,
152 RevenueServiceProvider::class,
153 MultiFormGoalsServiceProvider::class,
154 DonorDashboardsServiceProvider::class,
155 TrackingServiceProvider::class,
156 TestDataServiceProvider::class,
157 MigrationLogServiceProvider::class,
158 LogServiceProvider::class,
159 FormLegacyConsumerServiceProvider::class,
160 ShimsServiceProvider::class,
161 LicenseServiceProvider::class
162 ];
163
164 /**
165 * @since 2.8.0
166 *
167 * @var bool Make sure the providers are loaded only once
168 */
169 private $providersLoaded = false;
170
171 /**
172 * Give constructor.
173 *
174 * Sets up the Container to be used for managing all other instances and data
175 *
176 * @since 2.8.0
177 */
178 public function __construct() {
179 $this->container = new Container();
180 }
181
182 /**
183 * Bootstraps the Give Plugin
184 *
185 * @since 2.8.0
186 */
187 public function boot() {
188 // PHP version
189 if ( ! defined( 'GIVE_REQUIRED_PHP_VERSION' ) ) {
190 define( 'GIVE_REQUIRED_PHP_VERSION', '5.6.0' );
191 }
192
193 // Bailout: Need minimum php version to load plugin.
194 if ( function_exists( 'phpversion' ) && version_compare( GIVE_REQUIRED_PHP_VERSION, phpversion(), '>' ) ) {
195 add_action( 'admin_notices', [ $this, 'minimum_phpversion_notice' ] );
196
197 return;
198 }
199
200 $this->setup_constants();
201
202 // Add compatibility notice for recurring and stripe support with Give 2.5.0.
203 add_action( 'admin_notices', [ $this, 'display_old_recurring_compatibility_notice' ] );
204
205 add_action( 'plugins_loaded', [ $this, 'init' ], 0 );
206
207 register_activation_hook( GIVE_PLUGIN_FILE, [ $this, 'install' ] );
208
209 do_action( 'give_loaded' );
210 }
211
212 /**
213 * Init Give when WordPress Initializes.
214 *
215 * @since 1.8.9
216 */
217 public function init() {
218 /**
219 * Fires before the Give core is initialized.
220 *
221 * @since 1.8.9
222 */
223 do_action( 'before_give_init' );
224
225 // Set up localization.
226 $this->load_textdomain();
227
228 $this->bindClasses();
229
230 $this->setupExceptionHandler();
231
232 $this->loadServiceProviders();
233
234 // Load form template
235 $this->templates->load();
236
237 // Load routes.
238 $this->routeForm->init();
239
240 /**
241 * Fire the action after Give core loads.
242 *
243 * @since 1.8.7
244 *
245 * @param Give class instance.
246 *
247 */
248 do_action( 'give_init', $this );
249 }
250
251 /**
252 * Binds the initial classes to the service provider.
253 *
254 * @since 2.8.0
255 */
256 private function bindClasses() {
257 $this->container->singleton( 'templates', Templates::class );
258 $this->container->singleton( 'routeForm', FormRoute::class );
259 }
260
261 /**
262 * Setup plugin constants
263 *
264 * @since 1.0
265 * @access private
266 *
267 * @return void
268 */
269 private function setup_constants() {
270 // Plugin version.
271 if ( ! defined( 'GIVE_VERSION' ) ) {
272 define( 'GIVE_VERSION', '2.16.1' );
273 }
274
275 // Plugin Root File.
276 if ( ! defined( 'GIVE_PLUGIN_FILE' ) ) {
277 define( 'GIVE_PLUGIN_FILE', __FILE__ );
278 }
279
280 // Plugin Folder Path.
281 if ( ! defined( 'GIVE_PLUGIN_DIR' ) ) {
282 define( 'GIVE_PLUGIN_DIR', plugin_dir_path( GIVE_PLUGIN_FILE ) );
283 }
284
285 // Plugin Folder URL.
286 if ( ! defined( 'GIVE_PLUGIN_URL' ) ) {
287 define( 'GIVE_PLUGIN_URL', plugin_dir_url( GIVE_PLUGIN_FILE ) );
288 }
289
290 // Plugin Basename aka: "give/give.php".
291 if ( ! defined( 'GIVE_PLUGIN_BASENAME' ) ) {
292 define( 'GIVE_PLUGIN_BASENAME', plugin_basename( GIVE_PLUGIN_FILE ) );
293 }
294
295 // Make sure CAL_GREGORIAN is defined.
296 if ( ! defined( 'CAL_GREGORIAN' ) ) {
297 define( 'CAL_GREGORIAN', 1 );
298 }
299 }
300
301 /**
302 * Loads the plugin language files.
303 *
304 * @since 1.0
305 * @access public
306 *
307 * @return void
308 */
309 public function load_textdomain() {
310 // Set filter for Give's languages directory
311 $give_lang_dir = dirname( plugin_basename( GIVE_PLUGIN_FILE ) ) . '/languages/';
312 $give_lang_dir = apply_filters( 'give_languages_directory', $give_lang_dir );
313
314 // Traditional WordPress plugin locale filter.
315 $locale = is_admin() && function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale();
316 $locale = apply_filters( 'plugin_locale', $locale, 'give' );
317
318 unload_textdomain( 'give' );
319 load_textdomain( 'give', WP_LANG_DIR . '/give/give-' . $locale . '.mo' );
320 load_plugin_textdomain( 'give', false, $give_lang_dir );
321 }
322
323
324 /**
325 * Show minimum PHP version notice.
326 *
327 * @since 1.8.12
328 * @access public
329 */
330 public function minimum_phpversion_notice() {
331 // Bailout.
332 if ( ! is_admin() ) {
333 return;
334 }
335
336 $notice_desc = '<p><strong>' . __(
337 'Your site could be faster and more secure with a newer PHP version.',
338 'give'
339 ) . '</strong></p>';
340 $notice_desc .= '<p>' . __(
341 '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.',
342 'give'
343 ) . '</p>';
344 $notice_desc .= '<p>' . __(
345 '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.',
346 'give'
347 ) . '</p>';
348 $notice_desc .= '<p><strong>' . __( 'To which version should I update?', 'give' ) . '</strong></p>';
349 $notice_desc .= '<p>' . __(
350 '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.',
351 'give'
352 ) . '</p>';
353 $notice_desc .= '<p><strong>' . __( 'Can\'t update? Ask your host!', 'give' ) . '</strong></p>';
354 $notice_desc .= '<p>' . sprintf(
355 __(
356 '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.',
357 'give'
358 ),
359 sprintf(
360 '<a href="%1$s" target="_blank">',
361 esc_url( 'https://wordpress.org/hosting/' )
362 ),
363 '</a>'
364 ) . '</p>';
365
366 echo sprintf(
367 '<div class="notice notice-error">%1$s</div>',
368 wp_kses_post( $notice_desc )
369 );
370 }
371
372 /**
373 * Display compatibility notice for Give 2.5.0 and Recurring 1.8.13 when Stripe premium is not active.
374 *
375 * @since 2.5.0
376 *
377 * @return void
378 */
379 public function display_old_recurring_compatibility_notice() {
380 // Show notice, if incompatibility found.
381 if (
382 defined( 'GIVE_RECURRING_VERSION' )
383 && version_compare( GIVE_RECURRING_VERSION, '1.9.0', '<' )
384 && defined( 'GIVE_STRIPE_VERSION' )
385 && version_compare( GIVE_STRIPE_VERSION, '2.2.0', '<' )
386 ) {
387 $message = sprintf(
388 __(
389 '<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.',
390 'give'
391 ),
392 esc_url( 'https://givewp.com/wp-login.php' ),
393 esc_url( 'https://givewp.com/my-account/#tab_downloads' )
394 );
395
396 Give()->notices->register_notice(
397 [
398 'id' => 'give-compatibility-with-old-recurring',
399 'description' => $message,
400 'dismissible_type' => 'user',
401 'dismiss_interval' => 'shortly',
402 ]
403 );
404 }
405 }
406
407 public function install() {
408 $this->loadServiceProviders();
409 give_install();
410 }
411
412 /**
413 * Load all the service providers to bootstrap the various parts of the application.
414 *
415 * @since 2.8.0
416 */
417 private function loadServiceProviders() {
418 if ( $this->providersLoaded ) {
419 return;
420 }
421
422 $providers = [];
423
424 foreach ( $this->serviceProviders as $serviceProvider ) {
425 if ( ! is_subclass_of( $serviceProvider, ServiceProvider::class ) ) {
426 throw new InvalidArgumentException( "$serviceProvider class must implement the ServiceProvider interface" );
427 }
428
429 /** @var ServiceProvider $serviceProvider */
430 $serviceProvider = new $serviceProvider();
431
432 $serviceProvider->register();
433
434 $providers[] = $serviceProvider;
435 }
436
437 foreach ( $providers as $serviceProvider ) {
438 $serviceProvider->boot();
439 }
440
441 $this->providersLoaded = true;
442 }
443
444 /**
445 * Register a Service Provider for bootstrapping
446 *
447 * @since 2.8.0
448 *
449 * @param string $serviceProvider
450 */
451 public function registerServiceProvider( $serviceProvider ) {
452 $this->serviceProviders[] = $serviceProvider;
453 }
454
455 /**
456 * Magic properties are passed to the service container to retrieve the data.
457 *
458 * @since 2.8.0 retrieve from the service container
459 * @since 2.7.0
460 *
461 * @param string $propertyName
462 *
463 * @return mixed
464 * @throws Exception
465 */
466 public function __get( $propertyName ) {
467 return $this->container->get( $propertyName );
468 }
469
470 /**
471 * Magic methods are passed to the service container.
472 *
473 * @since 2.8.0
474 *
475 * @param $name
476 * @param $arguments
477 *
478 * @return mixed
479 */
480 public function __call( $name, $arguments ) {
481 return call_user_func_array( [ $this->container, $name ], $arguments );
482 }
483
484 /**
485 * Sets up the Exception Handler to catch and handle uncaught exceptions
486 *
487 * @unreleased
488 */
489 private function setupExceptionHandler() {
490 $handler = new UncaughtExceptionLogger();
491 $handler->setupExceptionHandler();
492 }
493 }
494
495 /**
496 * Start Give
497 *
498 * The main function responsible for returning the one true Give instance to functions everywhere.
499 *
500 * Use this function like you would a global variable, except without needing
501 * to declare the global.
502 *
503 * Example: <?php $give = Give(); ?>
504 *
505 * @since 2.8.0 add parameter for quick retrieval from container
506 * @since 1.0
507 *
508 * @param null $abstract Selector for data to retrieve from the service container
509 *
510 * @return object|Give
511 */
512 function give( $abstract = null ) {
513 static $instance = null;
514
515 if ( $instance === null ) {
516 $instance = new Give();
517 }
518
519 if ( $abstract !== null ) {
520 return $instance->make( $abstract );
521 }
522
523 return $instance;
524 }
525
526 require __DIR__ . '/vendor/autoload.php';
527
528 give()->boot();
529