Completed
Push — master ( d786b7...986814 )
by Justin
06:40 queued 01:07
created

init.php ➔ wpsc_product_files_existing()   B

Complexity

Conditions 7
Paths 21

Size

Total Lines 53
Code Lines 37

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
eloc 37
nc 21
nop 0
dl 0
loc 53
rs 7.5251
c 0
b 0
f 0

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
function wpsc_ajax_sales_quarterly() {
3
4
	if ( ! wpsc_is_store_admin() ) {
5
		return;
6
	}
7
8
	$lastdate = sanitize_text_field( $_POST['add_start'] );
9
	$date = preg_split( '/-/', $lastdate );
10
	if ( !isset( $date[0] ) )
11
		$date[0] = 0;
12
	if ( !isset( $date[1] ) )
13
		$date[1] = 0;
14
	if ( !isset( $date[2] ) )
15
		$date[2] = 0;
16
	$lastquart = mktime( 0, 0, 0, $date[1], $date[2], $date[0] );
17
	if ( $lastquart != get_option( 'wpsc_last_quarter' ) ) {
18
		update_option( 'wpsc_last_date', $lastdate );
19
		update_option( 'wpsc_fourth_quart', $lastquart );
20
		$thirdquart = mktime( 0, 0, 0, $date[1] - 3, $date[2], $date[0] );
21
		update_option( 'wpsc_third_quart', $thirdquart );
22
		$secondquart = mktime( 0, 0, 0, $date[1] - 6, $date[2], $date[0] );
23
		update_option( 'wpsc_second_quart', $secondquart );
24
		$firstquart = mktime( 0, 0, 0, $date[1] - 9, $date[2], $date[0] );
25
		update_option( 'wpsc_first_quart', $firstquart );
26
		$finalquart = mktime( 0, 0, 0, $date[1], $date[2], $date[0] - 1 );
27
		update_option( 'wpsc_final_quart', $finalquart );
28
	}
29
}
30
31
if ( isset( $_REQUEST['wpsc_admin_action'] ) && ($_REQUEST['wpsc_admin_action'] == 'wpsc_quarterly') )
32
	add_action( 'admin_init', 'wpsc_ajax_sales_quarterly' );
33
34
function wpsc_delete_file() {
35
	$product_id = absint( $_REQUEST['product_id'] );
36
	$file_name  = basename( $_REQUEST['file_name'] );
37
	check_admin_referer( 'delete_file_' . $file_name );
38
39
	_wpsc_delete_file( $product_id, $file_name );
40
41
	$sendback = wp_get_referer();
42
	wp_redirect( $sendback );
43
	exit;
44
}
45
46
47
if ( isset( $_REQUEST['wpsc_admin_action'] ) && ($_REQUEST['wpsc_admin_action'] == 'delete_file') )
48
	add_action( 'admin_init', 'wpsc_delete_file' );
49
50
/**
51
 *  Function and action for publishing or unpublishing single products
52
 */
53
function wpsc_ajax_toggle_published() {
54
	$product_id = absint( $_GET['product'] );
55
	check_admin_referer( 'toggle_publish_' . $product_id );
56
57
	$status = (wpsc_toggle_publish_status( $product_id )) ? ('true') : ('false');
58
	$sendback = add_query_arg( 'flipped', "1", wp_get_referer() );
59
	wp_redirect( esc_url_raw( $sendback ) );
60
	exit();
61
}
62
63
if ( isset( $_REQUEST['wpsc_admin_action'] ) && ($_REQUEST['wpsc_admin_action'] == 'toggle_publish') )
64
	add_action( 'admin_init', 'wpsc_ajax_toggle_published' );
65
66
/**
67
 * Function and action for duplicating products,
68
 * Refactored for 3.8
69
 * Purposely not duplicating stick post status (logically, products are most often duplicated because they share many attributes, where products are generally 'featured' uniquely.)
70
 */
71
function wpsc_duplicate_product() {
72
73
	if ( ! wpsc_is_store_admin() ) {
74
		return;
75
	}
76
77
	// Get the original post
78
	$id = absint( $_GET['product'] );
79
	$post = get_post( $id );
80
81
	// Copy the post and insert it
82
	if ( isset( $post ) && $post != null ) {
83
84
		$duplicate = new WPSC_Duplicate_Product( $post->ID );
85
		$new_id = $duplicate->duplicate_product_process();
86
87
		$duplicated = true;
88
		$sendback = wp_get_referer();
89
		$sendback = add_query_arg( 'duplicated', (int) $duplicated, $sendback );
90
91
		wp_redirect( esc_url_raw( $sendback ) );
92
		exit();
93
	} else {
94
		wp_die( __( 'Sorry, for some reason, we couldn\'t duplicate this product because it could not be found in the database, check there for this ID: ', 'wp-e-commerce' ) . $id );
95
	}
96
}
97
98
if ( isset( $_GET['wpsc_admin_action'] ) && ( $_GET['wpsc_admin_action'] == 'duplicate_product' ) )
99
	add_action( 'admin_init', 'wpsc_duplicate_product' );
