Test Failed
Push — release/2.1 ( d820cd...c669cb )
by Ravinder
05:21
created

plugins.php ➔ give_plugin_notice_css()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 27
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 27
rs 8.8571
c 0
b 0
f 0
1
<?php
2
/**
3
 * Admin Plugins
4
 *
5
 * @package     Give
6
 * @subpackage  Admin/Plugins
7
 * @copyright   Copyright (c) 2016, WordImpress
8
 * @license     https://opensource.org/licenses/gpl-license GNU Public License
9
 * @since       1.4
10
 */
11
12
// Exit if accessed directly.
13
if ( ! defined( 'ABSPATH' ) ) {
14
	exit;
15
}
16
17
/**
18
 * Plugins row action links
19
 *
20
 * @since 1.4
21
 *
22
 * @param array $actions An array of plugin action links.
23
 *
24
 * @return array An array of updated action links.
25
 */
26
function give_plugin_action_links( $actions ) {
27
	$new_actions = array(
28
		'settings' => sprintf(
29
			'<a href="%1$s">%2$s</a>',
30
			admin_url( 'edit.php?post_type=give_forms&page=give-settings' ),
31
			__( 'Settings', 'give' )
32
		),
33
	);
34
35
	return array_merge( $new_actions, $actions );
36
}
37
38
add_filter( 'plugin_action_links_' . GIVE_PLUGIN_BASENAME, 'give_plugin_action_links' );
39
40
41
/**
42
 * Plugin row meta links
43
 *
44
 * @since 1.4
45
 *
46
 * @param array  $plugin_meta An array of the plugin's metadata.
47
 * @param string $plugin_file Path to the plugin file, relative to the plugins directory.
48
 *
49
 * @return array
50
 */
51
function give_plugin_row_meta( $plugin_meta, $plugin_file ) {
52
	if ( GIVE_PLUGIN_BASENAME !== $plugin_file ) {
53
		return $plugin_meta;
54
	}
55
56
	$new_meta_links = array(
57
		sprintf(
58
			'<a href="%1$s" target="_blank">%2$s</a>',
59
			esc_url(
60
				add_query_arg(
61
					array(
62
						'utm_source'   => 'plugins-page',
63
						'utm_medium'   => 'plugin-row',
64
						'utm_campaign' => 'admin',
65
					), 'https://givewp.com/documentation/'
66
				)
67
			),
68
			__( 'Documentation', 'give' )
69
		),
70
		sprintf(
71
			'<a href="%1$s" target="_blank">%2$s</a>',
72
			esc_url(
73
				add_query_arg(
74
					array(
75
						'utm_source'   => 'plugins-page',
76
						'utm_medium'   => 'plugin-row',
77
						'utm_campaign' => 'admin',
78
					), 'https://givewp.com/addons/'
79
				)
80
			),
81
			__( 'Add-ons', 'give' )
82
		),
83
	);
84
85
	return array_merge( $plugin_meta, $new_meta_links );
86
}
87
88
add_filter( 'plugin_row_meta', 'give_plugin_row_meta', 10, 2 );
89
90
91
/**
92
 * Get the Parent Page Menu Title in admin section.
93
 * Based on get_admin_page_title WordPress Function.
94
 *
95
 * @since 1.8.17
96
 *
97
 * @global array  $submenu
98
 * @global string $plugin_page
99
 *
100
 * @return string $title Page title
101
 */
102
function give_get_admin_page_menu_title() {
103
	$title = '';
104
	global $submenu, $plugin_page;
105
106
	foreach ( array_keys( $submenu ) as $parent ) {
107
		if ( 'edit.php?post_type=give_forms' !== $parent ) {
108
			continue;
109
		}
110
111
		foreach ( $submenu[ $parent ] as $submenu_array ) {
112
			if ( $plugin_page !== $submenu_array[2] ) {
113
				continue;
114
			}
115
116
			$title = isset( $submenu_array[0] ) ?
117
				$submenu_array[0] :
118
				$submenu_array[3];
119
		}
120
	}
121
122
	return $title;
123
}
124
125
/**
126
 * Store recently activated Give's addons to wp options.
127
 *
128
 * @since 2.1.0
129
 */
