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