100
101
function wpsc_purchase_log_csv() {
102
	if ( 'key' == $_REQUEST['rss_key'] && wpsc_is_store_admin() ) {
103
		_wpsc_download_purchase_log_csv( $_REQUEST );
104
	}
105
}
106
107
function _wpsc_download_purchase_log_csv( $args = array() ) {
108
	global $wpdb, $wpsc_gateways;
109
	get_currentuserinfo();
110
	$count = 0;
111
112
	if ( isset( $args['start_timestamp'] ) && isset( $args['end_timestamp'] ) ) {
113
		$start_timestamp = $args['start_timestamp'];
114
		$end_timestamp   = $args['end_timestamp'];
115
		$start_end_sql = "SELECT * FROM `" . WPSC_TABLE_PURCHASE_LOGS . "` WHERE `date` BETWEEN '%d' AND '%d' ORDER BY `date` DESC";
116
		$start_end_sql = apply_filters( 'wpsc_purchase_log_start_end_csv', $start_end_sql );
117
		$data = $wpdb->get_results( $wpdb->prepare( $start_end_sql, $start_timestamp, $end_timestamp ), ARRAY_A );
118
		/* translators: %1$s is "start" date, %2$s is "to" date */
119
		$csv_name = _x( 'Purchase Log %1$s to %2$s.csv', 'exported purchase log csv file name', 'wp-e-commerce' );
120
		$csv_name = sprintf( $csv_name, date( "M-d-Y", $start_timestamp ), date( "M-d-Y", $end_timestamp ) );
121
	} elseif ( isset( $args['m'] ) ) {
122
		$year = (int) substr( $args['m'], 0, 4);
123
		$month = (int) substr( $args['m'], -2 );
124
		$month_year_sql = "
125
			SELECT *
126
			FROM " . WPSC_TABLE_PURCHASE_LOGS . "
127
			WHERE YEAR(FROM_UNIXTIME(date)) = %d AND MONTH(FROM_UNIXTIME(date)) = %d
128
			ORDER BY `id` DESC
129
		";
130
		$month_year_sql = apply_filters( 'wpsc_purchase_log_month_year_csv', $month_year_sql );
131
		$data = $wpdb->get_results( $wpdb->prepare( $month_year_sql, $year, $month ), ARRAY_A );
132
		/* translators: %1$s is month, %2$s is year */
133
		$csv_name = _x( 'Purchase Log %1$s/%2$s.csv', 'exported purchase log csv file name', 'wp-e-commerce' );
134
		$csv_name = sprintf( $csv_name, $month, $year );
135
	} else {
136
		$sql = apply_filters( 'wpsc_purchase_log_month_year_csv', "SELECT * FROM " . WPSC_TABLE_PURCHASE_LOGS . " ORDER BY `id` DESC" );
137
		$data = $wpdb->get_results( $sql, ARRAY_A );
138
		$csv_name = _x( "All Purchase Logs.csv", 'exported purchase log csv file name', 'wp-e-commerce' );
139
	}
140
141
	$form_sql = "SELECT * FROM `" . WPSC_TABLE_CHECKOUT_FORMS . "` WHERE `active` = '1' AND `type` != 'heading' ORDER BY `checkout_order` DESC;";
142
	$form_data = $wpdb->get_results( $form_sql, ARRAY_A );
143
144
	$headers_array = array(
145
		_x( 'Purchase ID'   , 'purchase log csv headers', 'wp-e-commerce' ),
146
		_x( 'Purchase Total', 'purchase log csv headers', 'wp-e-commerce' ),
147
	);
148
	$headers2_array = array(
149
		_x( 'Payment Gateway', 'purchase log csv headers', 'wp-e-commerce' ),
150
		_x( 'Payment Status' , 'purchase log csv headers', 'wp-e-commerce' ),
151
		_x( 'Purchase Date'  , 'purchase log csv headers', 'wp-e-commerce' ),
152
	);
153
	$form_headers_array = array();
154
155
	$output = '';
156
157
	foreach ( (array) $form_data as $form_field ) {
158
		if ( empty ( $form_field['unique_name'] ) ) {
0 ignored issues
show
Coding Style introduced by
Space before opening parenthesis of function call prohibited
Loading history...
159
			$form_headers_array[] = $form_field['name'];
160
		} else {
161
			$prefix = false === strstr( $form_field['unique_name'], 'billing' ) ? _x( 'Shipping ', 'purchase log csv header field prefix', 'wp-e-commerce' ) : _x( 'Billing ', 'purchase log csv header field prefix', 'wp-e-commerce' );
162
			$form_headers_array[] = $prefix . $form_field['name'];
163
		}
164
	}
165
166
	foreach ( (array) $data as $purchase ) {
167
		$form_headers = '';
168
		$output .= "\"" . $purchase['id'] . "\","; //Purchase ID
169
		$output .= "\"" . $purchase['totalprice'] . "\","; //Purchase Total
170
		foreach ( (array) $form_data as $form_field ) {
171
			$collected_data_sql = "SELECT * FROM `" . WPSC_TABLE_SUBMITTED_FORM_DATA . "` WHERE `log_id` = '" . $purchase['id'] . "' AND `form_id` = '" . $form_field['id'] . "' LIMIT 1";
172
			$collected_data = $wpdb->get_results( $collected_data_sql, ARRAY_A );
173
			$collected_data = $collected_data[0];
174
175
			if (  ( 'billingstate' == $form_field['unique_name'] || 'shippingstate' == $form_field['unique_name'] ) && is_numeric( $collected_data['value'] ) )
176
				$output .= "\"" . wpsc_get_state_by_id( $collected_data['value'], 'code' ) . "\","; // get form fields
177
			else
178
				$output .= "\"" . str_replace( array( "\r", "\r\n", "\n" ), ' ', $collected_data['value'] ) . "\","; // get form fields
179
		}
180
181
		if ( isset( $wpsc_gateways[$purchase['gateway']] ) && isset( $wpsc_gateways[$purchase['gateway']]['display_name'] ) )
182
			$output .= "\"" . $wpsc_gateways[$purchase['gateway']]['display_name'] . "\","; //get gateway name
183
		else
184
			$output .= "\"\",";
185
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
186
187
		$status_name = wpsc_find_purchlog_status_name( $purchase['processed'] );
188
189
		$output .= "\"" . $status_name . "\","; //get purchase status
190
		$output .= "\"" . date( apply_filters( 'wpsc_purchase_log_csv_date_format', 'jS M Y' ), $purchase['date'] ) . "\","; //date
191
192
		$cartsql = "SELECT `prodid`, `quantity`, `name` FROM `" . WPSC_TABLE_CART_CONTENTS . "` WHERE `purchaseid`=" . $purchase['id'] . "";
193
		$cart = $wpdb->get_results( $cartsql, ARRAY_A );
194
195
		if ( $count < count( $cart ) )
196
			$count = count( $cart );
197
198
		$items = count( $cart );
199
		$i	 = 1;
200
201
		// Go through all products in cart and display quantity and sku
202
		foreach ( (array) $cart as $item ) {
203
			$skuvalue = get_product_meta( $item['prodid'], 'sku', true );
204
			if( empty( $skuvalue ) )
205
				$skuvalue = __( 'N/A', 'wp-e-commerce' );
206
			$output .= "\"" . $item['quantity'] . "\",";
207
			$output .= "\"" . str_replace( '"', '\"', $item['name'] ) . "\",";
208
209
			if ( $items <= 1 )
210
				$output .= "\"" . $skuvalue . "\"" ;
211
			elseif ( $items > 1 && $i != $items  )
212
				$output .= "\"" . $skuvalue . "\"," ;
213
			else
214
				$output .= "\"" . $skuvalue . "\"" ;
215
216
			$i++;
217
		}
218
219
		$output .= "\n"; // terminates the row/line in the CSV file
220
	}
221
	// Get the most number of products and create a header for them
222
	$headers3 = array();
223
	for( $i = 0; $i < $count; $i++ ){
224
		$headers3[] = _x( 'Quantity', 'purchase log csv headers', 'wp-e-commerce' );
225
		$headers3[] = _x( 'Product Name', 'purchase log csv headers', 'wp-e-commerce' );
226
		$headers3[] = _x( 'SKU', 'purchase log csv headers', 'wp-e-commerce' );
227
	}
228
229
	$headers	  = '"' . implode( '","', $headers_array ) . '",';
230
	$form_headers = '"' . implode( '","', $form_headers_array ) . '",';
231
	$headers2	 = '"' . implode( '","', $headers2_array ) . '",';
232
	$headers3	 = '"' . implode( '","', $headers3 ) . '"';
233
234
	$headers	  = apply_filters( 'wpsc_purchase_log_csv_headers', $headers . $form_headers . $headers2 . $headers3, $data, $form_data );
235
	$output	   = apply_filters( 'wpsc_purchase_log_csv_output' , $output, $data, $form_data );
236
237
	/**
238
	 * Fires when the WPSC purchase log is exported as a CSV
239
	 */
240
	do_action( 'wpsc_purchase_log_csv' );
241
242
	header( 'Content-Type: text/csv' );
243
	header( 'Content-Disposition: inline; filename="' . $csv_name . '"' );
244
	echo $headers . "\n". $output;
245
	exit;
246
}
247
248
if ( isset( $_REQUEST['wpsc_admin_action'] ) && ($_REQUEST['wpsc_admin_action'] == 'wpsc_downloadcsv') ) {
249
	add_action( 'admin_init', 'wpsc_purchase_log_csv' );
250
}
251
252
if ( isset( $_GET['purchase_log_csv'] ) && ( 'true' == $_GET['purchase_log_csv'] ) )
253
	add_action( 'admin_init', 'wpsc_purchase_log_csv' );