130
function give_recently_activated_addons() {
131
	// Check if action is set.
132
	if ( isset( $_REQUEST['action'] ) ) {
133
		$plugin_action = ( '-1' !== $_REQUEST['action'] ) ? $_REQUEST['action'] : ( isset( $_REQUEST['action2'] ) ? $_REQUEST['action2'] : '' );
0 ignored issues
show
introduced by
Detected access of super global var $_REQUEST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-sanitized input variable: $_REQUEST
Loading history...
134
		$plugins       = array();
0 ignored issues
show
introduced by
Overridding WordPress globals is prohibited
Loading history...
135
136
		switch ( $plugin_action ) {
137
			case 'activate': // Single add-on activation.
138
				$plugins[] = $_REQUEST['plugin'];
0 ignored issues
show
introduced by
Detected access of super global var $_REQUEST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-sanitized input variable: $_REQUEST
Loading history...
139
				break;
140
			case 'activate-selected': // If multiple add-ons activated.
141
				$plugins = $_REQUEST['checked'];
0 ignored issues
show
introduced by
Overridding WordPress globals is prohibited
Loading history...
introduced by
Detected access of super global var $_REQUEST, probably need manual inspection.
Loading history...
introduced by
Detected usage of a non-sanitized input variable: $_REQUEST
Loading history...
142
				break;
143
		}
144
145
		if ( ! empty( $plugins ) ) {
146
			$give_addons = array();
147
			foreach ( $plugins as $plugin ) {
148
				// Get plugins which has 'Give-' as prefix.
149
				if ( stripos( $plugin, 'Give-' ) !== false ) {
0 ignored issues
show
introduced by
Found "!== false". Use Yoda Condition checks, you must
Loading history...
150
					$give_addons[] = $plugin;
151
				}
152
			}
153
154
			if ( ! empty( $give_addons ) ) {
155
				// Update the Give's activated add-ons.
156
				update_option( 'give_recently_activated_addons', $give_addons );
157
			}
158
		}
159
	}
160
}
161
162
// Add add-on plugins to wp option table.
163
add_action( 'activated_plugin', 'give_recently_activated_addons', 10 );
164
165
/**
166
 * Create new menu in plugin section that include all the add-on
167
 *
168
 * @since 2.1.0
169
 *
170
 * @param $plugin_menu
171
 *
172
 * @return mixed
173
 */
174
function give_filter_addons_do_filter_addons( $plugin_menu ) {
175
	global $plugins;
176
177
	foreach ( $plugins['all'] as $plugin_slug => $plugin_data ) {
178
179
		if ( false !== strpos( $plugin_data['Name'], 'Give' ) && false !== strpos( $plugin_data['AuthorName'], 'WordImpress' ) ) {
180
			$plugins['give'][ $plugin_slug ]           = $plugins['all'][ $plugin_slug ];
181
			$plugins['give'][ $plugin_slug ]['plugin'] = $plugin_slug;
182
			// replicate the next step.
183
			if ( current_user_can( 'update_plugins' ) ) {
184
				$current = get_site_transient( 'update_plugins' );
185
				if ( isset( $current->response[ $plugin_slug ] ) ) {
186
					$plugins['give'][ $plugin_slug ]['update'] = true;
187
				}
188
			}
189
		}
190
	}
191
192
	return $plugin_menu;
193
194
}
195
196
add_filter( 'show_advanced_plugins', 'give_filter_addons_do_filter_addons' );
197
198
/**
199
 * Make the Give Menu as an default menu and update the Menu Name
200
 *
201
 * @since 2.1.0
202
 *
203
 * @param $views
204
 *
205
 * @return mixed
206
 */
207
function give_filter_addons_filter_addons( $views ) {
208
209
	global $status, $plugins;
210
211
	if ( ! empty( $plugins['give'] ) ) {
212
		$class = '';
213
214
		if ( 'give' === $status ) {
215
			$class = 'current';
216
		}
217
218
		$views['give'] = sprintf(
219
			'<a class="%s" href="plugins.php?plugin_status=give"> %s <span class="count">(%s) </span></a>',
220
			$class,
221
			__( 'Give', 'give' ),
222
			count( $plugins['give'] )
223
		);
224
	}
225
226
	return $views;
227
}
228
229
add_filter( 'views_plugins', 'give_filter_addons_filter_addons' );
230
231
/**
232
 * Set the Give as the Main menu when admin click on the Give Menu in Plugin section.
233
 *
234
 * @since 2.1.0
235
 *
236
 * @param $plugins
237
 *
238
 * @return mixed
239
 */
240
function give_prepare_filter_addons( $plugins ) {
241
	global $status;
242
243
	if ( isset( $_REQUEST['plugin_status'] ) && 'give' === $_REQUEST['plugin_status'] ) {
244
		$status = 'give';
0 ignored issues
show
introduced by
Overridding WordPress globals is prohibited
Loading history...
245
	}
246
247
	return $plugins;
248
}
249
250
add_filter( 'all_plugins', 'give_prepare_filter_addons' );
251
252
253
/**
254
 * Display the upgrade notice message.
255
 *
256
 * @param array $data     Array of plugin metadata.
257
 * @param array $response An array of metadata about the available plugin update.
258
 *
259
 * @since 2.1
260
 */
