Completed
Pull Request — master (#553)
by Devin
30:13 queued 13:44
created

Give::instance()   B

Complexity

Conditions 3
Paths 2

Size

Total Lines 24
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 9.762

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 24
ccs 1
cts 11
cp 0.0909
rs 8.9713
cc 3
eloc 17
nc 2
nop 0
crap 9.762
1
<?php
1 ignored issue
show
Coding Style Compatibility introduced by
For compatibility and reusability of your code, PSR1 recommends that a file should introduce either new symbols (like classes, functions, etc.) or have side-effects (like outputting something, or including other files), but not both at the same time. The first symbol is defined on line 52 and the first side effect is on line 51.

The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.

The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.

To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.

Loading history...
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: WordImpress
7
 * Author URI: https://wordimpress.com
8
 * Version: 1.3.6
9
 * Text Domain: give
10
 * Domain Path: /languages
11
 * GitHub Plugin URI: https://github.com/WordImpress/Give
12
 *
13
 * Give is free software: you can redistribute it and/or modify
14
 * it under the terms of the GNU General Public License as published by
15
 * the Free Software Foundation, either version 2 of the License, or
16
 * any later version.
17
 *
18
 * Give is distributed in the hope that it will be useful,
19
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21
 * GNU General Public License for more details.
22
 *
23
 * You should have received a copy of the GNU General Public License
24
 * along with Give. If not, see <http://www.gnu.org/licenses/>.
25
 *
26
 * A Tribute to Open Source:
27
 *
28
 * "Open source software is software that can be freely used, changed, and shared (in modified or unmodified form) by anyone. Open
29
 * source software is made by many people, and distributed under licenses that comply with the Open Source Definition."
30
 *
31
 * -- The Open Source Initiative
32
 *
33
 * Give is a tribute to the spirit and philosophy of Open Source. We at WordImpress gladly embrace the Open Source philosophy both
34
 * 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 and their talented developers. Thank you all for your contribution to WordPress.
37
 *
38
 * - The WordImpress Team
39
 *
40
 */
41
42
// Exit if accessed directly
43
if ( ! defined( 'ABSPATH' ) ) {
44
	exit;
45
}
46
47
if ( ! class_exists( 'Give' ) ) : /**
48
 * Main Give Class
49
 *
50
 * @since 1.0
51
 */ {
52
	final class Give {
53
		/** Singleton *************************************************************/
54
55
56
		/**
57
		 * @var Give The one true Give
58
		 * @since 1.0
59
		 */
60
		private static $instance;
61
62
		/**
63
		 * Give Roles Object
64
		 *
65
		 * @var Give_Roles object
66
		 * @since 1.0
67
		 */
68
		public $roles;
69
70
		/**
71
		 * Give Settings Object
72
		 *
73
		 * @var Give_Plugin_Settings object
74
		 * @since 1.0
75
		 */
76
		public $give_settings;
77
78
		/**
79
		 * Give Session Object
80
		 *
81
		 * This holds donation data for user's session
82
		 *
83
		 * @var Give_Session object
84
		 * @since 1.0
85
		 */
86
		public $session;
87
88
		/**
89
		 * Give HTML Element Helper Object
90
		 *
91
		 * @var Give_HTML_Elements object
92
		 * @since 1.0
93
		 */
94
		public $html;
95
96
97
		/**
98
		 * Give Emails Object
99
		 *
100
		 * @var Give_Emails object
101
		 * @since 1.0
102
		 */
103
		public $emails;
104
105
		/**
106
		 * Give Email Template Tags Object
107
		 *
108
		 * @var Give_Email_Template_Tags object
109
		 * @since 1.0
110
		 */
111
		public $email_tags;
112
113
		/**
114
		 * Give Customers DB Object
115
		 *
116
		 * @var Give_Customer object
117
		 * @since 1.0
118
		 */
119
		public $customers;
120
121
		/**
122
		 * Give API Object
123
		 *
124
		 * @var Give_API object
125
		 * @since 1.1
126
		 */
127
		public $api;
128
129
		/**
130
		 * Give Template Loader Object
131
		 *
132
		 * @var Give_Template_Loader object
133
		 * @since 1.0
134
		 */
135
		public $template_loader;
136
137
		/**
138
		 * Give No Login Object
139
		 *
140
		 * @var Give_Email_Access object
141
		 * @since 1.0
142
		 */
143
		public $email_access;
144
145
		/**
146
		 * Main Give Instance
147
		 *
148
		 * Insures that only one instance of Give exists in memory at any one
149
		 * time. Also prevents needing to define globals all over the place.
150
		 *
151
		 * @since     1.0
152 48
		 * @static
153 48
		 * @staticvar array $instance
154
		 * @uses      Give::setup_constants() Setup the constants needed
155
		 * @uses      Give::includes() Include the required files
156
		 * @uses      Give::load_textdomain() load the language files
157
		 * @see       Give()
158
		 * @return    Give
159
		 */
160
		public static function instance() {
161
			if ( ! isset( self::$instance ) && ! ( self::$instance instanceof Give ) ) {
162
				self::$instance = new Give;
163
				self::$instance->setup_constants();
164
165
				add_action( 'plugins_loaded', array( self::$instance, 'load_textdomain' ) );
166
167
				self::$instance->includes();
168
				self::$instance->roles         = new Give_Roles();
169
				self::$instance->api           = new Give_API();
170
				self::$instance->give_settings = new Give_Plugin_Settings();
171
				self::$instance->session       = new Give_Session();
172
				self::$instance->html          = new Give_HTML_Elements();
173 48
				self::$instance->emails        = new Give_Emails();
174
				self::$instance->email_tags    = new Give_Email_Template_Tags();
175
				//self::$instance->donators_gravatars = new Give_Donators_Gravatars();
0 ignored issues
show
Unused Code Comprehensibility introduced by
58% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
176
				self::$instance->customers       = new Give_DB_Customers();
177
				self::$instance->template_loader = new Give_Template_Loader();
178
				self::$instance->email_access    = new Give_Email_Access();
179
180
			}
181
182
			return self::$instance;
183
		}
184
185
		/**
186
		 * Throw error on object clone
187
		 *
188
		 * The whole idea of the singleton design pattern is that there is a single
189
		 * object, therefore we don't want the object to be cloned.
190
		 *
191
		 * @since  1.0
192
		 * @access protected
193
		 * @return void
194
		 */
195
		public function __clone() {
196
			// Cloning instances of the class is forbidden
197
			_doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'give' ), '1.0' );
198
		}
199
200
		/**
201
		 * Disable unserializing of the class
202
		 *
203
		 * @since  1.0
204
		 * @access protected
205
		 * @return void
206
		 */
207
		public function __wakeup() {
208
			// Unserializing instances of the class is forbidden
209
			_doing_it_wrong( __FUNCTION__, __( 'Cheatin&#8217; huh?', 'give' ), '1.0' );
210
		}
211
212
		/**
213
		 * Setup plugin constants
214
		 *
215
		 * @access private
216
		 * @since  1.0
217
		 * @return void
218
		 */
219
		private function setup_constants() {
220
221
			// Plugin version
222
			if ( ! defined( 'GIVE_VERSION' ) ) {
223
				define( 'GIVE_VERSION', '1.3.6' );
224
			}
225
226
			// Plugin Folder Path
227
			if ( ! defined( 'GIVE_PLUGIN_DIR' ) ) {
228
				define( 'GIVE_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
229
			}
230
231
			// Plugin Folder URL
232
			if ( ! defined( 'GIVE_PLUGIN_URL' ) ) {
233
				define( 'GIVE_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
234
			}
235
236
			// Plugin Basename aka: "give/give.php"
237
			if ( ! defined( 'GIVE_PLUGIN_BASENAME' ) ) {
238
				define( 'GIVE_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
239
			}
240
241
			// Plugin Root File
242
			if ( ! defined( 'GIVE_PLUGIN_FILE' ) ) {
243
				define( 'GIVE_PLUGIN_FILE', __FILE__ );
244
			}
245
246
			// Make sure CAL_GREGORIAN is defined
247
			if ( ! defined( 'CAL_GREGORIAN' ) ) {
248
				define( 'CAL_GREGORIAN', 1 );
249
			}
250
		}
251
252
		/**
253
		 * Include required files
254
		 *
255
		 * @access private
256
		 * @since  1.0
257
		 * @return void
258
		 */
259
		private function includes() {
260
			global $give_options;
1 ignored issue
show
Compatibility Best Practice introduced by
Use of global functionality is not recommended; it makes your code harder to test, and less reusable.

Instead of relying on global state, we recommend one of these alternatives:

1. Pass all data via parameters

function myFunction($a, $b) {
    // Do something
}

2. Create a class that maintains your state

class MyClass {
    private $a;
    private $b;

    public function __construct($a, $b) {
        $this->a = $a;
        $this->b = $b;
    }

    public function myFunction() {
        // Do something
    }
}
Loading history...
261
262
			require_once GIVE_PLUGIN_DIR . 'includes/admin/register-settings.php';
263
			$give_options = give_get_settings();
264
265
			require_once GIVE_PLUGIN_DIR . 'includes/post-types.php';
266
			require_once GIVE_PLUGIN_DIR . 'includes/scripts.php';
267
			require_once GIVE_PLUGIN_DIR . 'includes/ajax-functions.php';
268
			require_once GIVE_PLUGIN_DIR . 'includes/actions.php';
269
			require_once GIVE_PLUGIN_DIR . 'includes/api/class-give-api.php';
270
271
			require_once GIVE_PLUGIN_DIR . 'includes/class-give-roles.php';
272
			require_once GIVE_PLUGIN_DIR . 'includes/class-give-template-loader.php';
273
			require_once GIVE_PLUGIN_DIR . 'includes/class-give-donate-form.php';
274
			require_once GIVE_PLUGIN_DIR . 'includes/class-give-db.php';
275
			require_once GIVE_PLUGIN_DIR . 'includes/class-give-db-customers.php';
276
			require_once GIVE_PLUGIN_DIR . 'includes/class-give-customer.php';
277
			require_once GIVE_PLUGIN_DIR . 'includes/class-give-stats.php';
278
			require_once GIVE_PLUGIN_DIR . 'includes/class-give-session.php';
279
			require_once GIVE_PLUGIN_DIR . 'includes/class-give-html-elements.php';
280
			require_once GIVE_PLUGIN_DIR . 'includes/class-give-logging.php';
281
			require_once GIVE_PLUGIN_DIR . 'includes/class-give-license-handler.php';
282
			require_once GIVE_PLUGIN_DIR . 'includes/class-give-cron.php';
283
			require_once GIVE_PLUGIN_DIR . 'includes/class-give-email-access.php';
284
285
			require_once GIVE_PLUGIN_DIR . 'includes/country-functions.php';
286
			require_once GIVE_PLUGIN_DIR . 'includes/template-functions.php';
287
			require_once GIVE_PLUGIN_DIR . 'includes/misc-functions.php';
288
			require_once GIVE_PLUGIN_DIR . 'includes/forms/functions.php';
289
			require_once GIVE_PLUGIN_DIR . 'includes/forms/template.php';
290
			require_once GIVE_PLUGIN_DIR . 'includes/forms/widget.php';
291
			require_once GIVE_PLUGIN_DIR . 'includes/shortcodes.php';
292
			require_once GIVE_PLUGIN_DIR . 'includes/formatting.php';
293
			require_once GIVE_PLUGIN_DIR . 'includes/price-functions.php';
294
			require_once GIVE_PLUGIN_DIR . 'includes/error-tracking.php';
295
			require_once GIVE_PLUGIN_DIR . 'includes/process-purchase.php';
296
			require_once GIVE_PLUGIN_DIR . 'includes/login-register.php';
297
			require_once GIVE_PLUGIN_DIR . 'includes/user-functions.php';
298
			require_once GIVE_PLUGIN_DIR . 'includes/plugin-compatibility.php';
299
300
			require_once GIVE_PLUGIN_DIR . 'includes/payments/functions.php';
301
			require_once GIVE_PLUGIN_DIR . 'includes/payments/actions.php';
302
			require_once GIVE_PLUGIN_DIR . 'includes/payments/class-payment-stats.php';
303
			require_once GIVE_PLUGIN_DIR . 'includes/payments/class-payments-query.php';
304
			require_once GIVE_PLUGIN_DIR . 'includes/payments/class-donators-gravatars.php';
305
306
			require_once GIVE_PLUGIN_DIR . 'includes/gateways/functions.php';
307
			require_once GIVE_PLUGIN_DIR . 'includes/gateways/actions.php';
308
			require_once GIVE_PLUGIN_DIR . 'includes/gateways/paypal-standard.php';
309
			require_once GIVE_PLUGIN_DIR . 'includes/gateways/offline-donations.php';
310
			require_once GIVE_PLUGIN_DIR . 'includes/gateways/manual.php';
311
312
			require_once GIVE_PLUGIN_DIR . 'includes/emails/class-give-emails.php';
313
			require_once GIVE_PLUGIN_DIR . 'includes/emails/class-give-email-tags.php';
314
			require_once GIVE_PLUGIN_DIR . 'includes/emails/functions.php';
315
			require_once GIVE_PLUGIN_DIR . 'includes/emails/template.php';
316
			require_once GIVE_PLUGIN_DIR . 'includes/emails/actions.php';
317
318
			if ( is_admin() || ( defined( 'WP_CLI' ) && WP_CLI ) ) {
319
320
				require_once GIVE_PLUGIN_DIR . 'includes/admin/admin-footer.php';
321
				require_once GIVE_PLUGIN_DIR . 'includes/admin/welcome.php';
322
				require_once GIVE_PLUGIN_DIR . 'includes/admin/admin-pages.php';
323
				require_once GIVE_PLUGIN_DIR . 'includes/admin/class-admin-notices.php';
324
				require_once GIVE_PLUGIN_DIR . 'includes/admin/class-api-keys-table.php';
325
				require_once GIVE_PLUGIN_DIR . 'includes/admin/admin-actions.php';
326
				require_once GIVE_PLUGIN_DIR . 'includes/admin/system-info.php';
327
				require_once GIVE_PLUGIN_DIR . 'includes/admin/export-functions.php';
328
				require_once GIVE_PLUGIN_DIR . 'includes/admin/add-ons.php';
329
				require_once GIVE_PLUGIN_DIR . 'includes/admin/plugins.php';
330
				require_once GIVE_PLUGIN_DIR . 'includes/admin/dashboard-widgets.php';
331
332
				require_once GIVE_PLUGIN_DIR . 'includes/admin/payments/actions.php';
333
				require_once GIVE_PLUGIN_DIR . 'includes/admin/payments/payments-history.php';
334
335
				require_once GIVE_PLUGIN_DIR . 'includes/admin/customers/customers.php';
336
				require_once GIVE_PLUGIN_DIR . 'includes/admin/customers/customer-functions.php';
337
				require_once GIVE_PLUGIN_DIR . 'includes/admin/customers/customer-actions.php';
338
				require_once GIVE_PLUGIN_DIR . 'includes/admin/forms/metabox.php';
339
				require_once GIVE_PLUGIN_DIR . 'includes/admin/forms/dashboard-columns.php';
340
341
				require_once GIVE_PLUGIN_DIR . 'includes/admin/reporting/reports.php';
342
				require_once GIVE_PLUGIN_DIR . 'includes/admin/reporting/pdf-reports.php';
343
				require_once GIVE_PLUGIN_DIR . 'includes/admin/reporting/class-give-graph.php';
344
				require_once GIVE_PLUGIN_DIR . 'includes/admin/reporting/graphing.php';
345
346
				require_once GIVE_PLUGIN_DIR . 'includes/admin/shortcodes/abstract-shortcode-generator.php';
347
				require_once GIVE_PLUGIN_DIR . 'includes/admin/shortcodes/class-shortcode-button.php';
348
				require_once GIVE_PLUGIN_DIR . 'includes/admin/shortcodes/shortcode-give-form.php';
349
				require_once GIVE_PLUGIN_DIR . 'includes/admin/shortcodes/shortcode-give-goal.php';
350
				require_once GIVE_PLUGIN_DIR . 'includes/admin/shortcodes/shortcode-give-login.php';
351
				require_once GIVE_PLUGIN_DIR . 'includes/admin/shortcodes/shortcode-give-register.php';
352
				require_once GIVE_PLUGIN_DIR . 'includes/admin/shortcodes/shortcode-give-profile-editor.php';
353
				require_once GIVE_PLUGIN_DIR . 'includes/admin/shortcodes/shortcode-give-donation-history.php';
354
				require_once GIVE_PLUGIN_DIR . 'includes/admin/shortcodes/shortcode-give-receipt.php';
355
356
				require_once GIVE_PLUGIN_DIR . 'includes/admin/upgrades/upgrade-functions.php';
357
				require_once GIVE_PLUGIN_DIR . 'includes/admin/upgrades/upgrades.php';
358
359
			}
360
361
			require_once GIVE_PLUGIN_DIR . 'includes/install.php';
362
363
		}
364
365
		/**
366
		 * Loads the plugin language files
367
		 *
368
		 * @access public
369
		 * @since  1.0
370
		 * @return void
371
		 */
372
		public function load_textdomain() {
373
			// Set filter for Give's languages directory
374
			$give_lang_dir = dirname( plugin_basename( GIVE_PLUGIN_FILE ) ) . '/languages/';
375
			$give_lang_dir = apply_filters( 'give_languages_directory', $give_lang_dir );
376
377
			// Traditional WordPress plugin locale filter
378
			$locale = apply_filters( 'plugin_locale', get_locale(), 'give' );
379
			$mofile = sprintf( '%1$s-%2$s.mo', 'give', $locale );
380
381
			// Setup paths to current locale file
382
			$mofile_local  = $give_lang_dir . $mofile;
383
			$mofile_global = WP_LANG_DIR . '/give/' . $mofile;
384
385
			if ( file_exists( $mofile_global ) ) {
386
				// Look in global /wp-content/languages/give folder
387
				load_textdomain( 'give', $mofile_global );
388
			} elseif ( file_exists( $mofile_local ) ) {
389
				// Look in local location from filter `give_languages_directory`
390
				load_textdomain( 'give', $mofile_local );
391
			} else {
392
				// Load the default language files packaged up w/ Give
393
				load_plugin_textdomain( 'give', false, $give_lang_dir );
394
			}
395
		}
396
	}
397
}
398
399
endif; // End if class_exists check
400
401
402
/**
403
 * The main function responsible for returning the one true Give
404
 * Instance to functions everywhere.
405 48
 *
406
 * Use this function like you would a global variable, except without needing
407
 * to declare the global.
408
 *
409
 * Example: <?php $give = Give(); ?>
410
 *
411
 * @since 1.0
412
 * @return object - The one true Give Instance
413
 */
414
function Give() {
415
	return Give::instance();
416
}
417
418
// Get Give Running
419
Give();
420