254
255
function wpsc_admin_sale_rss() {
256
257
	if ( ! wpsc_is_store_admin() ) {
258
		return;
259
	}
260
261
	global $wpdb;
262
	if ( ($_GET['rss'] == "true") && ($_GET['rss_key'] == 'key') && ($_GET['action'] == "purchase_log") ) {
263
		$sql = "SELECT * FROM `" . WPSC_TABLE_PURCHASE_LOGS . "` WHERE `date`!='' ORDER BY `date` DESC";
264
		$purchase_log = $wpdb->get_results( $sql, ARRAY_A );
265
		header( "Content-Type: application/xml; charset=UTF-8" );
266
		header( 'Content-Disposition: inline; filename="WP_E-Commerce_Purchase_Log.rss"' );
267
		$output = '';
268
		$output .= "<?xml version='1.0'?>\n\r";
269
		$output .= "<rss version='2.0'>\n\r";
270
		$output .= "  <channel>\n\r";
271
		$output .= "	<title>" . _x( 'WP eCommerce Product Log', 'admin rss product feed', 'wp-e-commerce' ) . "</title>\n\r";
272
		$output .= "	<link>" . admin_url( 'admin.php?page=' . WPSC_DIR_NAME . '/display-log.php' ) . "</link>\n\r";
273
		$output .= "	<description>" . _x( 'This is the WP eCommerce Product Log RSS feed', 'admin rss product feed', 'wp-e-commerce' ) . "</description>\n\r";
274
		$output .= "	<generator>" . _x( 'WP eCommerce Plugin', 'admin rss product feed', 'wp-e-commerce' ) . "</generator>\n\r";
275
276
		foreach ( (array)$purchase_log as $purchase ) {
277
			$purchase_link = admin_url( 'admin.php?page=' . WPSC_DIR_NAME . '/display-log.php' ) . "&amp;purchaseid=" . $purchase['id'];
278
			$purchase_title = _x( 'Purchase # %d', 'admin rss product feed', 'wp-e-commerce' );
279
			$purchase_title = sprintf( $purchase_title, $purchase['id'] );
280
			$output .= "	<item>\n\r";
281
			$output .= "	  <title>{$purchase_title}</title>\n\r";
282
			$output .= "	  <link>$purchase_link</link>\n\r";
283
			$output .= "	  <description>" . _x( 'This is an entry in the purchase log', 'admin rss product feed', 'wp-e-commerce' ) . ".</description>\n\r";
284
			$output .= "	  <pubDate>" . date( "r", $purchase['date'] ) . "</pubDate>\n\r";
285
			$output .= "	  <guid>$purchase_link</guid>\n\r";
286
			$output .= "	</item>\n\r";
287
		}
288
		$output .= "  </channel>\n\r";
289
		$output .= "</rss>";
290
		echo $output;
291
		exit();
292
	}
293
}
294
295
if ( isset( $_GET['action'] ) && ( 'purchase_log' == $_GET['action'] ) ) {
296
	add_action( 'admin_init', 'wpsc_admin_sale_rss' );
297
}
298
299
/**
300
 * Do Purchase Log Actions
301
 *
302
 * All purchase log actions are capability and nonce checked before calling
303
 * the relevent 'wpsc_purchase_log_action-{wpsc_purchase_log_action}' hook.
304
 *
305
 * @since  3.9.0
306
 */
