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