Completed
Push — issues/1132 ( 79489e...599bec )
by Ravinder
19:50
created

actions.php ➔ _give_save_donor_billing_address()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 16
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 6
nc 2
nop 1
dl 0
loc 16
rs 9.4285
c 0
b 0
f 0
1
<?php
0 ignored issues
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 26 and the first side effect is on line 14.

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
 * Front-end Actions
4
 *
5
 * @package     Give
6
 * @subpackage  Functions
7
 * @copyright   Copyright (c) 2016, WordImpress
8
 * @license     https://opensource.org/licenses/gpl-license GNU Public License
9
 * @since       1.0
10
 */
11
12
// Exit if accessed directly.
13
if ( ! defined( 'ABSPATH' ) ) {
14
	exit;
15
}
16
17
/**
18
 * Hooks Give actions, when present in the $_GET superglobal. Every give_action
19
 * present in $_GET is called using WordPress's do_action function. These
20
 * functions are called on init.
21
 *
22
 * @since  1.0
23
 *
24
 * @return void
25
 */
26
function give_get_actions() {
27
28
	$_get_action = ! empty( $_GET['give_action'] ) ? $_GET['give_action'] : null;
29
30
	// Add backward compatibility to give-action param ( $_GET )
31
	if(  empty( $_get_action ) ) {
32
		$_get_action = ! empty( $_GET['give-action'] ) ? $_GET['give-action'] : null;
33
	}
34
35
	if ( isset( $_get_action ) ) {
36
		/**
37
		 * Fires in WordPress init or admin init, when give_action is present in $_GET.
38
		 *
39
		 * @since 1.0
40
		 *
41
		 * @param array $_GET Array of HTTP GET variables.
42
		 */
43
		do_action( "give_{$_get_action}", $_GET );
44
	}
45
46
}
47
48
add_action( 'init', 'give_get_actions' );
49
50
/**
51
 * Hooks Give actions, when present in the $_POST super global. Every give_action
52
 * present in $_POST is called using WordPress's do_action function. These
53
 * functions are called on init.
54
 *
55
 * @since  1.0
56
 *
57
 * @return void
58
 */
59
function give_post_actions() {
60
61
	$_post_action = ! empty( $_POST['give_action'] ) ? $_POST['give_action'] : null;
62
63
64
	// Add backward compatibility to give-action param ( $_POST ).
65
	if(  empty( $_post_action ) ) {
66
		$_post_action = ! empty( $_POST['give-action'] ) ? $_POST['give-action'] : null;
67
	}
68
69
	if ( isset( $_post_action ) ) {
70
		/**
71
		 * Fires in WordPress init or admin init, when give_action is present in $_POST.
72
		 *
73
		 * @since 1.0
74
		 *
75
		 * @param array $_POST Array of HTTP POST variables.
76
		 */
77
		do_action( "give_{$_post_action}", $_POST );
78
	}
79
80
}
81
82
add_action( 'init', 'give_post_actions' );
83
84
/**
85
 * Connect WordPress user with Donor.
86
 *
87
 * @since  1.7
88
 * @param  int   $user_id   User ID
89
 * @param  array $user_data User Data
90
 * @return void
91
 */
92
function give_connect_donor_to_wpuser( $user_id, $user_data ){
93
	/* @var Give_Donor $donor */
94
	$donor = new Give_Donor( $user_data['user_email'] );
95
96
	// Validate donor id and check if do not is already connect to wp user or not.
97
	if( $donor->id && ! $donor->user_id ) {
98
99
		// Update donor user_id.
100
		if( $donor->update( array( 'user_id' => $user_id ) ) ) {
101
			$donor_note = sprintf( esc_html__( 'WordPress user #%d is connected to #%d', 'give' ), $user_id, $donor->id );
102
			$donor->add_note( $donor_note );
103
104
			// Update user_id meta in payments.
105
			// if( ! empty( $donor->payment_ids ) && ( $donations = explode( ',', $donor->payment_ids ) ) ) {
0 ignored issues
show
Unused Code Comprehensibility introduced by
50% 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...
106
			// 	foreach ( $donations as $donation  ) {
0 ignored issues
show
Unused Code Comprehensibility introduced by
50% 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...
107
			// 		give_update_meta( $donation, '_give_payment_user_id', $user_id );
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...
108
			// 	}
109
			// }
110
			// Do not need to update user_id in payment because we will get user id from donor id now.
111
		}
112
	}
113
}
114
add_action( 'give_insert_user', 'give_connect_donor_to_wpuser', 10, 2 );
115
116
117
/**
118
 * Setup site home url check
119
 *
120
 * Note: if location of site changes then run cron to validate licenses
121
 *
122
 * @since  1.7
123
 * @return void
124
 */