307
function wpsc_do_purchase_log_actions() {
308
309
	if ( ! wpsc_is_store_admin() ) {
310
		return;
311
	}
312
313
	if ( isset( $_GET['wpsc_purchase_log_action'] ) && isset( $_GET['id'] ) && isset( $_GET['_wpnonce'] ) ) {
314
		$wpsc_purchase_log_action = sanitize_key( $_GET['wpsc_purchase_log_action'] );
315
316
		if ( wp_verify_nonce( $_GET['_wpnonce'], 'wpsc_purchase_log_action_' . $wpsc_purchase_log_action ) ) {
317
318
			do_action( 'wpsc_purchase_log_action-' . $wpsc_purchase_log_action, absint( $_GET['id'] ) );
319
320
		}
321
	}
322
323
}
324
add_action( 'admin_init', 'wpsc_do_purchase_log_actions' );
325
326
/**
327
 * Handle clear downloads lock purchase log action
328
 *
329
 * The 'wpsc_purchase_log_action-downloads_lock' action hook which calls this function is nonce and capability checked
330
 * in wpsc_do_purchase_log_actions() before triggering do_action( 'wpsc_purchase_log_action-downloads_lock' ).
331
 *
332
 * @since  3.9.0
333
 *
334
 * @param  int  $log_id  Purchase log ID.
335
 */
336
function wpsc_purchase_log_action_downloads_lock( $log_id ) {
337
338
	wpsc_purchlog_clear_download_items( $log_id );
339
340
	// Redirect back to purchase logs list
341
	$sendback = wp_get_referer();
342
	$sendback = esc_url_raw( add_query_arg( 'cleared', 1, $sendback ) );
343
	wp_redirect( $sendback );
344
	exit();
345
346
}
347
add_action( 'wpsc_purchase_log_action-downloads_lock', 'wpsc_purchase_log_action_downloads_lock' );
348
349
/**
350
 * Handle delete purchase log action
351
 *
352
 * The 'wpsc_purchase_log_action-delete' action hook which calls this function is nonce and capability checked
353
 * in wpsc_do_purchase_log_actions() before triggering do_action( 'wpsc_purchase_log_action-delete' ).
354
 *
355
 * @since  3.9.0
356
 *
357
 * @param  int  $log_id  Purchase log ID.
358
 */
359
function wpsc_purchase_log_action_delete( $log_id ) {
360
361
	$log = new WPSC_Purchase_Log( $log_id );
362
	$deleted = $log->delete();
363
364
	// Redirect back to purchase logs list
365
	$sendback = wp_get_referer();
366
	$sendback = remove_query_arg( array( 'c', 'id' ), $sendback );
367
	$sendback = esc_url_raw( add_query_arg( 'deleted', absint( $deleted ), $sendback ) );
368
	wp_redirect( $sendback );
369
	exit();
370
371
}
372
add_action( 'wpsc_purchase_log_action-delete', 'wpsc_purchase_log_action_delete' );
373
374
/**
375
 * Handle email receipt purchase log action
376
 *
377
 * The 'wpsc_purchase_log_action-email_receipt' action hook which calls this function is nonce and capability checked
378
 * in wpsc_do_purchase_log_actions() before triggering do_action( 'wpsc_purchase_log_action-email_receipt' ).
379
 *
380
 * @since  3.9.0
381
 *
382
 * @param  int  $log_id  Purchase log ID.
383
 */
384
function wpsc_purchase_log_action_email_receipt( $log_id ) {
385
386
	$sent = wpsc_purchlog_resend_email( $log_id );
387
388
	// Redirect back to purchase logs list
389
	$sendback = wp_get_referer();
390
	$sendback = esc_url_raw( add_query_arg( 'sent', absint( $sent ), $sendback ) );
391
	wp_redirect( $sendback );
392
	exit();
393
394
}
395
add_action( 'wpsc_purchase_log_action-email_receipt', 'wpsc_purchase_log_action_email_receipt' );
396
397
/**
398
 * Resend Purchase Log Email
399
 *
400
 * @param   int|string  $log_id  Required. Purchase log ID (empty string is deprecated).
401
 * @return  boolean			  Sent successfully.
402
 */
403
function wpsc_purchlog_resend_email( $log_id = '' ) {
404
405
	if ( ! wpsc_is_store_admin() ) {
406
		return;
407
	}
408
409
	global $wpdb;
410
411
	// Deprecate empty purchase log ID parameter.
412
	if ( $log_id == '' ) {
413
		_wpsc_doing_it_wrong( 'wpsc_purchlog_resend_email', __( '$log_id parameter requires a numeric purchase log ID.', 'wp-e-commerce' ), '3.9.0' );
414
415
		// Support redirect for legacy purposes for the moment
416
		$sendback = esc_url_raw( add_query_arg( 'sent', 0, wp_get_referer() ) );
417
		wp_redirect( $sendback );
418
		exit();
419
420
	}
421
422
	$log_id = absint( $log_id );
423
424
	if ( $log_id > 0 ) {
425
426
		$wpec_taxes_controller = new wpec_taxes_controller();
427
428
		if ( is_numeric( $log_id ) ) {
429
			$purchase_log = new WPSC_Purchase_Log( $log_id );
430
			return wpsc_send_customer_email( $purchase_log );
431
		}
0 ignored issues
show
introduced by
Blank line found after control structure
Loading history...
432
433
	}
434
435
	return false;
436
437
}
438
439
// Deprecate resending purchase log email receipt via URL query
440
if ( isset( $_REQUEST['email_buyer_id'] ) && is_numeric( $_REQUEST['email_buyer_id'] ) ) {
441
	_wpsc_doing_it_wrong( 'wpsc_purchlog_resend_email', __( 'Do not trigger resend purchase log email action via email_buyer_id URL query. Instead use the Purchase Log Action Links API.', 'wp-e-commerce' ), '3.9.0' );
442
}
443
444
/**
445
 * Clear Purchase Log Download Locks
446
 *
447
 * @param   string   $log_id  Required. Purchase log ID (empty string is deprecated).
448
 * @return  boolean
449
 */