261
function give_in_plugin_update_message( $data, $response ) {
0 ignored issues
show
Unused Code introduced by
The parameter $response 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...
262
	$new_version           = $data['new_version'];
263
	$current_version_parts = explode( '.', GIVE_VERSION );
264
	$new_version_parts     = explode( '.', $new_version );
265
266
	// If it is a minor upgrade then return.
267
	if ( version_compare( $current_version_parts[0] . '.' . $current_version_parts[1], $new_version_parts[0] . '.' . $new_version_parts[1], '=' ) ) {
268
269
		return;
270
	}
271
272
	// Get the upgrade notice from the trunk.
273
	$upgrade_notice = give_get_plugin_upgrade_notice( $new_version );
274
275
	// Display upgrade notice.
276
	echo apply_filters( 'give_in_plugin_update_message', $upgrade_notice ? '</p>' . wp_kses_post( $upgrade_notice ) . '<p class="dummy">' : '' );
0 ignored issues
show
introduced by
Expected a sanitizing function (see Codex for 'Data Validation'), but instead saw 'apply_filters'
Loading history...
277
}
278
279
// Display upgrade notice.
280
add_action( 'in_plugin_update_message-Give/give.php', 'give_in_plugin_update_message', 10, 2 );
281
282
283
/**
284
 * Get the upgrade notice from WordPress.org.
285
 *
286
 * Note: internal purpose use only
287
 *
288
 * @since 2.1
289
 *
290
 * @param string $new_version New verison of the plugin.
291
 *
292
 * @return string
293
 */
294
function give_get_plugin_upgrade_notice( $new_version ) {
295
296
	// Cache the upgrade notice.
297
	$transient_name = "give_upgrade_notice_{$new_version}";
298
	$upgrade_notice = get_transient( $transient_name );
299
300
	if ( false === $upgrade_notice ) {
301
		$response = wp_safe_remote_get( 'https://plugins.svn.wordpress.org/give/trunk/readme.txt' );
302
303
		if ( ! is_wp_error( $response ) && ! empty( $response['body'] ) ) {
304
			$upgrade_notice = give_parse_plugin_update_notice( $response['body'], $new_version );
305
			set_transient( $transient_name, $upgrade_notice, DAY_IN_SECONDS );
306
		}
307
	}
308
309
	return $upgrade_notice;
310
}
311
312
313
/**
314
 * Parse update notice from readme file.
315
 *
316
 * Note: internal purpose use only
317
 *
318
 * @since 2.1
319
 *
320
 * @param  string $content     Content of the readme.txt file.
321
 * @param  string $new_version The version with current version is compared.
322
 *
323
 * @return string
324
 */
325
function give_parse_plugin_update_notice( $content, $new_version ) {
326
	$version_parts     = explode( '.', $new_version );
327
	$check_for_notices = array(
328
		$version_parts[0] . '.0',
329
		$version_parts[0] . '.0.0',
330
		$version_parts[0] . '.' . $version_parts[1],
331
	);
332
333
	// Regex to extract Upgrade notice from the readme.txt file.
334
	$notice_regexp = '~==\s*Upgrade Notice\s*==\s*=\s*(.*)\s*=(.*)(=\s*' . preg_quote( $new_version ) . '\s*=|$)~Uis';
335
336
	$upgrade_notice = '';
337
338
	foreach ( $check_for_notices as $check_version ) {
339
		if ( version_compare( GIVE_VERSION, $check_version, '>' ) ) {
340
			continue;
341
		}
342
343
		$matches = null;
344
345
		if ( preg_match( $notice_regexp, $content, $matches ) ) {
346
			$notices = (array) preg_split( '~[\r\n]+~', trim( $matches[2] ) );
347
348
			if ( version_compare( trim( $matches[1] ), $check_version, '=' ) ) {
349
				$upgrade_notice .= '<p class="give-plugin-upgrade-notice">';
350
351
				foreach ( $notices as $index => $line ) {
352
					$upgrade_notice .= preg_replace( '~\[([^\]]*)\]\(([^\)]*)\)~', '<a href="${2}">${1}</a>', $line );
353
				}
354
355
				$upgrade_notice .= '</p>';
356
			}
357
358
			break;
359
		}
360
	}
361
362
	return wp_kses_post( $upgrade_notice );
363
}
364
365
366
/**
367
 * Add styling to the plugin upgrade notice.
368
 *
369
 * @since 2.1
370
 */
371
function give_plugin_notice_css() {
372
?>
373
	<style type="text/css">
374
	#give-update .give-plugin-upgrade-notice {
375
		font-weight: 400;
376
		background: #fff8e5!important;
377
		border-left: 4px solid #ffb900;
378
		border-top: 1px solid #ffb900;
379
		padding: 9px 0 9px 12px!important;
380
		margin: 0 -12px 0 -16px!important;
381
	}
382
383
	#give-update .give-plugin-upgrade-notice:before {
384
		content: '\f348';
385
		display: inline-block;
386
		font: 400 18px/1 dashicons;
387
		speak: none;
388
		margin: 0 8px 0 -2px;
389
		vertical-align: top;
390
	}
391
392
	#give-update .dummy {
393
		display: none;
394
	}
395
	</style>
396
<?php
397
}
398
399
add_action( 'admin_head', 'give_plugin_notice_css' );
400