125
function give_validate_license_when_site_migrated() {
126
	// Store current site address if not already stored.
127
	$homeurl = home_url();
128
	if( ! get_option( 'give_site_address_before_migrate' ) ) {
129
		// Update site address.
130
		update_option( 'give_site_address_before_migrate', $homeurl );
131
132
		return;
133
	}
134
135
	if( $homeurl !== get_option( 'give_site_address_before_migrate' ) ) {
136
		// Immediately run cron.
137
		wp_schedule_single_event( time() , 'give_validate_license_when_site_migrated' );
138
139
		// Update site address.
140
		update_option( 'give_site_address_before_migrate', home_url() );
141
	}
142
143
}
144
add_action( 'init', 'give_validate_license_when_site_migrated' );
145
add_action( 'admin_init', 'give_validate_license_when_site_migrated' );
146
147
148
/**
149
 * Processing after donor batch export complete
150
 *
151
 * @since 1.8
152
 * @param $data
153
 */
154
function give_donor_batch_export_complete( $data ) {
155
	// Remove donor ids cache.
156
	if(
157
		isset( $data['class'] )
158
		&& 'Give_Batch_Donors_Export' === $data['class']
159
		&& ! empty( $data['forms'] )
160
		&& isset( $data['give_export_option']['query_id'] )
161
	) {
162
		Give_Cache::delete( Give_Cache::get_key( $data['give_export_option']['query_id'] ) );
163
	}
164
}
165
add_action('give_file_export_complete', 'give_donor_batch_export_complete' );
166
167
/**
168
 * Print css for wordpress setting pages.
169
 *
170
 * @since 1.8.7
171
 */
172
function give_admin_quick_css() {
173
	/* @var WP_Screen $screen */
174
	$screen = get_current_screen();
175
176
	if( ! ( $screen instanceof WP_Screen ) ) {
0 ignored issues
show
Bug introduced by
The class WP_Screen does not exist. Did you forget a USE statement, or did you not list all dependencies?

This error could be the result of:

1. Missing dependencies

PHP Analyzer uses your composer.json file (if available) to determine the dependencies of your project and to determine all the available classes and functions. It expects the composer.json to be in the root folder of your repository.

Are you sure this class is defined by one of your dependencies, or did you maybe not list a dependency in either the require or require-dev section?

2. Missing use statement

PHP does not complain about undefined classes in ìnstanceof checks. For example, the following PHP code will work perfectly fine:

if ($x instanceof DoesNotExist) {
    // Do something.
}

If you have not tested against this specific condition, such errors might go unnoticed.

Loading history...
177
		return false;
178
	}
179
180
	switch ( true ) {
181
		case ( 'plugins' === $screen->base ):
182
			?>
183
			<style>
184
				tr.active.update + tr.give-addon-notice-tr td{
185
                    box-shadow:none;
186
                    -webkit-box-shadow:none;
187
				}
188
				tr.active + tr.give-addon-notice-tr td{
189
                    position: relative;
190
				    top:-1px;
191
                }
192
				tr.active + tr.give-addon-notice-tr .notice{
193
                    margin: 5px 20px 15px 40px;
194
                }
195
196
				tr.give-addon-notice-tr .dashicons {
197
                    color: #f56e28;
198
                }
199
				tr.give-addon-notice-tr td{
200
					border-left: 4px solid #00a0d2;
201
				}
202
203
				tr.give-addon-notice-tr td{
204
					padding: 0!important;
205
				}
206
207
                tr.active.update + tr.give-addon-notice-tr .notice{
208
					margin: 5px 20px 5px 40px;
209
				}
210
			</style>
211
			<?php
212
	}
213
}
214
add_action( 'admin_head', 'give_admin_quick_css' );
215
216
217
/**
218
 * Set Donation Amount for Multi Level Donation Forms
219
 *
220
 * @param int    $form_id
221
 * @param object $form
0 ignored issues
show
Bug introduced by
There is no parameter named $form. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
222
 *
223
 * @since 1.8.9
224
 *
225
 * @return void
226
 */