450
function wpsc_purchlog_clear_download_items( $log_id = '' ) {
451
452
	if ( ! wpsc_is_store_admin() ) {
453
		return;
454
	}
455
456
	global $wpdb;
457
458
	// Deprecate empty purchase log ID parameter.
459
	if ( $log_id == '' ) {
460
		_wpsc_doing_it_wrong( 'wpsc_purchlog_clear_download_items', __( '$log_id parameter requires a numeric purchase log ID.', 'wp-e-commerce' ), '3.9.0' );
461
		return false;
462
	}
463
464
	$log_id = absint( $log_id );
465
466
	if ( $log_id > 0 ) {
467
468
		$downloadable_items = (array) $wpdb->get_results( $wpdb->prepare( "SELECT * FROM `" . WPSC_TABLE_DOWNLOAD_STATUS . "` WHERE `purchid` = %d", $log_id ), ARRAY_A );
469
470
		$wpdb->update( WPSC_TABLE_DOWNLOAD_STATUS, array( 'ip_number' => '' ), array( 'purchid' => $log_id ), '%s', '%d' );
471
472
		$email_form_field = $wpdb->get_var( "SELECT `id` FROM `" . WPSC_TABLE_CHECKOUT_FORMS . "` WHERE `type` IN ('email') AND `active` = '1' ORDER BY `checkout_order` ASC LIMIT 1" );
473
		$email_address = $wpdb->get_var( $wpdb->prepare( "SELECT `value` FROM `" . WPSC_TABLE_SUBMITTED_FORM_DATA . "` WHERE `log_id` = %d AND `form_id` = '{$email_form_field}' LIMIT 1", $log_id ) );
474
475
		foreach ( $downloadable_items as $downloadable_item ) {
476
			$download_links .= add_query_arg( 'downloadid', $downloadable_item['uniqueid'], home_url() )  . "\n";
0 ignored issues
show
Bug introduced by
The variable $download_links does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
477
		}
478
479
		wp_mail( $email_address, __( 'The administrator has unlocked your file', 'wp-e-commerce' ), str_replace( "[download_links]", $download_links, __( 'Dear Customer, We are pleased to advise you that your order has been updated and your downloads are now active. Please download your purchase using the links provided below. [download_links] Thank you for your order.', 'wp-e-commerce' ) ), "From: " . get_option( 'return_email' )  );
480
481
		return true;
482
483
	}
484
485
	return false;
486
487
}
488
489
// Deprecate clearing purchase log download locks via URL query
490
if ( isset( $_REQUEST['wpsc_admin_action'] ) && ($_REQUEST['wpsc_admin_action'] == 'clear_locks') ) {
491
	_wpsc_doing_it_wrong( 'wpsc_purchlog_clear_download_items', __( 'Do not trigger clear purchase log download locks action via wpsc_admin_action = clear_locks URL query. Instead use the Purchase Log Action Links API.', 'wp-e-commerce' ), '3.9.0' );
492
}
493
494
//bulk actions for purchase log
495
function wpsc_purchlog_bulk_modify() {
496
497
	if ( ! wpsc_is_store_admin() ) {
498
		return;
499
	}
500
501
	if ( $_POST['purchlog_multiple_status_change'] != -1 ) {
502
		if ( is_numeric( $_POST['purchlog_multiple_status_change'] ) && $_POST['purchlog_multiple_status_change'] != 'delete' ) {
503
			foreach ( (array)$_POST['purchlogids'] as $purchlogid ) {
504
				wpsc_purchlog_edit_status( $purchlogid, $_POST['purchlog_multiple_status_change'] );
505
				$updated++;
0 ignored issues
show
Bug introduced by
The variable $updated does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
506
			}
507
		} elseif ( $_POST['purchlog_multiple_status_change'] == 'delete' ) {
508
			foreach ( (array)$_POST['purchlogids'] as $purchlogid ) {
509
510
				$log = new WPSC_Purchase_Log( $purchlogid );
511
				$deleted_log = $log->delete();
512
				if ( $deleted_log ) {
513
					$deleted++;
0 ignored issues
show
Bug introduced by
The variable $deleted does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
514
				}
0 ignored issues
show
introduced by
Blank line found after control structure
Loading history...
515
516
			}
517
		}
518
	}
519
	$sendback = wp_get_referer();
520
	if ( isset( $updated ) ) {
521
		$sendback = add_query_arg( 'updated', $updated, $sendback );
522
	}
523
	if ( isset( $deleted ) ) {
524
		$sendback = add_query_arg( 'deleted', $deleted, $sendback );
525
	}
526
	if ( isset( $_POST['view_purchlogs_by'] ) ) {
527
		$sendback = add_query_arg( 'view_purchlogs_by', $_POST['view_purchlogs_by'], $sendback );
528
	}
529
	if ( isset( $_POST['view_purchlogs_by_status'] ) ) {
530
		$sendback = add_query_arg( 'view_purchlogs_by_status', $_POST['view_purchlogs_by_status'], $sendback );
531
	}
532
	wp_redirect( esc_url_raw( $sendback ) );
533
	exit();
534
}
535
536
if ( isset( $_REQUEST['wpsc_admin_action2'] ) && ($_REQUEST['wpsc_admin_action2'] == 'purchlog_bulk_modify') ) {
537
	add_action( 'admin_init', 'wpsc_purchlog_bulk_modify' );
538
}
539
540
/**
541
 * Update Purchase Log Notes
542
 *
543
 * @param  int	 $purchlog_id	 Purchase log ID.
544
 * @param  string  $purchlog_notes  Notes.
545
 */
546
function wpsc_purchlogs_update_notes( $purchlog_id = 0, $purchlog_notes = '' ) {
547
	if ( isset( $_POST['wpsc_purchlogs_update_notes_nonce'] ) && wp_verify_nonce( $_POST['wpsc_purchlogs_update_notes_nonce'], 'wpsc_purchlogs_update_notes' ) ) {
548
		if ( 0 == $purchlog_id && isset( $_POST['purchlog_id'] ) && '' == $purchlog_notes ) {
549
			$purchlog_id = absint( $_POST['purchlog_id'] );
550
			$purchlog_notes = stripslashes( $_POST['purchlog_notes'] );
551
		}
552
553
		if ( $purchlog_id > 0 ) {
554
			$purchase_log = new WPSC_Purchase_Log( $purchlog_id );
555
			$purchase_log->set( 'notes', $purchlog_notes );
556
			$purchase_log->save();
557
		}
558
	}
559
}
560
if ( isset( $_REQUEST['wpsc_admin_action'] ) && $_REQUEST['wpsc_admin_action'] == 'purchlogs_update_notes' ) {
561
	add_action( 'admin_init', 'wpsc_purchlogs_update_notes' );
562
}
563
564
/**
565
 * Delete a purchase log
566
 *
567
 * @deprecated  Use WPSC_Purchase_Log->delete() instead.
568
 *
569
 * @param   int|string  $purchlog_id  Required. Purchase log ID (empty string is deprecated).
570
 * @return  boolean				   Deleted successfully.
571
 */
572
function wpsc_delete_purchlog( $purchlog_id = '' ) {
573
574
	global $wpdb;
575
576
	// Deprecate empty purchase log ID parameter.
577
	if ( $purchlog_id == '' ) {
578
		_wpsc_doing_it_wrong( 'wpsc_delete_purchlog', __( '$purchlog_id parameter requires a numeric purchase log ID.', 'wp-e-commerce' ), '3.9.0' );
579
		return false;
580
	}
581
582
	$log = new WPSC_Purchase_Log( $purchlog_id );
583
584
	return $log->delete();
585
586
}
587
588
// Deprecate deleting purchase log via URL query
589
if ( isset( $_REQUEST['wpsc_admin_action'] ) && ( $_REQUEST['wpsc_admin_action'] == 'delete_purchlog' ) ) {
590
	_wpsc_doing_it_wrong( 'wpsc_delete_purchlog', __( 'Do not trigger delete purchase log action via wpsc_admin_action = delete_purchlog URL query. Instead use the Purchase Log Action Links API.', 'wp-e-commerce' ), '3.9.0' );
591
}
592
593
function _wpsc_action_flush_rewrite_rules() {
594
	flush_rewrite_rules( false );
595
}
596
597
function wpsc_update_option_product_category_hierarchical_url() {
598
	_wpsc_action_flush_rewrite_rules();
599
}
600
601
add_action( 'update_option_product_category_hierarchical_url', 'wpsc_update_option_product_category_hierarchical_url' );
602
603
function _wpsc_action_sanitize_option_grid_number_per_row( $value, $option ) {
604
	$value = (int) $value;
605
	if ( $value === 0 ) {
606
		add_settings_error( $option, 'invalid_grid_number_per_row', __( 'You just set the number of item per row for the grid view to 0. This means the column width will fall back to using whatever CSS you have for it. This could break your theme layout, so please make sure you have adjusted your theme\'s CSS accordingly.', 'wp-e-commerce' ) );
607
	}
608
609
	return $value;
610
}
611
add_filter( 'sanitize_option_grid_number_per_row', '_wpsc_action_sanitize_option_grid_number_per_row', 10, 2 );
612
613
/**
614
 * Automatically enable "Anyone can register" if registration before checkout is required.
615
 *
616
 * @since  3.8.9
617
 * @access private
618
 * @param  mixed $old_value Old value
619
 * @param  mixed $new_value New value
620
 */
621
function _wpsc_action_update_option_require_register( $old_value, $new_value ) {
0 ignored issues
show
Unused Code introduced by
The parameter $old_value is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
622
	if ( $new_value == 1 && ! get_option( 'users_can_register' ) ) {
623
		update_option( 'users_can_register', 1 );
624
		$message = __( 'You wanted to require your customers to log in before checking out. However, the WordPress setting <a href="%s">"Anyone can register"</a> was disabled. WP eCommerce has enabled that setting for you automatically.', 'wp-e-commerce' );
625
		$message = sprintf( $message, admin_url( 'options-general.php' ) );
626
		add_settings_error( 'require_register', 'users_can_register_turned_on', $message, 'updated' );
627
	}
628
}
629
add_action( 'update_option_require_register', '_wpsc_action_update_option_require_register', 10, 2 );
630
631
/**
632
 * Automatically turn off "require registration before checkout" if "Anyone can register" is disabled.
633
 *
634
 * @since  3.8.9
635
 * @access private
636
 * @param  mixed $old_value Old value
637
 * @param  mixed $new_value New value
638
 */
639
function _wpsc_action_update_option_users_can_register( $old_value, $new_value ) {
0 ignored issues
show
Unused Code introduced by
The parameter $old_value is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
640
	if ( ! $new_value && get_option( 'require_register' ) ) {
641
		update_option( 'require_register', 0 );
642
		$message = __( 'You just disabled the "Anyone can register" setting. As a result, the <a href="%s">"Require registration before checking out"</a> setting has been disabled.', 'wp-e-commerce' );
643
		$message = sprintf( $message, admin_url( 'options-general.php?page=wpsc-settings&tab=checkout' ) );
644
		add_settings_error( 'users_can_register', 'require_register_turned_off', $message, 'updated' );
645
	}
646
}
647
add_action( 'update_option_users_can_register', '_wpsc_action_update_option_users_can_register', 10, 2 );
648
649
/**
650
 * wpsc_update_page_urls gets the permalinks for products pages and stores them in the options for quick reference
651
 * @public
652
 *
653
 * @since 3.6
654
 * @param $auto (Boolean) true if coming from WordPress Permalink Page, false otherwise
655
 * @return nothing
656
 */