227
function give_set_donation_levels_max_min_amount( $form_id ) {
228
	if (
229
		( 'set' === $_POST['_give_price_option'] ) ||
230
		( in_array( '_give_donation_levels', $_POST ) && count( $_POST['_give_donation_levels'] ) <= 0 ) ||
231
		! ( $donation_levels_amounts = wp_list_pluck( $_POST['_give_donation_levels'], '_give_amount' ) )
232
	) {
233
		// Delete old meta.
234
		give_delete_meta( $form_id, '_give_levels_minimum_amount' );
235
		give_delete_meta( $form_id, '_give_levels_maximum_amount' );
236
237
		return;
238
	}
239
240
	$min_amount = min( $donation_levels_amounts );
241
	$max_amount = max( $donation_levels_amounts );
242
243
	// Set Minimum and Maximum amount for Multi Level Donation Forms
244
	give_update_meta( $form_id, '_give_levels_minimum_amount', $min_amount ? give_sanitize_amount( $min_amount ) : 0 );
245
	give_update_meta( $form_id, '_give_levels_maximum_amount', $max_amount? give_sanitize_amount( $max_amount ) : 0 );
246
}
247
248
add_action( 'give_pre_process_give_forms_meta', 'give_set_donation_levels_max_min_amount', 30 );
249
250
251
/**
252
 * Save donor address when donation complete
253
 *
254
 * @since 2.0
255
 *
256
 * @param int $payment_id
257
 */
258
function _give_save_donor_billing_address( $payment_id ) {
259
	/* @var Give_Payment $donation */
260
	$donation = new Give_Payment( $payment_id );
261
262
	// Bailout
263
	if ( ! $donation->customer_id ) {
264
		return;
265
	}
266
267
268
	/* @var Give_Donor $donor */
269
	$donor = new Give_Donor( $donation->customer_id );
270
271
	// Save address.
272
	$donor->add_address( 'billing[]', $donation->address );
0 ignored issues
show
Documentation introduced by
The property $address is declared protected in Give_Payment. Since you implemented __get(), maybe consider adding a @property or @property-read annotation. This makes it easier for IDEs to provide auto-completion.

Since your code implements the magic setter _set, this function will be called for any write access on an undefined variable. You can add the @property annotation to your class or interface to document the existence of this variable.

<?php

/**
 * @property int $x
 * @property int $y
 * @property string $text
 */
class MyLabel
{
    private $properties;

    private $allowedProperties = array('x', 'y', 'text');

    public function __get($name)
    {
        if (isset($properties[$name]) && in_array($name, $this->allowedProperties)) {
            return $properties[$name];
        } else {
            return null;
        }
    }

    public function __set($name, $value)
    {
        if (in_array($name, $this->allowedProperties)) {
            $properties[$name] = $value;
        } else {
            throw new \LogicException("Property $name is not defined.");
        }
    }

}

Since the property has write access only, you can use the @property-write annotation instead.

Of course, you may also just have mistyped another name, in which case you should fix the error.

See also the PhpDoc documentation for @property.

Loading history...
273
}
274
add_action( 'give_complete_donation', '_give_save_donor_billing_address', 9999 );
275
276