657
function wpsc_update_page_urls( $auto = false ) {
658
659
	if ( ! wpsc_is_store_admin() ) {
660
		return;
661
	}
662
663
	wpsc_update_permalink_slugs();
664
	wpsc_core_load_page_titles();
665
	wpsc_register_post_types();
666
667
	if ( ! $auto ) {
668
		$sendback = wp_get_referer();
669
		if ( isset( $updated ) )
0 ignored issues
show
Bug introduced by
The variable $updated seems to never exist, and therefore isset should always return false. Did you maybe rename this variable?

This check looks for calls to isset(...) or empty() on variables that are yet undefined. These calls will always produce the same result and can be removed.

This is most likely caused by the renaming of a variable or the removal of a function/method parameter.

Loading history...
670
			$sendback = add_query_arg( 'updated', $updated, $sendback );
671
672
		if ( isset( $_SESSION['wpsc_settings_curr_page'] ) )
0 ignored issues
show
introduced by
Usage of $_SESSION variable is prohibited.
Loading history...
673
			$sendback = add_query_arg( 'tab', $_SESSION['wpsc_settings_curr_page'], $sendback );
0 ignored issues
show
introduced by
Usage of $_SESSION variable is prohibited.
Loading history...
674
675
		wp_redirect( esc_url_raw( $sendback ) );
676
		exit();
677
	}
678
}
679
if ( isset( $_REQUEST['wpsc_admin_action'] ) && ($_REQUEST['wpsc_admin_action'] == 'update_page_urls') )
680
	add_action( 'admin_init', 'wpsc_update_page_urls' );
681
682
//change the regions tax settings
683
function wpsc_change_region_tax() {
684
685
	if ( ! wpsc_is_store_admin() ) {
686
		return;
687
	}
688
689
	global $wpdb;
690
	if ( is_array( $_POST['region_tax'] ) ) {
691
		foreach ( $_POST['region_tax'] as $region_id => $tax ) {
692
			if ( is_numeric( $region_id ) && is_numeric( $tax ) ) {
693
				$previous_tax = $wpdb->get_var( $wpdb->prepare( "SELECT `tax` FROM `" . WPSC_TABLE_REGION_TAX . "` WHERE `id` = %d LIMIT 1", $region_id ) );
694
				if ( $tax != $previous_tax ) {
695
					$wpdb->update(
696
						WPSC_TABLE_REGION_TAX,
697
						array(
698
							'tax' => $tax
699
						),
700
						array(
701
							'id' => $region_id
702
						),
703
						'%s',
704
						'%d'
705
						);
706
					$changes_made = true;
707
				}
708
			}
709
		}
710
		$sendback = wp_get_referer();
711
		wp_redirect( $sendback );
712
	}
713
}
714
if ( isset( $_REQUEST['wpsc_admin_action'] ) && ($_REQUEST['wpsc_admin_action'] == 'change_region_tax') )
715
	add_action( 'admin_init', 'wpsc_change_region_tax' );
716
717
function wpsc_product_files_existing() {
718
	//List all product_files, with checkboxes
719
720
	if ( ! wpsc_is_store_admin() ) {
721
		return;
722
	}
723
724
	$product_id = absint( $_GET["product_id"] );
725
	$file_list = wpsc_uploaded_files();
726
727
	$args = array(
728
		'post_type' => 'wpsc-product-file',
729
		'post_parent' => $product_id,
730
		'numberposts' => -1,
0 ignored issues
show
introduced by
Disabling pagination is prohibited in VIP context, do not set numberposts to -1 ever.
Loading history...
731
		'post_status' => 'all'
732
	);
733
	$attached_files = (array)get_posts( $args );
734
735
	$attached_files_by_file = array();
736
	foreach ( $attached_files as $key => $attached_file ) {
737
		$attached_files_by_file[$attached_file->post_title] = & $attached_files[$key];
738
	}
739
740
	$output = "<span class='admin_product_notes select_product_note '>" . esc_html__( 'Choose a downloadable file for this product:', 'wp-e-commerce' ) . "</span><br>";
741
	$output .= "<form method='post' class='product_upload'>";
742
	$output .= '<div class="ui-widget-content multiple-select select_product_file" style="width:100%">';
743
	$num = 0;
744
	foreach ( (array)$file_list as $file ) {
745
		$num++;
746
		$checked_curr_file = "";
747
		if ( isset( $attached_files_by_file[$file['display_filename']] ) ) {
748
			$checked_curr_file = "checked='checked'";
749
		}
750
751
		$output .= "<p " . ((($num % 2) > 0) ? '' : "class='alt'") . " id='select_product_file_row_$num'>\n";
752
		$output .= "  <input type='checkbox' name='select_product_file[]' value='" . $file['real_filename'] . "' id='select_product_file_$num' " . $checked_curr_file . " />\n";
753
		$output .= "  <label for='select_product_file_$num'>" . $file['display_filename'] . "</label>\n";
754
		$output .= "</p>\n";
755
	}
756
757
	$output .= "</div>";
758
	$output .= "<input type='hidden' id='hidden_id' value='$product_id' />";
759
	$output .= "<input data-nonce='" . _wpsc_create_ajax_nonce( 'upload_product_file' ) . "' type='submit' name='save' name='product_files_submit' class='button-primary prdfil' value='" . esc_html__( 'Save Product Files', 'wp-e-commerce' ) . "' />";
760
	$output .= "</form>";
761
	$output .= "<div class='" . ((is_numeric( $product_id )) ? "edit_" : "") . "select_product_handle'><div></div></div>";
762
	$output .= "<script type='text/javascript'>\n\r";
763
	$output .= "var select_min_height = " . (25 * 3) . ";\n\r";
764
	$output .= "var select_max_height = " . (25 * ($num + 1)) . ";\n\r";
765
	$output .= "</script>";
766
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
767
768
	echo $output;
769
}
770
if ( isset( $_REQUEST['wpsc_admin_action'] ) && ($_REQUEST['wpsc_admin_action'] == 'product_files_existing') )
771
	add_action( 'admin_init', 'wpsc_product_files_existing' );
772
773
function wpsc_update_variations() {
774
	$product_id = absint( $_POST["product_id"] );
775
	$product_type_object = get_post_type_object('wpsc-product');
776
	if (!current_user_can($product_type_object->cap->edit_post, $product_id))
777
		return;
778
779
	//Setup postdata
780
	$post_data = array();
781
	$post_data['edit_var_val'] = isset( $_POST['edit_var_val'] ) ? $_POST["edit_var_val"] : '';
782
783
	//Add or delete variations
784
	wpsc_edit_product_variations( $product_id, $post_data );
785
}
786
787
if ( isset($_POST["edit_var_val"]) )
788
	add_action( 'admin_init', 'wpsc_update_variations', 50 );
789
790
function wpsc_delete_variation_set() {
791
	check_admin_referer( 'delete-variation' );
792
793
	if ( is_numeric( $_GET['deleteid'] ) ) {
794
		$variation_id = absint( $_GET['deleteid'] );
795
796
		$variation_set = get_term( $variation_id, 'wpsc-variation', ARRAY_A );
797
0 ignored issues
show
Coding Style introduced by
Functions must not contain multiple empty lines in a row; found 2 empty lines
Loading history...
798
799
		$variations = get_terms( 'wpsc-variation', array(
800
					'hide_empty' => 0,
801
					'parent' => $variation_id
802
				) );
803
804
		foreach ( (array)$variations as $variation ) {
805
			$return_value = wp_delete_term( $variation->term_id, 'wpsc-variation' );
806
		}
807
808
		if ( !empty( $variation_set ) ) {
809
			$return_value = wp_delete_term( $variation_set['term_id'], 'wpsc-variation' );
810
		}
811
		$deleted = 1;
812
	}
813
814
	$sendback = wp_get_referer();
815
	if ( isset( $deleted ) ) {
816
		$sendback = add_query_arg( 'deleted', $deleted, $sendback );
817
	}
818
	$sendback = remove_query_arg( array(
819
				'deleteid',
820
				'variation_id'
821
					), $sendback );
822
823
	wp_redirect( esc_url_raw( $sendback ) );
824
	exit();
825
}
826
827
if ( isset( $_REQUEST['wpsc_admin_action'] ) && ( 'wpsc-delete-variation-set' == $_REQUEST['wpsc_admin_action'] ) )
828
	add_action( 'admin_init', 'wpsc_delete_variation_set' );
829
830
function wpsc_backup_theme() {
831
832
	if ( ! wpsc_is_store_admin() ) {
833
		return;
834
	}
835
836
	$wp_theme_path = get_stylesheet_directory();
837
	wpsc_recursive_copy( $wp_theme_path, WPSC_THEME_BACKUP_DIR );
838
	$_SESSION['wpsc_themes_backup'] = true;
0 ignored issues
show
introduced by
Usage of $_SESSION variable is prohibited.
Loading history...
839
	$sendback = wp_get_referer();
840
	wp_redirect( $sendback );
841
842
	exit();
843
}
844
if ( isset( $_REQUEST['wpsc_admin_action'] ) && ( $_REQUEST['wpsc_admin_action'] == 'backup_themes' ) )
845
	add_action( 'admin_init', 'wpsc_backup_theme' );
846
847
/**
848
 * Delete a coupon
849
 *
850
 * @since 3.8
851
 */
852
function wpsc_delete_coupon(){
853
854
	global $wpdb;
855
856
	check_admin_referer( 'delete-coupon' );
857
858
	if ( ! function_exists( 'wpsc_is_store_admin' ) || ! wpsc_is_store_admin() ) {
859
		return;
860
	}
861
862
	$deleted = 0;
863
864
	if ( isset( $_GET['delete_id'] ) ) {
865
		$coupon = new WPSC_Coupon( $_GET['delete_id'] );
866
		$coupon->delete();
867
		$deleted = 1;
868
	}
869
870
	$sendback = wp_get_referer();
871
872
	if ( $deleted ) {
873
		$sendback = add_query_arg( 'deleted', $deleted, $sendback );
874
	}
875
876
	$sendback = remove_query_arg( array( 'deleteid', 'wpsc_admin_action' ), $sendback );
877
	wp_redirect( esc_url_raw( $sendback ) );
878
	exit();
879
880
}
881
882
// Delete Coupon
883
if ( isset( $_REQUEST['wpsc_admin_action'] ) && ( 'wpsc-delete-coupon' == $_REQUEST['wpsc_admin_action'] ) ) {
884
	add_action( 'admin_init', 'wpsc_delete_coupon' );
885
}
886
887
function _wpsc_action_update_option_base_country( $old_value, $new_value ) {
0 ignored issues
show
Unused Code introduced by
The parameter $old_value is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
888
	global $wpdb;
889
	$region_count = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(`regions`.`id`) FROM `" . WPSC_TABLE_REGION_TAX . "` AS `regions` INNER JOIN `" . WPSC_TABLE_CURRENCY_LIST . "` AS `country` ON `country`.`id` = `regions`.`country_id` WHERE `country`.`isocode` IN('%s')",  $new_value ) );
890
	if ( ! $region_count )
891
		update_option( 'base_region', '' );
892
}
893
add_action( 'update_option_base_country', '_wpsc_action_update_option_base_country', 10, 2 );
894